I love the thinking behind this, but there's a trap I see a lot in home services: trying to make the form do its qualifying before you've secured the lead.
For roofing, the homeowner rarely knows enough to self-qualify accurately. They know their roof's leaking or missing tiles, but they don't know the scope, the urgency, the right materials, which photos are helpful, or what a fair price looks like. If the form starts feeling like homework, you'll filter for the most patient and tech-savvy-not necessarily the highest-value jobs. You'll lose a lot of people before you ever get a name and number.
I'd split this into two distinct jobs.
First: capture the lead. Get the basics-service type, postcode or address, name, phone number. That's it. Then, after you've got them, you enrich and route.
So I'd move the contact info earlier than seems intuitive. Then follow with urgency, photo uploads, booking availability, rough estimate. Extra detail is gold, but only after the relationship has started.
For pricing, ranges work far better than exact quotes in home services. A fixed price before an inspection creates a trust issue fast-especially when the job turns out bigger than expected. A range sets realistic expectations and gives you room to qualify further.
On tracking, I'd separate the stages clearly: form started, contact captured, form completed, visit booked, job won. Those are not equal conversions. For Google Ads, once you have enough volume, I'd optimise toward booked visit or qualified lead, not form completion. The form is only as good as the contractor's follow-up speed and closing skill.
Longer term, taking payment online works for small, fixed-price repairs (like a single tile replacement). For bigger roofing jobs, I'd prioritise automating intake, qualification, booking, reminders, and follow-up first. Don't try to automate the full close until the basic lead flow is converting reliably. One step at a time.