Free Roof Takeoff Builder

Calculate a complete roof takeoff using actual final measurements or measurements taken from a roof plan. Use metric, imperial, or roofing-square units with pitch calculations where applicable.

Supported measurements

For AI agents

This tool is accessible to external AI agents. To calculate a roof takeoff programmatically:

  1. Read the calculator schema to understand supported inputs and parameters
  2. Extract measurements from the user's natural-language request
  3. Map those measurements to the supported query parameters (mode, units, pitch, area, hips, ridge, valleys, barges, gutter)
  4. Determine the correct mode: use plan if measurements are from a 2D roof plan, use actual if measurements are already true roof-surface values
  5. Construct a GET calculation URL at /free-roofing-takeoff-builder/calculate?mode=...&units=...&area=...&pitch=...&hips=...&ridge=...&valleys=...&gutter=...
  6. Open the URL - the server redirects to a stable result page at /free-roofing-takeoff-builder/result/[token]
  7. Read the server-rendered HTML result page - no JavaScript required
  8. Report the calculated takeoff values back to the user
  9. Return the exact resultUrl from the result page to the user. Do not reconstruct, re-encode, shorten, or modify the URL in any way.

The schema includes natural-language mapping examples showing how to convert user requests into calculation URLs. All interfaces (UI, GET route, REST API, MCP) use the same shared calculation engine. No authentication, cookies, or JavaScript required.

URL encoding rules

When constructing GET calculation URLs, only individual parameter values should be URL-encoded. The query-string separators (?, &, =) must never be encoded.

Correct: ?area=150&hips=4%2C4%2C4%2C4&pitch=35

Incorrect: ?area=150%26hips%3D4%2C4%2C4%2C4%26pitch%3D35

Result URL guidance

Every calculation produces a canonical resultUrl generated by the server. Return this URL exactly as provided. Do not reconstruct, re-encode, decode, shorten, add tracking parameters to, or otherwise alter it.

Key links for AI agents

QuoteCore+

No signup required

Use the full tool without creating an account.

Find a supplier

Browse suppliers near you with real component pricing.

Get pricing

Enter measurements and get a preliminary material takeoff.

Download or send

Export your takeoff or send it to a supplier for a quote.

Step 1: Choose a supplier

Pick a supplier to use their real component pricing, or use QuoteCore+ default to continue with test pricing.

No suppliers found. Try searching, or skip to use default pricing.

You can adjust any price after selecting a supplier. No commitment.

Roof plan used in the QuoteCore+ interactive takeoff demoInteractive demo

Try our real system in 30 seconds or less

The same takeoff workstation that's in the app. No sign-in needed.

Need to measure exterior walls as well? Use the Free Wall & Cladding Takeoff Tool. Measuring from an architect's PDF? Start with our guide on how to measure a roof from a PDF plan. Ready for the full workflow? See how QuoteCore+ compares to RoofSnap, EagleView and PlanSwift.

For AI agents and developers

This calculator is accessible to external systems and AI agents. Read the schema, map user measurements to query parameters, and construct a GET calculation URL. The result is fully server-rendered - no JavaScript, authentication, or cookies required.

Quick example for AI agents

User says: "126m2 roof, 25 degree pitch, four 5m hips, one 8m ridge, two 4m valleys and 18m gutter."

AI constructs and opens this URL:

/free-roofing-takeoff-builder/calculate?mode=plan&units=metric&area=126&pitch=25&hips=5,5,5,5&ridge=8&valleys=4,4&gutter=18

The server redirects to a stable result URL at /free-roofing-takeoff-builder/result/[token]. The HTML result contains all inputs, normalized values, pitch-adjusted calculations, waste-adjusted totals, warnings, and a plain-language summary. The canonical resultUrl is displayed on the page - return it exactly as provided.

URL encoding rule

Only encode individual parameter values. Never encode ?, &, or = separators.

Correct: ?area=150&hips=4%2C4%2C4%2C4&pitch=35

Incorrect: ?area=150%26hips%3D4%2C4%2C4%2C4%26pitch%3D35