The build price is never the total cost. Budget for hosting, paid APIs, logging and alerting and a maintenance allowance for every year the software runs.
Write down the hard constraints. These include the platforms and services involved, the data you have and where it lives, regulatory obligations, user volumes, target platforms and any technology you are committed to.
Before signing, plan for the handover before it becomes urgent. Require that the source repository stays under your account from the beginning, and that documentation is written as you go rather than left to the end.
Handing a project to a vendor is the arrangement where someone else is accountable for shipping: the partner staffs the team, the partner manages the day-to-day work, and they carry the delivery risk.
The paperwork needs a slower read than the pitch. Three clauses do most of the work: ownership of the code, non-disclosure, and termination and handover.
Set out the scope as user stories or scenarios: who does what, and what happens next. Equally important, write down what the first release deliberately excludes.
Say what the word done means for the important items. Clear acceptance criteria do not require any formal notation: a short list setting out what must be true when the feature works will do.
Hiring in-house buys you the most control. The engineers absorb your domain over time, and that knowledge stays in the building.