Adding roof measurement reports to a roofing CRM

How a roofing CRM or estimating platform offers measured roof reports under its own brand, what the integration looks like end to end, and the product decisions that matter more than the code.

By industryMeasured reports Last updated Markdown

Your users already have a job record with an address on it. The feature they want is a button on that record that produces a measured roof, under your brand, with the numbers flowing straight into the estimate. This guide is how to build that on RoofQuery, and the decisions that are yours to make rather than ours.

What does the integration look like?

Five calls, in this order.

  1. Order. When a user clicks the button, POST the job's address and coordinates with a scope. Store the returned order id on the job.
  2. Show progress. The order starts processing and moves to in-progress when a technician picks it up. Surface that on the job so the rep knows it is coming.
  3. Receive. The completed webhook carries every measurement. Write squares, pitch areas and edge lengths into your estimate model directly from the webhook body. No second call.
  4. Present. Link the PDF from the job with the contractor's brand profile on it, so their customer sees their company and logo.
  5. Correct. Give the user a "request a revision" action. It is free, and the original stays available while it is redone.

Who pays, and how much?

RoofQuery charges your account $13 per residential report and $35 per commercial, from a prepaid balance with auto-recharge. What you charge your users is your call. Common models: a per-report fee with margin, a bundle of reports in a plan tier, or free reports as a retention feature funded by the subscription. The API does not care which. Pricing is also available from the API, so your product can show it without hardcoding.

How does branding work with many contractors?

One brand profile per contractor. When a contractor signs up to your platform, create a profile with their name, contact details, colors and logo, and store the profile id on their record. Every PDF link for their jobs carries ?brand=<their id>, and their customer sees their company, logo included. Your own account defaults never change. Read how white-label branding works before you design the settings screen.

Which scope should the button use?

Ask the user, or default sensibly per job type. A re-roof quote usually wants all_structures; a storm inspection on the main house may only want primary_only. There is no server-side default on purpose.

How do report fields map to estimate lines?

Estimate lineDrive it from
Shingles or membranetotalSquares, plus your waste factor by complexity
Steep-slope labourpitchAreas above your steep threshold
Drip edge and starteredgeTotals.EAVE + edgeTotals.RAKE
Ridge cap and venthipsAndRidgesLengthFt
Ice and water, valley metaledgeTotals.VALLEY
Step and wall flashingedgeTotals.STEP_FLASHING, edgeTotals.WALL_FLASHING
Detached garage as a separate optionstructures[1] onward

The fields are defined under report data and in the glossary.

Which edge cases need handling?

Build the whole thing in sandbox first. The test addresses run the happy path, a commercial roof, a cancelled order and a failed payment in seconds, with real webhooks. Testing in sandbox has the details.

Frequently asked questions

Can a roofing CRM resell RoofQuery reports?

Yes. There is no reseller agreement to sign and no minimum. Reports are $13 residential and $35 commercial to your account, and you set your own price to your users.

Can each contractor on my platform have their own branding?

Yes, including their logo. Create a brand profile per contractor and put its id on their PDF links.

How long does the integration take?

The core is five calls and a webhook handler. Most teams have a working sandbox integration in a day, because the sandbox runs the whole lifecycle in seconds.

Try it on a real roof

Create an account, generate a sandbox key, and order against the test addresses. Real webhooks, real XML, real PDFs, nothing charged.