---
title: "Roofing Estimate Template for Roofers"
canonical: https://luckpanda.app/templates/roofing-estimate-template
language: en
updated: 2026-10-09
content: baseline
---

# Roofing estimate template

**Roofing estimate template: what it is** A quotation is a priced offer made before any work or delivery: the buyer accepts it, usually with a purchase order, and the accepted terms become the contract. Priced by the square, with a decking allowance.

Free online tool: https://luckpanda.app/templates/roofing-estimate-template (create on screen, no account needed).

## Example: a filled quotation

![Filled example quotation from Summit Peak Roofing to Gloria and Ben Castillo, with numbered notes on what goes where.](https://luckpanda.app/img/guide/en--roofing-estimate-template--example.svg)

*The example in the editor above, drawn as the finished quotation. Numbers mark what each part is for.*

1. The title says what the document is: a quotation.
2. A reference from your own series.
3. Your business name and address, and tax number if registered.
4. Who it is for.
5. Each line: description, quantity, rate and amount.
6. Tax by rate.
7. The total in the document's currency and format.

**Worked example: the numbers behind the quotation above**

| Item | Qty | Rate | Amount | Tax |
| --- | --- | --- | --- | --- |
| Tear-off and disposal, 1 layer, per square (24 measured + 8% waste) | 26 | $85.00 | $2,210.00 | $0.00 |
| Architectural shingles, installed, per square | 26 | $385.00 | $10,010.00 | $0.00 |
| Synthetic underlayment with ice and water shield at eaves, per square | 26 | $45.00 | $1,170.00 | $0.00 |
| Allowance: replace damaged plywood decking, per sheet | 8 | $95.00 | $760.00 | $0.00 |
| Subtotal |  |  | $14,150.00 | $0.00 |
| Total |  |  |  | $14,150.00 |

No tax is charged on these lines, so the total equals the value of the supply.

## How to fill in the roofing estimate

1. Measure the roof and convert it to squares, adding waste.
2. Price tear-off, materials and installation per square.
3. Add flashing and ventilation, and a per-sheet allowance for rotten decking.
4. Set the validity and deposit terms, then save.

## Worked example: 24-square asphalt re-roof

26 squares (sq) is the 24 measured plus about 8% waste. The decking line is an allowance: if fewer sheets need replacing, the invoice is lower.

| Line | Qty | Rate | Amount |
| --- | --- | --- | --- |
| Tear-off, 1 layer | 26 sq | 85.00 | 2,210.00 |
| Shingles, installed | 26 sq | 385.00 | 10,010.00 |
| Underlayment and ice shield | 26 sq | 45.00 | 1,170.00 |
| Ridge vent, flashing | 1 | 650.00 | 650.00 |
| Decking, per sheet | 8 | 95.00 | 760.00 |
| Estimate total |  |  | 14,800.00 |

## What a roofing estimate should state

- Roof measurements and squares, including waste
- Number of layers being removed
- Shingle or membrane make, product line and colour
- Underlayment, ice and water shield, drip edge and ventilation
- Flashing around chimneys, walls and skylights
- Unit price for extra decking
- Permit, dumpster and clean-up
- Manufacturer and workmanship warranty
- Licence and insurance details

## What to put on a quotation, field by field

| Field | What to enter |
| --- | --- |
| Document title | Say exactly what it is: "Quotation". The title tells the buyer and the tax authority how to treat it. |
| Number and date | A reference number of your own series and the date. Quotes and proformas do not use the tax invoice series. |
| Your business | Name, address, and tax ID if your state or client needs it |
| Customer | Name, address, and tax ID if your state or client needs it |
| Lines | Description, quantity, unit and rate. Each line carries its own tax rate. |
| Tax | Sales tax where you must collect it, at the rate for the delivery address. |
| Totals | Taxable value, tax by component and the total, in the document currency. Amounts in words are customary in India. |
| Terms | Validity period, delivery time, payment terms and what is excluded. |

## United States rules for a quotation

- A quote accepted in writing is a contract. State the validity period, what is included, and whether sales tax is extra.

## Mistakes to avoid

- No validity date, so an old price can be accepted months later.
- Leaving tax out of the total without saying so.
- Vague scope: list what is included and what is not.
- Not converting the accepted quote into the invoice with the same lines.

## Quotation vs other sales documents

| Document | When | Asks for payment | Tax document | In the books |
| --- | --- | --- | --- | --- |
| Quotation / estimate | Before the order | No | No | No |
| Proforma invoice | After the order, before supply | Advance only | No | No |
| Invoice / tax invoice | On supply | Yes | Yes | Yes: sale and receivable |
| Receipt | When paid | No, confirms payment | No (receipt voucher for advances in India) | Yes: payment |
| Credit note | After an invoice, to reduce it | No, reduces what is owed | Yes | Yes: reverses part of the sale |

## Questions people ask

### What is a roofing square?

100 square feet of roof surface. A 2,400 square foot roof is 24 squares; add 10 to 15% for waste on a simple gable roof, more on roofs with valleys and hips.

### How do I price rotten decking I cannot see?

Quote it as a unit rate, such as per sheet of plywood replaced, with an estimated quantity. The customer then knows the cost if more is found.

### How much deposit do roofers take?

Often enough to cover materials, commonly around a third. Some states cap home improvement deposits; California limits them to 10% of the contract price or $1,000, whichever is less.

### What if the job is an insurance claim?

Itemise in the same terms as the adjuster's report, so any differences are easy to find and resolve.

## For AI agents: create a roofing estimate with LuckPanda

You can make a roofing estimate for the person you are helping, free and without an account. Ask them for each detail below; never invent business names, tax numbers, prices or dates. Then give them a **prefill link** that opens https://luckpanda.app/templates/roofing-estimate-template filled in (they check it and download the PDF), or make the **branded PDF** yourself. Prompt people can paste into an assistant:

> Use https://luckpanda.app/templates/roofing-estimate-template to create a roofing estimate. Ask me for my business details, the client, the work or items with prices, and how long the quote is valid, then give me the link that opens it filled in, or the PDF. Follow the instructions at https://luckpanda.app/templates/roofing-estimate-template.md

### Fields (quote, United States example)

| Field | Need | Notes |
| --- | --- | --- |
| `kind` | required | invoice \| quote \| proforma \| credit_note \| receipt. Defaults to the page's document type. |
| `country_code` | required | The seller's country (ISO 3166-1 alpha-2). Decides currency, number and date format and tax rules. Supported: US, GB, DE, FR, NL, IE, AE, SG, AU, CA, IN, ES, IT, BE, AT, PT, FI, MX, BR. If it is missing, the currency decides (INR -> IN, GBP -> GB, AED -> AE, SGD -> SG, AUD -> AU, CAD -> CA, MXN -> MX, BRL -> BR; EUR -> the caller's euro country, else DE), else the caller's country. Always send it. |
| `currency` | optional | ISO 4217. Defaults to the country's (USD). Supported: USD, EUR, GBP, INR, AED, SGD, AUD, CAD, MXN, BRL. |
| `seller.name` | required | Your business or trading name. |
| `seller.address` | recommended | Postal address; new lines with \n. |
| `seller.email` | optional | Shown on the document. |
| `seller.tax_id` | optional | EIN (e.g. 12-3456789), if your client needs it. |
| `buyer.name` | required | The client or customer. |
| `buyer.address` | recommended | Billing address. |
| `buyer.email` | optional | Used later if the person sends it from LuckPanda. |
| `buyer.tax_id` | optional | Buyer tax ID if they ask for it. |
| `buyer.country_code` | optional | The buyer's country, if different from yours. |
| `issue_date` | optional | YYYY-MM-DD. Defaults to today. |
| `due_date` | optional | YYYY-MM-DD: until when the quote is valid. Default 30 days. |
| `lines` | required | 1 to 100 lines. |
| `lines[].description` | required | What was supplied (at most 500 characters). |
| `lines[].quantity` | required | Decimal as a string, up to 6 decimals ("1", "2.5"). |
| `lines[].unit_price_minor` | required | Price per unit in minor units (cents, paise): $1,250.50 is 125050. Or send lines[].unit_price in major units ("1250.50") instead. |
| `lines[].tax_rate_bp` | optional | Tax rate in basis points (18% = 1800). Or lines[].tax_percent (18). Default 0. |
| `lines[].unit_code` | optional | unit \| hour \| day \| month \| item. Default unit. |
| `lines[].discount_minor` | optional | Discount on the line, minor units (or lines[].discount in major units). |
| `notes` | optional | Shown on the document (at most 2000 characters). |
| `terms` | optional | Validity, delivery and payment terms. |

Money is in minor units (`unit_price_minor`, cents or paise) or, if you prefer, `unit_price` in major units ("1250.50"). Tax is `tax_rate_bp` (18% = 1800) or `tax_percent`. Dates are YYYY-MM-DD. Text is plain text: HTML is shown as typed, never rendered. Logos and document numbers are not accepted from links.

### Country rules

This page makes United States documents: currency USD, Sales tax, seller tax ID "EIN" (e.g. 12-3456789). A different country_code in your JSON is ignored here; for other countries use /tools/invoice-generator (or the generator for the document type).

**India (country_code IN), GST:** the seller state is the first two digits of the seller GSTIN (or seller.state_code). Seller state = place of supply: CGST + SGST, each half the rate. Another state: IGST. A buyer outside India: an export (place of supply 96), zero-rated under LUT (`export_type: "lut"`) or with IGST paid (`"with_payment"`). If the seller state is unknown, GST is shown unsplit until it is given. Add HSN (goods) or SAC (services) codes per line.

**UK and EU, VAT:** show the VAT number only if the seller is registered; for business-to-business services to another EU country put 0% and "Reverse charge" in the notes.

Full rules for any type and country: `GET https://luckpanda.app/api/public/rules?document_type=quote&country=US` or the MCP tool `get_document_rules`.

### Example document (JSON)

```json
{
  "kind": "quote",
  "currency": "USD",
  "country_code": "US",
  "seller": {
    "name": "Summit Peak Roofing",
    "email": "estimates@summitpeak.example",
    "address": "640 Gravel Pit Road\nCharlotte",
    "country_code": "US"
  },
  "buyer": {
    "name": "Gloria and Ben Castillo",
    "email": "accounts@acme.example",
    "address": "301 Juniper Way",
    "country_code": "US"
  },
  "issue_date": "2026-10-09",
  "due_date": "2026-11-08",
  "lines": [
    {
      "description": "Tear-off and disposal, 1 layer, per square (24 measured + 8% waste)",
      "quantity": "26",
      "unit_code": "unit",
      "unit_price_minor": 8500,
      "tax_rate_bp": 0
    },
    {
      "description": "Architectural shingles, installed, per square",
      "quantity": "26",
      "unit_code": "unit",
      "unit_price_minor": 38500,
      "tax_rate_bp": 0
    },
    {
      "description": "Synthetic underlayment with ice and water shield at eaves, per square",
      "quantity": "26",
      "unit_code": "unit",
      "unit_price_minor": 4500,
      "tax_rate_bp": 0
    },
    {
      "description": "Allowance: replace damaged plywood decking, per sheet",
      "quantity": "8",
      "unit_code": "item",
      "unit_price_minor": 9500,
      "tax_rate_bp": 0
    }
  ],
  "terms": "Estimate valid for 30 days. Deposit of 30% on signing to order materials, where state law allows; balance on completion. Decking is replaced at the per-sheet rate shown, and we will show you the damaged boards first."
}
```

### 1. Prefill link (no API call)

Put the JSON in `?doc=`, as base64url (UTF-8) or as URL-encoded raw JSON. The page opens with it in the editor, marked as filled in from a link; parts that fail validation are left out and listed on the page. Example:

https://luckpanda.app/templates/roofing-estimate-template?doc=eyJraW5kIjoicXVvdGUiLCJjdXJyZW5jeSI6IlVTRCIsImNvdW50cnlfY29kZSI6IlVTIiwic2VsbGVyIjp7Im5hbWUiOiJTdW1taXQgUGVhayBSb29maW5nIiwiZW1haWwiOiJlc3RpbWF0ZXNAc3VtbWl0cGVhay5leGFtcGxlIiwiYWRkcmVzcyI6IjY0MCBHcmF2ZWwgUGl0IFJvYWRcbkNoYXJsb3R0ZSIsImNvdW50cnlfY29kZSI6IlVTIn0sImJ1eWVyIjp7Im5hbWUiOiJHbG9yaWEgYW5kIEJlbiBDYXN0aWxsbyIsImVtYWlsIjoiYWNjb3VudHNAYWNtZS5leGFtcGxlIiwiYWRkcmVzcyI6IjMwMSBKdW5pcGVyIFdheSIsImNvdW50cnlfY29kZSI6IlVTIn0sImlzc3VlX2RhdGUiOiIyMDI2LTEwLTA5IiwiZHVlX2RhdGUiOiIyMDI2LTExLTA4IiwibGluZXMiOlt7ImRlc2NyaXB0aW9uIjoiVGVhci1vZmYgYW5kIGRpc3Bvc2FsLCAxIGxheWVyLCBwZXIgc3F1YXJlICgyNCBtZWFzdXJlZCArIDglIHdhc3RlKSIsInF1YW50aXR5IjoiMjYiLCJ1bml0X2NvZGUiOiJ1bml0IiwidW5pdF9wcmljZV9taW5vciI6ODUwMCwidGF4X3JhdGVfYnAiOjB9LHsiZGVzY3JpcHRpb24iOiJBcmNoaXRlY3R1cmFsIHNoaW5nbGVzLCBpbnN0YWxsZWQsIHBlciBzcXVhcmUiLCJxdWFudGl0eSI6IjI2IiwidW5pdF9jb2RlIjoidW5pdCIsInVuaXRfcHJpY2VfbWlub3IiOjM4NTAwLCJ0YXhfcmF0ZV9icCI6MH0seyJkZXNjcmlwdGlvbiI6IlN5bnRoZXRpYyB1bmRlcmxheW1lbnQgd2l0aCBpY2UgYW5kIHdhdGVyIHNoaWVsZCBhdCBlYXZlcywgcGVyIHNxdWFyZSIsInF1YW50aXR5IjoiMjYiLCJ1bml0X2NvZGUiOiJ1bml0IiwidW5pdF9wcmljZV9taW5vciI6NDUwMCwidGF4X3JhdGVfYnAiOjB9LHsiZGVzY3JpcHRpb24iOiJBbGxvd2FuY2U6IHJlcGxhY2UgZGFtYWdlZCBwbHl3b29kIGRlY2tpbmcsIHBlciBzaGVldCIsInF1YW50aXR5IjoiOCIsInVuaXRfY29kZSI6Iml0ZW0iLCJ1bml0X3ByaWNlX21pbm9yIjo5NTAwLCJ0YXhfcmF0ZV9icCI6MH1dLCJ0ZXJtcyI6IkVzdGltYXRlIHZhbGlkIGZvciAzMCBkYXlzLiBEZXBvc2l0IG9mIDMwJSBvbiBzaWduaW5nIHRvIG9yZGVyIG1hdGVyaWFscywgd2hlcmUgc3RhdGUgbGF3IGFsbG93czsgYmFsYW5jZSBvbiBjb21wbGV0aW9uLiBEZWNraW5nIGlzIHJlcGxhY2VkIGF0IHRoZSBwZXItc2hlZXQgcmF0ZSBzaG93biwgYW5kIHdlIHdpbGwgc2hvdyB5b3UgdGhlIGRhbWFnZWQgYm9hcmRzIGZpcnN0LiJ9

Or use simple parameters for the common fields:

| Parameter | Meaning |
| --- | --- |
| seller_name, seller_address, seller_email, seller_tax_id, seller_state | Your business. seller_state: Indian GST state code or name. |
| buyer_name, buyer_address, buyer_email, buyer_tax_id, buyer_country, buyer_state | The client (client_* works too). |
| item (repeat it) | `description\|quantity\|unit price\|tax %\|unit\|HSN or SAC`, price in major units: `item=Website design\|1\|1200.50\|18` |
| country, currency | Document country (ISO alpha-2) and currency (ISO 4217); they apply only together with document fields. |
| kind | invoice, quote, proforma, credit_note or receipt (default: the page's). |
| issue_date, due_date | YYYY-MM-DD. |
| notes, terms | Plain text. |
| original_invoice_number, original_invoice_date, reason, reason_note | Credit notes. |
| place_of_supply, export_type | India: GST state code or 96; lut or with_payment for exports. |

https://luckpanda.app/templates/roofing-estimate-template?seller_name=Summit%20Peak%20Roofing&buyer_name=Gloria%20and%20Ben%20Castillo&item=Tear-off%20and%20disposal%2C%201%20layer%2C%20per%20square%20%2824%20measured%20%2B%208%25%20waste%29%7C26%7C85.00%7C0%7Cunit

**Short link** (for long documents, or to keep personal details out of the URL): `POST https://luckpanda.app/api/public/drafts` with `{"page": "roofing-estimate-template", "doc": {...}}` returns `{"url": "https://luckpanda.app/d/<id>", "totals": {...}, "missing": [...], "ignored": [...]}`. Links open for 7 days; at most 60 per hour per network.

```bash
curl -s -X POST https://luckpanda.app/api/public/drafts -H 'content-type: application/json' \
  -d '{"page":"roofing-estimate-template","doc":{"kind":"quote","currency":"USD","country_code":"US","seller":{"name":"Summit Peak Roofing","email":"estimates@summitpeak.example","address":"640 Gravel Pit Road\nCharlotte","country_code":"US"},"buyer":{"name":"Gloria and Ben Castillo","email":"accounts@acme.example","address":"301 Juniper Way","country_code":"US"},"issue_date":"2026-10-09","due_date":"2026-11-08","lines":[{"description":"Tear-off and disposal, 1 layer, per square (24 measured + 8% waste)","quantity":"26","unit_code":"unit","unit_price_minor":8500,"tax_rate_bp":0},{"description":"Architectural shingles, installed, per square","quantity":"26","unit_code":"unit","unit_price_minor":38500,"tax_rate_bp":0},{"description":"Synthetic underlayment with ice and water shield at eaves, per square","quantity":"26","unit_code":"unit","unit_price_minor":4500,"tax_rate_bp":0},{"description":"Allowance: replace damaged plywood decking, per sheet","quantity":"8","unit_code":"item","unit_price_minor":9500,"tax_rate_bp":0}],"terms":"Estimate valid for 30 days. Deposit of 30% on signing to order materials, where state law allows; balance on completion. Decking is replaced at the per-sheet rate shown, and we will show you the damaged boards first."}}'
```

### 2. Branded PDF (no sign-in)

`POST https://luckpanda.app/api/public/pdf` with `{"doc": {...}}` (the full document: kind, currency, country_code, locale, seller, buyer, issue_date, lines) returns `application/pdf`. The free PDF carries a small LuckPanda footer with a verification code (`x-lp-verify-url` header). Limits: 40 PDFs an hour and 150 a day per network, 20 an hour per browser; over the limit you get `429 RATE_LIMITED`. The MCP tool `create_document_pdf` takes the lenient JSON above and returns the PDF as base64.

```bash
curl -s -X POST https://luckpanda.app/api/public/pdf -H 'content-type: application/json' \
  -d '{"doc":{"kind":"quote","currency":"USD","country_code":"US","locale":"en-US","seller":{"name":"Summit Peak Roofing","email":"estimates@summitpeak.example","address":"640 Gravel Pit Road\nCharlotte","country_code":"US"},"buyer":{"name":"Gloria and Ben Castillo","email":"accounts@acme.example","address":"301 Juniper Way","country_code":"US"},"number":null,"issue_date":"2026-10-09","due_date":"2026-11-08","lines":[{"description":"Tear-off and disposal, 1 layer, per square (24 measured + 8% waste)","quantity":"26","unit_code":"unit","unit_price_minor":8500,"tax_rate_bp":0},{"description":"Architectural shingles, installed, per square","quantity":"26","unit_code":"unit","unit_price_minor":38500,"tax_rate_bp":0},{"description":"Synthetic underlayment with ice and water shield at eaves, per square","quantity":"26","unit_code":"unit","unit_price_minor":4500,"tax_rate_bp":0},{"description":"Allowance: replace damaged plywood decking, per sheet","quantity":"8","unit_code":"item","unit_price_minor":9500,"tax_rate_bp":0}],"notes":"","terms":"Estimate valid for 30 days. Deposit of 30% on signing to order materials, where state law allows; balance on completion. Decking is replaced at the per-sheet rate shown, and we will show you the damaged boards first."}}' -o roofing-estimate-template.pdf
```

### 3. MCP server (no auth)

Streamable HTTP at `https://luckpanda.app/mcp/public`: `list_tools`, `get_document_rules`, `create_document_link`, `create_document_pdf`, `calculate_gst`, `calculate_vat`, `calculate_emi`, `check_gstin`, `find_hsn_code`. Install: https://luckpanda.app/agents.

### What needs a LuckPanda account

Agents propose; people decide. Nothing made here is issued, sent or paid by an agent. The person signs in free to keep going:

- **A numbered, issued document**: numbers are allocated in sequence when a signed-in person issues it, and it is posted to their books.
- **Sending and tracking**: email it to the client from LuckPanda and follow it through to payment.
- **Payment links** and automatic reminders.
- **Verifications** (GSTIN and other registry checks) and e-invoicing.
- **The clean PDF** without LuckPanda branding (the Sales module).
- **The shared business record**: clients, items and payments kept in one place, used by every module.

Sign in: https://luckpanda.app/signin. Pricing: https://luckpanda.app/pricing.md. All agent options: https://luckpanda.app/agents.md.
