Hiring in-house buys you long-term retention of knowledge. The developers learn your domain over time, and that knowledge sits in the building.
The contract deserves more scrutiny than the proposal. Three clauses do most of the work: ownership of the code, the NDA, and termination and handover.
The requirements nobody writes down can easily double the number. An internal tool used by twenty people is a very different build from the same idea handling thousands of external customers.
Finally, plan for the end of the engagement before it becomes urgent. Require that the source repository stays in your organisation from day one, and that a readme and architecture notes are kept current as the code changes.
Last, look at the working rhythm. Confirm how much working-time overlap the teams will share with your working day, which named person is expected to answer day-to-day questions and on what response times.
Finally, say what you expect back. Ask for a breakdown by feature or module, the assumptions used, whatever the team considers risky and a range rather than a single figure.
The mix of people behind the number matters a great deal.
The number in the proposal is rarely the total cost. Expect infrastructure, paid APIs, monitoring and a maintenance allowance each year.