Look first at relevant experience, not the length of the client list. Ask for two or three projects that match your technology stack, hire llm developers and then ask which engineers actually built it. An honest provider is happy to connect you with the people who would work on your project. Evasive answers at this stage usually mean the demo work came from somewhere else.
The agreement deserves more scrutiny than the proposal. Three sections matter more than the rest: offshore development rates ownership of the code, the NDA, and exit terms and handover. All the work product must transfer to you once invoices are settled, along with designs, scripts and infrastructure configuration. Look closely at wording that leaves framework code outside the transfer, because it is usually exactly the piece that locks you in.
Find out how the estimate was built. A credible estimate is accompanied by a written set of assumptions, a task-level breakdown and a best case and a worst case. A fixed-bid deal is only reasonable when the requirements are stable and documented; otherwise the supplier pads the number and you pay for it anyway. A time-and-materials model moves the risk back to the client, so it needs a cap, regular demos and transparent reporting.
Process matters more than the number of hire outsourced developers. Establish what happens when the scope changes, who defines done and how testing is organised. A mature team should be able to demonstrate a working build every one or two weeks. Written acceptance criteria remain the practical protection against an argument at delivery time.
Before signing, plan for the day you no longer need this vendor at the start rather than at the end. Ask that the source repository sits under your account from the beginning, and that a readme and architecture notes are kept current as the code changes. A provider confident in its own work says yes immediately; resistance at this point says most of what you need to know.