A number produced without questions counts as a bad sign. A competent team responds with questions first: about integrations. A supplier that quotes without asking anything is simply guessing, and a guess will be corrected later — and you will pay for it.
Look out for a mismatch between the people you meet and the developers actually assigned. Insist on the names and CVs of the actual team in the agreement, with a provision about substitutions. A team that will only describe roles and never names individuals is preserving the right to assign anyone it likes.
Ask for access to the repository from day one. A team that hands over code only at milestones expects you to accept a black box. Daily commits reveal who is really on the project far better than a slide deck. The same applies to the build and deployment setup: if nothing runs automatically, promises about quality remain nothing more than words.
Loose wording in the contract around code ownership is not an accident. The document must state in plain terms that all outputs produced under it belong to your software development company for startups on payment. Check also the governing law and how payments are structured: custom web application development heavy prepayment with no milestone tied to it takes away any leverage you would otherwise keep.
Last, examine how they communicate. Ask how many hours you will share each day, best aso service which named person handles your questions and within what time. Some genuine overlap generally works; zero overlap converts each small question into a day of delay. Careless writing in the proposal will not improve later.