Start with relevant experience, not the size of the portfolio. Ask to see a couple of projects that sit close to your technology stack, and then find out who actually wrote that code. A solid partner is happy to connect you with the people who would work on your project. Vague answers at this stage usually mean you are talking to a reseller.
The which contract model for software development deserves more scrutiny than the proposal. Three clauses do most of the work: ecommerce development services assignment of intellectual property, confidentiality, and termination and handover. Everything produced should transfer to you as it is paid for, including designs, scripts and infrastructure configuration. Be careful with language that leaves framework code outside the transfer, since that is often the part you cannot replace later.
Find out how the estimate was built. An honest estimate arrives with a written set of assumptions, a breakdown by feature or module and a range rather than a single number. A fixed-bid deal only makes sense when the scope is genuinely frozen; otherwise the supplier adds a risk premium and you pay for livewire vs inertia it anyway. Time and materials moves the risk back to the client, so it needs visible weekly reporting and a spending cap.
How the work is run matters as much as the number of developers. Ask what happens when the scope changes, who signs off on a feature and what the QA setup looks like. A well-run team should be able to demonstrate running software rather than status reports. Acceptance criteria in writing remain the only reliable protection against an argument at delivery time.
Finally, plan for the handover while the relationship is still good. Require that the code repository stays under your account from the first commit, and that the documentation is refreshed in every sprint. A vendor with nothing to hide says yes immediately; resistance at this point says most of what you need to know.