A number produced without questions should be treated as a warning, not a service level. A competent team returns a list of questions: about who owns the data and what happens on failure. A supplier that prices without asking anything is simply guessing, livewire alternative and that guess becomes a change request later — and you will pay for it.
Watch for a gap between the team in the pitch and those who eventually appear in the repository. Insist on named engineers in the statement of work, with a clause about substitutions. A vendor that will only describe roles and will not commit to specific engineers is preserving its own flexibility at your cost.
Require the source repository from the first week. A team that hands over nothing between demos expects you to take delivery on faith. Daily commits show you how many people are really working far better than a weekly report. This extends to the build and deployment setup: if there is no pipeline, which is better laravel or .net quality claims are nothing more than words.
Ambiguous wording in the contract around code ownership is not an accident. The contract needs to state explicitly that all deliverables become the property of your business upon settlement of the relevant invoice. Also check the governing law and the payment schedule: heavy prepayment with no deliverable attached takes away any leverage you would otherwise keep.
Last, examine how they communicate. Establish how much working-time overlap there will be with your timezone, which named person answers questions and how quickly. Four hours of overlap is usually enough; no overlap converts each small question into a twenty-four hour round trip. Unclear written communication in the sales phase does not improve later.