The measurement engine that powers 9 Figure Roofer, open to partners. Address in — measured roof, priced job, verified storm, materials list, branded proposal, and an Xactimate-ready scope pack out.
Eleven pages of engineering-grade aerial measurement — squares, pitch, facets, edge lengths, annotated imagery. This exact report was generated by POST /v1/reports in 12 seconds.
Async pattern: submit the address, get a report_id instantly with a free inline teaser, then receive the finished PDF + structured JSON by webhook (or poll). Tap any page to enlarge.
1 / 11
2 / 11
3 / 11
4 / 11
5 / 11
6 / 11
7 / 11
8 / 11
9 / 11
10 / 11
11 / 11One call turns a finished report into a customer-ready proposal PDF — your company name, your rate per square, scope of work, and a financed total. This one priced the same Sarasota roof at $425/square: $11,661.66.
1 / 1The adjuster's unfair advantage: measurements + materials math + NWS storm verification + claim fields, assembled into one Xactimate-ready scope pack. This pack verified Hurricane Milton on the reported date of loss — 6 NWS local storm reports within 30 miles, the nearest 6.8 miles from the roof.
1 / 2
2 / 2Actual (abridged) responses from the same address. Highlighted fields are the ones your app cares about.
{
"address": "6987 Easton Ct, Sarasota, FL…",
"covered": true,
"quality": "HIGH",
"roof_sqft": 2472,
"squares_est": 24.7,
"imagery_date": {"year": 2024, "month": 2, "day": 20},
"is_street_address": true
}
{
"address": "6987 Easton Ct, Sarasota, FL…",
"footprint_sqft": 2286,
"perimeter_ft": 207,
"area_m2": 212.4,
"source": "google_solar_estimate"
}
{
"squares": 24.7,
"squares_with_waste": 27.7,
"tiers": [
{"tier": "GOOD", "price": 11767, "monthly_from": 143},
{"tier": "BETTER", "price": 15228, "monthly_from": 185},
{"tier": "BEST", "price": 25610, "monthly_from": 311}
],
"financing_terms": "est. 10-year term @ 9.99% APR…"
}
{
"date": "2024-10-09", "peril": "wind",
"verified": true,
"reports_found": 6,
"nearest_mi": 6.8,
"samples": [{
"type": "TROPICAL CYCLONE", "city": "2 NW Myakka River State",
"remark": "Roof ripped off the Bank of America building…",
"valid": "2024-10-10T00:19:00Z"
}],
"source": "NWS Local Storm Reports"
}
One call against the finished report returned this materials list. No AI guessing — deterministic math from measured geometry, with the formula shown on every line.
| Material | Qty | How it was computed |
|---|---|---|
| Architectural shingles | 82 bundles | 24.72 sq × 1.10 waste = 27.19 sq × 3 bundles/sq |
| Synthetic underlayment | 3 rolls | 24.72 sq ÷ 10 sq/roll |
| Ice & water shield (valleys) | 1 roll | 22 valley ft ÷ 66 lf/roll |
| Starter strip | 3 bundles | (eave 192 + rake 20) = 212 lf ÷ 105 lf/bundle |
| Hip & ridge cap | 4 bundles | (ridge 78 + hip 12) = 90 lf ÷ 25 lf/bundle |
| Drip edge | 22 sticks (10 ft) | 212 lf ÷ 10 ft/stick |
| Coil roofing nails | 2 boxes | 27.19 sq (incl. waste) ÷ 20 sq/box |
| Pipe boots / flashings | 3 each | default 3 — count penetrations on site |
| Ridge vent | 20 sticks (4 ft) | ridge 78 lf ÷ 4 ft/stick |
Pay per pull from a prepaid credit balance. No subscription, no minimums. Failed async jobs auto-refund.
| Product | Endpoint | What you get | Price |
|---|---|---|---|
| Teaser | GET /v1/teaser | Coverage + instant roof sq ft, sub-second | $1.05 |
| Footprint | GET /v1/footprint | Ground footprint sq ft + perimeter | $1.10 |
| Storm Verify | POST /v1/storm_verify | NWS local storm report match by date + peril | $1.25 |
| BOM | POST /v1/bom | Deterministic materials list from measurements | $1.25 |
| Homeowner Price | GET /v1/homeowner_price | GOOD/BETTER/BEST tiers + monthly financing | $2.25 |
| Proposal | POST /v1/proposals | Branded proposal PDF from a finished report | $2.50 |
| Measurement Report | POST /v1/reports | Full aerial report — PDF + JSON, ~20s async | $6.00 |
| AI-A-MATE Scope Pack | POST /v1/scope | Xactimate-ready scope pack: measurements + BOM + storm verify + claim fields | $26.00 |
Bearer key auth. Prepaid credits. Sync where it can be, async where it must be.
One Authorization: Bearer header. Keys are hashed at rest and shown exactly once at issue.
Load a balance, pull until it's spent. Empty balance returns a clean 402 — never a surprise invoice. Failed jobs auto-refund.
Teasers, footprints, and prices return instantly. Reports and scope packs queue to auto-scaling workers and land in ~20s.
Job-done callbacks signed sha256 HMAC with your per-partner secret, retried on a backoff schedule. Or just poll.
# Instant teaser — is this roof measurable, and how big is it? curl -H "Authorization: Bearer nfm_live_XXXX" \ "https://api.9fr.talktotom.ai/v1/teaser" \ --get --data-urlencode "address=6987 Easton Ct, Sarasota, FL 34238"
# Full measurement report — submit, then poll (or receive the webhook) curl -X POST -H "Authorization: Bearer nfm_live_XXXX" \ -H "Content-Type: application/json" \ -d '{"address":"6987 Easton Ct, Sarasota, FL 34238","company":"Your Roofing Co"}' \ https://api.9fr.talktotom.ai/v1/reports # → {"report_id":"…","status":"queued","teaser":{…}} (~20s later: status "done") curl -H "Authorization: Bearer nfm_live_XXXX" \ https://api.9fr.talktotom.ai/v1/reports/REPORT_ID
Partners get sandbox keys the same day. Tell us what you're building.
Request API KeysArtifacts on this page are real outputs from live API pulls against a public commercial address in Sarasota, FL on 9/18/2026. Prices shown are the standard sheet; partner and volume pricing available. Xactimate® is a registered trademark of Xactware Solutions, Inc.; 9FR is not affiliated with Xactware. The AI-A-MATE Scope Pack is an Xactimate-ready scope pack that imports into your own estimating seat.