A quote that comes back within a day is a bad sign. A competent team returns a list of questions: about who owns the data and what happens on failure. A supplier that quotes without asking anything is probably pricing a guess, and the gap resurfaces as a change order — at your expense.
Watch for a gap between the engineers on the sales call and the developers actually assigned. Request the names and CVs of the actual team in the agreement, custom erp development services with a clause about substitutions. A team that only offers abstract roles and refuses to name people is keeping the option to staff you with whoever is free.
Insist on commit-level visibility from day one. A provider that delivers nothing difference between laravel and ruby on rails demos expects you to accept a black box. Regular commits and pull requests reveal who is really on the project far better than any status report. The same applies to the automated test suite: laravel vs nextjs if there is no pipeline, quality claims remain just talk.
Loose contract language around intellectual property is never an accident. The contract must state in plain terms that the code, designs and documentation become the property of the client as they are paid for. Look too at which country's law applies and the payment schedule: a large upfront payment with no milestone tied to it eliminates any leverage you would otherwise keep.
Last, look at communication. Ask what overlap you will share each day, which named person is expected to answer your questions and on what response times. Four hours of overlap is usually enough; no overlap stretches a five-minute question into a lost day. Unclear written communication in the early emails does not improve later.