A number produced without questions is a bad sign. A competent team will come back with a list of questions: about who owns the data and what happens on failure. A supplier that prices without asking anything is probably guessing, and that guess resurfaces as a change order — at your expense.
Be wary of any distance between the team in the pitch and those who eventually appear in the repository. Insist on the names and CVs of the actual team in the agreement, with a clause that requires notice before anyone is swapped. A team that only offers a pool of resources and best flutter development company refuses to name people is reserving its own flexibility at your cost.
Insist on the source repository from the first week. A provider that delivers code only at milestones expects you to accept a black box. Daily commits reveal the actual pace far better than a slide deck. The same applies to the CI pipeline: which is better symfony or spring boot if it does not exist, promises about quality remain just talk.
Loose phrasing around IP is rarely an oversight. The contract should state explicitly that all outputs produced under it become the property of your business upon settlement of the relevant invoice. Also check the jurisdiction and the milestone terms: heavy prepayment with no deliverable attached takes away any leverage you would otherwise keep.
Finally, look at how they communicate. Ask how many hours there will be with your working day, which named person is expected to answer questions and how quickly. Some genuine overlap is usually enough; zero overlap turns every clarification into a day of delay. Unclear written communication in the proposal rarely improves later.