A number produced without questions counts as a warning, not a service level. An experienced provider responds with a list of questions: about integrations. A provider that commits to a figure without asking anything is working from a template, and the gap resurfaces as a change order — on your budget.
Watch for a mismatch between the dedicated team vs freelancers in the pitch and the developers actually assigned. Ask for specific people rather than roles in the agreement, with a provision about substitutions. A provider that will only describe a pool of resources and nearshore vs offshore outsourcing refuses to name individuals is reserving the right to assign anyone it likes.
Require commit-level visibility from the first week. A dedicated team model vs project-based outsourcing that hands over code only at milestones is asking you to accept a black box. Regular commits and hire dedicated aiohttp developer pull requests reveal the actual pace far better than a weekly report. This extends to the CI pipeline: if there is no pipeline, promises about quality are unverifiable.
Vague phrasing around code ownership is not a formality. The document must state in plain terms that all deliverables transfer to the client on payment. Check also which country's law applies and the payment schedule: a large upfront payment with nothing due in return for weeks takes away the only leverage you have.
Lastly, examine communication. Establish how many hours you will share with your timezone, who is expected to answer questions and on what response times. Four hours of overlap is normally sufficient; zero overlap stretches every clarification into a twenty-four hour round trip. Careless writing in the early emails does not improve later.