Look first at relevant experience, not the length of the client list. Request a couple of case studies that resemble your domain and your stack, outsourcing software development and then ask which is better monolith or microservices engineers actually built it. A serious vendor will put you on a call with the tech lead. Evasive answers at this stage usually mean the demo work came from somewhere else.
The agreement deserves more scrutiny than the proposal. Three clauses do most of the work: assignment of intellectual property, confidentiality, ai automation services and notice periods and handover. All the work product must transfer to you as it is paid for, together with designs, scripts and infrastructure configuration. Look closely at language that leaves framework code outside the transfer, because it is usually exactly the piece that locks you in.
Ask how they estimate. A credible estimate is accompanied by the assumptions behind it, a breakdown by feature or module and a best case and a worst case. A fixed price only makes sense when the scope is genuinely frozen; in any other case the provider adds a risk premium and you fund the buffer regardless. A time-and-materials model puts the risk on your side, so it needs a cap, regular demos and transparent reporting.
The delivery process matters as much as the number of developers. Find out what happens when the scope changes, who writes the acceptance criteria and how testing is organised. A mature team should be able to walk you through a working build every one or two weeks. Written acceptance criteria are your only real protection against an argument at delivery time.
Finally, consider the handover while the relationship is still good. Require that the source repository stays on infrastructure you own from the first commit, and that documentation is written as you go rather than left to the end. A provider confident in its own work will agree quickly; resistance at this point tells you most of what you need to know.
