Open with the problem you are solving, not your preferred technology. Which people will use this, how often, smm services for startups and what happens today? An estimator who grasps the purpose can propose a cheaper route to it; someone handed only a list of screens prices your assumptions along with the work.
Set out the scope as concrete flows: a walk through each important path. Equally important, state explicitly what is out of scope. An explicit exclusion list prevents more disagreement during acceptance than any other single page. Mark too which decisions are settled and which are still under discussion — estimators price uncertainty, and concealing the open questions helps nobody.
Set out your constraints. This means existing systems the ongoing software support company has to talk to, existing databases and their quality, regulatory obligations, expected load, which devices matter and any technology you are committed to. If there is a hard date, say what depends on it: an experienced team can often rearrange the plan to hit it, python vs php performance but not if the date is a secret.
Say what completion means for the important items. Acceptance criteria do not require formal language: a short list describing what choosing a software development team user should be able to do is sufficient. This one section shortens the sign-off process by a surprising margin and eliminates the most common source of disputes.
One last thing, ask for a specific format. Request a task-level breakdown, the assumptions behind each number, whatever the team considers risky and an optimistic and a pessimistic figure. Take a broad range as useful information rather than evasion: it normally identifies exactly which requirement is unclear. From there tighten that section and ask again — the revised figure tends to be much more reliable.