Help Center

Get up & running

Everything you need to set your pricing, put the estimator on your website, work every job, and connect your tools.

Start here

Quick start

Two steps, about three minutes

Sign up at betterroofing.co/signup with email or Google. No credit card, and your 14-day free trial starts immediately. A short setup wizard opens the first time you reach the dashboard.

01

Pricing

Turn on the roof types you install and set your price per square (100 sq ft) for each. A live preview shows what a homeowner with a typical 2,000 sq ft roof would be quoted as you type. Then tell us where to email your leads.
02

Business info

Find your business on Google, or type your shop address, and we fill in your company name. Pick how far you travel, say whether you have a website, and add your logo if you have one to hand.

That's the wizard. Everything in it can be changed later, and the rest of your setup — waste factor, tear-off, pitch, booking, notifications — has sensible defaults until you get to it.

Going live

01

Put the estimator on your website

Dashboard → Install widget. Pick a style, copy your snippet, and paste it into your site. See Install widget. No website? Use the direct link instead — it needs no install at all.
02

Check the rest of your pricing

Dashboard → Pricing holds your waste factor, tear-off cost and pitch multipliers, plus the optional extras: Good/Better/Best tiers, savings and a monthly payment line.
03

Decide what happens at the end of an estimate

Account menu → Settings → Inspection booking. Let homeowners book a time on your calendar themselves, send them to your own scheduling link, or leave it off. See Inspection booking.
04

Work the leads

Every lead lands in your dashboard with its roof details, address and where it came from. From there it's notes, tasks, quotes and appointments — see Lead pipeline.

The Getting started checklist

Until your first lead arrives, your Overview leads with a five-item checklist instead of a page of zeros: set your pricing, add your business info, install your widget, show Good/Better/Best pricing, and get your first lead. Pricing and business info are already ticked — the setup wizard is how you got here.

Each unfinished item links straight to the page that finishes it. Hide the checklist with the ✕ in its corner; that choice is remembered in that browser. Once your first lead lands, the checklist gives way to your actual work and doesn't come back.

Finding your way around

The sidebar holds your everyday pages at the top — Overview, Jobs, Calendar and Analytics — and an Instant estimates group below it with Pricing, Locations and Install widget.

Settings, Team, Billing and Sign out live in the account menu: click your company name at the top of the sidebar.

On a computer, Collapse at the bottom of the sidebar shrinks it to icons and gives the jobs board more room. Click it again to expand. The choice is remembered in that browser. On a phone the sidebar is a drawer behind the menu button and always opens at full width.

Team members don't see Pricing, Locations, Install widget, Settings or Billing — see Team access.

Setup

Install widget

Three styles, same leads

Dashboard → Install widget is one page: pick a style, see it running in a live preview beside your own settings and pricing, then choose how the code gets onto your site.

AI chat bot
A round chat bubble in the bottom-right corner of every page. Homeowners chat their way to an estimate. The recommended default.
Floating tab
An orange “Get Instant Estimate” button pinned to the edge of every page. Clicking it slides the estimator in over your page.
Embed on page
The estimator sits inside one specific page — your homepage, or a “Get a quote” page.

All three capture exactly the same thing: name, email, phone, property address, roof measurements, material preference, insurance situation and the estimate they were shown. You can run more than one at a time; they don't conflict.

Three ways to get it live

I'll paste the code myself

Copy your snippet and paste it into your site. The platform guides below cover WordPress, Squarespace, Wix and hand-written HTML.

Email it to my web person

Copies a ready-written email — what you're asking for, your snippet, and where it goes — to paste into Gmail, Outlook or anything else.

Just give me a link to share

Your permanent direct link. No code, no website needed. See the direct link.

Is it actually live?

The install page shows the widget's real state, and so does your Overview. It's based on the widget itself checking in from your site, not on guesswork:

Widget active
It checked in from your site recently, and the page names the domain it was seen on. This is the only state that confirms it is live.
Widget went quiet
It used to check in and hasn’t for 14 days. Usually a theme update or a site rebuild dropped the snippet. This one is worth acting on: it means leads have stopped.
Install not verified yet
You have leads, but nothing has checked in from your site. Leads from the preview or the direct link land the same way, so this is what you see if the snippet never went up.
Widget not detected yet
Nothing has checked in and there are no leads yet.

The preview on the install page and the /embed link never count as a check-in — they run on our domain, not yours.

The embed snippet

Go to Dashboard → Install widget to copy your personal snippet. It looks like this:

<!-- BetterRoofing Widget -->
<div id="roof-estimator"></div>
<script
  src="https://app.betterroofing.co/widget.js"
  data-contractor-id="YOUR_ID"
  async
></script>

Paste it before the closing </body> tag on any page you want the estimator to appear on.

Platform guides

WordPress

  1. 1.Install the "Insert Headers and Footers" plugin (free)
  2. 2.Go to Settings → Insert Headers and Footers → Scripts in Footer
  3. 3.Paste your snippet and save
  4. 4.Or add a Custom HTML block anywhere on a page

Squarespace

  1. 1.Go to Settings → Advanced → Code Injection
  2. 2.Paste your snippet in the Footer section
  3. 3.Or add a Code Block to any specific page

Wix

  1. 1.Go to Settings → Custom Code
  2. 2.Click Add Custom Code
  3. 3.Paste your snippet, set location to "Body - end", apply to the pages you want

Custom HTML

  1. 1.Place <div id="roof-estimator"></div> where you want the widget
  2. 2.Paste the full snippet before </body>
  3. 3.The widget renders in a self-sizing iframe, so it cannot clash with your CSS

What the homeowner goes through

One question at a time, not a multi-step form. Each screen asks a single question with large, tap-friendly cards, and most answers advance on their own. A homeowner sees four steps:

Address
They type their property address and pick it from the list. We measure the roof from there.
Insurance
Whether this is an insurance claim, out of pocket, or they’re not sure.
Material
Which of your roof types they want. Only the ones you’ve turned on appear.
Contact
Name, email and phone. This is the gate: the estimate comes after it, and the lead lands in your dashboard.

Between material and contact there's a roof size and slope step, which fills itself in and skips past when the satellite measurement is good enough — see how the estimate is worked out.

Setup · Recommended

AI chat bot

What it does

A round chat bubble pinned to the bottom-right corner of every page on your site. Instead of filling out a form, homeowners chat their way to an instant estimate — the most familiar, lowest-friction way to turn a visitor into a lead. This is the default choice in Dashboard → Install widget.

It captures the same lead data as the other two styles — name, contact details, address, material, insurance situation and the estimate — just through a conversation instead of tap-through cards. Chat leads show as Website chat in your dashboard so you can tell them apart.

The snippet

Go to Dashboard → Install widget, select AI chat bot, and copy your personal snippet. It's a single line:

<script
  src="https://app.betterroofing.co/chat-widget.js"
  data-contractor-id="YOUR_ID"
  async
></script>

Paste it in your site-wide footer, just before the closing </body> tag, so the bubble appears on every page rather than one.

WordPress: "Insert Headers and Footers" plugin → Scripts in Footer.

Squarespace: Settings → Advanced → Code Injection → Footer.

Wix: Settings → Custom Code → Body end → All Pages.

Custom HTML: before </body> in your global layout, so it loads everywhere.

No website? The direct link opens straight into the same chat and needs no install.

Setup

Floating tab widget

What it does

An orange "Get Instant Estimate" button pinned to the edge of every page on your website. Homeowners see it wherever they are on your site, and clicking it slides the estimator in without taking them off the page they were reading.

Embed widget
Sits inside one specific page — your homepage, or a “Get a quote” page.
Floating tab
Appears on every page automatically, so an estimate is one click away from anywhere.

You can run both at once. They don't conflict.

The snippet

Go to Dashboard → Install widgetto copy your personal tab snippet. It's a single line:

<script
  src="https://app.betterroofing.co/tab-widget.js"
  data-contractor-id="YOUR_ID"
  async
></script>

The key difference from the embed widget: paste this in your site-wide footer, not one page, so the tab loads everywhere.

WordPress

  1. 1.Install the "Insert Headers and Footers" plugin (free) if you haven't already
  2. 2.Go to Settings → Insert Headers and Footers → Scripts in Footer
  3. 3.Paste your snippet and save. It appears on every page automatically

Squarespace

  1. 1.Go to Settings → Advanced → Code Injection
  2. 2.Paste your snippet in the Footer section
  3. 3.It appears on every page of your site automatically

Wix

  1. 1.Go to Settings → Custom Code
  2. 2.Click Add Custom Code and paste your snippet
  3. 3.Set location to "Body - end" and apply to "All Pages"

Custom HTML

  1. 1.Paste your snippet before the closing </body> tag in your global layout or template file
  2. 2.Because it is in the layout, it loads on every page automatically

Optional customisations

Two optional settings you can add to the snippet.

Change the tab label

By default the tab says "Get Instant Estimate". Add data-tab-text to change it.

<script
  src="https://app.betterroofing.co/tab-widget.js"
  data-contractor-id="YOUR_ID"
  data-tab-text="Free Estimate"
  async
></script>

Move the tab to the left side

The tab sits on the right edge by default. Add data-position="left" to move it.

<script
  src="https://app.betterroofing.co/tab-widget.js"
  data-contractor-id="YOUR_ID"
  data-position="left"
  async
></script>
Share anywhere

Direct estimate link

Where to put it

Email signature

Hyperlink it on text like "Get a free instant estimate". Every prospect you email can price their roof without a phone call.

Text message

Paste it in a text to a homeowner you're already talking to. They click, get an estimate, and the lead lands in your dashboard instantly.

Social and Google Business

Your Instagram bio, Facebook page, or Google Business profile. It works anywhere a URL can go.

QR code

Paste the link into any free QR code generator and print it on door hangers, yard signs or truck magnets, so homeowners can scan and get an estimate on the spot.

Configuration

Pricing & the estimate

How the estimate is worked out

When a homeowner picks their address, we measure the roof from satellite data. Where the measurement covers the actual roof surface, that figure is used as-is. Where it only gives the building's footprint, the footprint is multiplied by the pitch multiplier for that roof's steepness. If neither is available, the homeowner is asked for their home's square footage and roof slope, which is the step you'll see skip past on most addresses.

From there the arithmetic is yours, and it's deliberately simple enough to check by hand:

squares × your price per square × your waste factor, plus your tear-off cost, then shown as a range from 10% under to 10% over, rounded to the nearest $100.

A square is 100 sq ft. Nothing else is added, no fee is taken out of it, and the number the homeowner sees is recalculated on our side before it's stored on the lead — so what's in your dashboard is always what your own settings produce.

Roof types and price per square

Dashboard → Pricing. Turn on only the roof types you install — the ones you turn off never appear for homeowners to choose. Each enabled type carries its own price per square (your labour and material rate per 100 sq ft).

Asphalt shingles
Most common residential. On by default.
Metal roofing
Standing seam, corrugated. On by default.
Tile roofing
Clay, concrete, slate. On by default.
Flat / TPO
EPDM, TPO, modified bitumen. Off by default.

Waste factor and tear-off

Waste factor

A multiplier covering cuts, overlaps and leftover material. Typical values run 1.10–1.20 (10–20% waste). It applies to the material and labour, before tear-off.

Tear-off cost

A flat fee added to every estimate to cover removing the existing roof. Set it to $0 if your price per square already includes tear-off, or you'll charge for it twice.

Roof pitch multipliers

A steeper roof has more surface than the footprint underneath it. These four multipliers turn a measured footprint into roof area, and they only come into play when the satellite data gave a footprint rather than the roof surface itself. The defaults are the industry-standard figures:

Flat (0–2/12)
1.00 — the roof is effectively the footprint.
Low (3–5/12)
1.10
Medium (6–8/12)
1.20 — the most common residential pitch.
Steep (9/12+)
1.35

Change them if your market runs differently, or leave them alone — most contractors never touch these.

Good / Better / Best pricing tiers

Instead of one price per roof type, show the real products you actually sell — your own product names at your own prices — so a homeowner picks a tier rather than staring at a single number.

Turning it on

Dashboard → Pricing, toggle Show Good/Better/Best pricing tiers. For each roof type you offer, add up to 3 product options (for example "GAF Timberline HDZ" at $425/sq), each with its own price per square.

Minimum to activate

A roof type needs at least 2 product options before tiers show for it. With fewer than 2 it keeps showing a single price, exactly as before, so turning the toggle on can never blank out a roof type.

Which one is highlighted

With three options, the middle one is badged Most popular and selected by default. With two, the first is. The homeowner can switch between them and the estimate updates as they do; whichever they had selected when they submitted is recorded on the lead.

Use your real product names, not generic labels. The point is that homeowners see exactly what you'd quote them in person.

Savings vs. the typical price

An optional toggle on Dashboard → Pricing. When it's on, the result screen can show a crossed-out typical market quote and a savings badge next to your estimate.

It only appears when the saving is real. The comparison is built from typical market rates per square, never as a markup on your own number, and the line is suppressed entirely when your price doesn't genuinely beat the market rate or when the difference is small enough to read as rounding. With tiers on, it's checked against whichever tier the homeowner has selected, so switching to your top product doesn't carry a savings claim that stopped being true.

The monthly payment line

Another optional toggle on Dashboard → Pricing: an illustrative "as low as $X/mo" line under the price range, which is often the difference between a homeowner calling and a homeowner closing the tab.

APR

The annual rate to base the payment on. Default 9.99%.

Term (months)

How long the illustrative loan runs. Default 60 months.

Markup (%)

Optional. Added to the financed amount only, for dealer fees. It never changes the cash price the homeowner is shown.

This is an illustration, not a financing offer, and BetterRoofing doesn't lend or arrange credit. The payment is a standard amortised calculation off the low end of the range.

Inspection booking

Under Account menu → Settings → Inspection booking, choose what a homeowner sees at the end of their estimate. New accounts start with this off.

Book here
They pick a day and a morning or afternoon window, and it becomes an appointment on your calendar straight away. You set which days you take inspections, the hours each window covers, how much notice you need, how far ahead they can book, and the most you’ll take in a day — your own appointments count toward that daily limit.
My own scheduling link
A “Book a Free Inspection” button that opens your Calendly, Acuity, Cal.com, HouseCall Pro, ServiceTitan or any other booking page. Those bookings stay in that tool.
Off
The result screen shows what happens next instead, and your phone number if you’ve set one.

A homeowner who books here gets the same confirmation email and day-before reminder as an appointment you book yourself, and you get an email the moment it lands. The job moves to Inspection, and the calendar marks it Booked online.

A window is a window, not an exact hour — you confirm the time when you call. Self-bookings also show as their own step in your funnel.

Configuration

Service locations

What service locations do

Service locations define exactly where you work. When a homeowner enters their address, we measure the distance to your nearest location. If they're outside your radius, you control what happens next.

With no locations configured, every lead is accepted wherever the homeowner is. Add at least one location to turn filtering on.

Dashboard → Locationsmanages them. Add as many as you run; there's no cap and no extra cost per location.

Adding a location

Location name

A label for your own reference — "Austin HQ", "Dallas office". Never shown to homeowners.

Address

Your office or shop. Type it and pick from the autocomplete, which pins the exact coordinates used for distance.

Service radius (miles)

How far out you'll travel from that address. The default is 50 miles.

Leads are checked against your nearest location, so overlapping radii are fine if you run more than one office.

Out-of-area behaviour

Choose what happens when a homeowner falls outside all of your radii:

Hard gate
The widget shows a “we don’t service your area” screen and the homeowner can’t submit. Keeps your pipeline clean. Best if you have a firm boundary.
Soft flag
The lead goes through but is marked out-of-area so you can filter it out. Useful for tracking demand outside your patch, or for the occasional job you’d travel for.

A flagged out-of-area lead is silent.No contractor email, no webhook, and no Autopilot sequence — the homeowner is never contacted automatically for a job you may not take. It's stored in your dashboard for you to review, and it's left out of the Needs follow-up cards.

You can switch between the two at any time, and the change takes effect immediately.

Dashboard

Lead pipeline

The pipeline, in the order a job is worked

Every job sits in one column, and the drawer's Pipeline row is where you move it. The first four are the sale; the last four are the job you sold. Click a column to move the job into it — status and production stage are one row, not two separate controls.

New

Just came in, not contacted yet.

Contacted

You’ve reached out by email, text or phone.

Inspection

The roof inspection is booked or done.

Quoted

You’ve sent or presented a formal quote.

Sold

Signed and won, not scheduled yet.

Scheduled

On the books with an install date.

Installed

The work is done and you’re waiting to be paid.

Paid

Money in. The job is finished.

Moving a job into Sold (or straight into Scheduled) asks for the contract value. Once a job is won, its contract value sits in the Pipeline row where you can edit it without moving the job.

Lost is separate: Mark as lost sits under the columns rather than in them, so losing a job is a deliberate act and not a mis-drag. A lost job leaves the board entirely; pick any column in its drawer to reopen it.

Every move is saved instantly and lands on the job's timeline with your name on it.

Board view and how cards age

Switch the Jobs page from List to Board to see every open job as a card in its column. On a computer, drag a card to another column. On a phone, tap the job and move it from its drawer. Lost jobs stay off the board; find them under Lost in the list.

Each card shows how long the job has sat in its column, with a dot that's green while it's fresh, amber when it's getting old and red when it's overdue for a nudge. The limits are fixed rather than a setting:

New
Amber after 1 day, red after 3.
Contacted
Amber after 3 days, red after 7.
Inspection
Amber after 3 days, red after 7.
Quoted
Amber after 5 days, red after 10.
Sold
Amber after 7 days, red after 14.
Scheduled
Doesn’t age — waiting for an install date is normal.
Installed
Amber after 7 days, red after 14. An installed job that isn’t paid is a collections problem.
Paid
Doesn’t age. The job is done.

Any move restarts the clock, including the ones that happen without you: sending a quote moves the job to Quoted, and the homeowner signing it moves the job to Sold. Each column's header adds up its cards — contract values once a job is won, estimate ranges before that.

A job whose last move happened before BetterRoofing started recording moves shows no clock until it moves again.

Adding a job by hand

Not every job comes through your website. Add job on the Jobs page covers the ones that came from a phone call, a referral, a door knock or a repeat customer. All it needs is a name, a phone number or email, and the property address — and you can record which of those it was, so your reporting knows the difference between a website lead and a referral.

Jobs added by hand don't trigger new-lead emails, webhooks or AI Autopilot, and they have no instant estimate, since nothing measured the roof. Price them with Build & send quote, where you enter the roof size yourself. Fix a name, phone number or email any time with Editin the drawer's Contact section.

Needs follow-up

Your Overview shows four cards for who to call next. Click one to open the Jobs page filtered to exactly those jobs; click the Showing chip there to clear it.

New, not contacted

Jobs still in New, with what their estimates add up to and how many have waited 3 days or more.

Quote not opened

Quotes you've sent that the homeowner hasn't opened since, with their total and the oldest send.

Opened, not signed

Quotes they've looked at but not signed, with their total and the latest open. Highlighted whenever there are any: these are the calls to make first.

Going stale

Jobs whose board card has gone red, past their column's limit, and which columns they're in.

Out-of-area jobs are left out. A quote sent before BetterRoofing started tracking opens never counts as not opened.

Revenue and close rate

Marking a job won asks for the actual contract value, pre-filled with the midpoint of its estimate so it's one keystroke when the estimate was right. Enter the signed amount to track real revenue rather than estimates. It's optional — Skip marks the job won without a figure.

Revenue won
Total contract value of jobs won this month, on your Overview.
Close rate
Share of decided jobs you won, against those you lost. Appears once you have at least 3 decided jobs.

Both update the moment you move a job, and a signed quote fills in the contract value for you.

Exporting to CSV

Export CSV above your jobs table downloads every job with full detail: name, address, estimate range, material, insurance status, source, status and timestamp. It exports everything, not just the rows on the current page — useful for importing into another system, building a mailing list, or keeping your own records.

Dashboard

Working a job

The job drawer

Click any job — in the list, on the board, or in Recent jobs — to open its drawer: a full-height side panel holding everything about that job, in the order you work it.

  • Contact — email, phone and one-tap Call, Email and Text buttons. Edit fixes a name or number.
  • Drafts — the AI email and text, loaded into those buttons. See Drafts.
  • Pipeline — where the job is and where to move it.
  • Quote — build, send or view the quote, with the instant estimate underneath it.
  • Insurance — carrier, claim and adjuster details.
  • Tasks, Appointments, Photos & documents.
  • Notes & activity — the timeline, last because it only grows.

Notes & activity

Type a note — what you talked about, the next step, the gate code — and it's saved with your name and the time, visible to everyone on your team. Cmd/Ctrl+Enter saves it.

The timeline also fills itself in: when the lead came in or who added it, every move along the pipeline and who made it, quotes sent, opened and signed, tasks added and completed, appointments booked, moved and cancelled, files added and deleted, insurance details changed and which fields changed, and every Autopilot email that went out.

Tasks and the Today list

Every job has a Taskssection for the next thing to do: call back Tuesday, order shingles, send the contract. Give each one a due date, and a time if it matters. Check it off when it's done, tap its date to reschedule, or delete it.

Your Overview opens with Today: every open task due today or overdue, across every job, each linking straight to its job. Due dates follow your time zone, which is set from your browser automatically and can be changed under Settings.

Insurance claim details

Every job's drawer has an Insurancesection. Set the job to Out of pocket, Insurance claim or Unsure — a website lead starts with whatever the homeowner picked. For a claim, record the carrier, claim number, the adjuster's name, phone, email and meeting time, plus the deductible, RCV, depreciation and ACV from the carrier's paperwork.

Every field is optional, and BetterRoofing never calculates any of them: the carrier's paperwork is the source of truth and we won't quietly disagree with it. Each save goes on the timeline naming which fields changed and who changed them, and the adjuster meeting shows on your Calendar.

Calendar & appointments

Book inspections, install days and anything else with a time from the Appointmentssection of a job's drawer. Give it a date, a start and end time (or leave the start blank for an all-day booking) and any notes. Each appointment has a Google Calendar link and an .ics download for Apple Calendar or Outlook, so it lands in the calendar you already use.

The Calendar page shows your week at a glance: every appointment, plus adjuster meetings from your insurance claims, each linking to its job.

The homeowner is kept in the loop automatically — a confirmation when you book, a note if the time moves or you call it off, and a reminder the day before. It goes out under your company name, replies come back to you, and a calendar file is attached so they can add it to their own phone. Jobs with no email address are skipped. Untick Email the homeowner when booking to keep one visit quiet, or switch it off for the whole account under Settings.

Photos & documents

Keep everything about a job on the job: roof photos from the site, the signed contract, the insurance paperwork. Open the drawer and use + Photos — on a phone it offers the camera too — or + Document for PDF, Word, Excel, CSV and text files up to 25 MB. On a computer you can drag files onto the section.

Photos are resized on your device before they upload, so a batch from the roof goes up quickly even on a weak signal, and the location data your phone writes into each photo is stripped out before it leaves. Tap a photo to see it full size and swipe through the rest.

Files are private to your team: never public, and every link to one expires after an hour. Each account has 10 GB, roughly 20,000 photos, and the drawer shows how much you've used. Adding and deleting files go on the timeline, and a deleted file is gone for good.

Documents

The instant estimate

Branded estimate PDF

Estimate PDFin the job drawer generates a branded PDF in one click: property address, satellite image, the estimate range, a what's-included checklist, and a booking call-to-action if you take bookings. It carries your company name only, with no BetterRoofing watermark. Jobs you added by hand have no instant estimate, so they have no estimate PDF either — quote those instead.

Documents

Build & send a quote

Building a quote

01

Open Build & send quote

From any job, click Build & send quote. It opens pre-filled with the customer's name, address, material and price per square from the estimate. You're editing, not starting from scratch. On a job added by hand there's no estimate, so you enter the roof size yourself.
02

Add line items

As many as the job needs, each with its own description, quantity, unit (square, linear foot, hour, day or each) and price.
03

Set discount, tax and deposit

A discount as a flat amount or a percentage, a tax rate, and a deposit (flat or percentage) due to schedule the job.
04

Add your terms

Your own notes, exclusions and warranty language, and a date the pricing is valid until.

Sending and sharing

Changes save as you type. When you're ready, click Send quote and we email the homeowner the full quote plus a link to their own quote page. Copy link shares it another way instead. Sending moves the job to Quoted, unless it's already further along or closed.

You can keep editing and resend as many times as you need, right up until the homeowner signs.

Seeing when a quote is opened

Once the homeowner opens their quote page, the job shows Quote openedon the board and in the list, and the drawer says how many times they've opened it and when they last did. That's your cue for a follow-up call. The first open after each send also goes on the timeline.

Quote draft
Started, not sent.
Quote sent
Sent, not opened yet — or sent before open tracking existed.
Quote opened
The homeowner has looked at it.
Quote signed
Signed and accepted.

Opens by you or your team don't count, and a quote you resend shows Quote sentagain until they open the new version. There's no email alert for an open — check the board, the list or the drawer.

Some email security scanners open links automatically. Most are filtered out, but an open within seconds of sending may be one.

Signature & acceptance

On their quote page, the homeowner reviews everything, types their full name, draws a signature and clicks Sign & accept.

You're told immediately

An email with their name and the total the moment they sign, so you're not refreshing the dashboard.

The quote locks

Pricing, line items and terms can't be edited once signed, so the record always matches exactly what was agreed.

The job moves to Sold

Signing marks the job won with the signed total as its contract value. If you'd already marked it won, your status and contract value stay as they are.

View the signed copy

Who signed and when shows in the drawer. View signed quote there, or the button in your email, opens the full quote with the signature. Download PDF saves a copy for your records, with the signature and when and from what IP address it was signed.

If you set a deposit, the homeowner sees a note about it after signing — BetterRoofing doesn't collect payment, you follow up directly. If the valid-until date has passed, they see an expired notice instead of the signing form.

AI

AI drafts & reports

Email & text drafts

In a job's drawer, Write email & text draftswrites both at once from that job's own details — name, address, estimate range, material and insurance situation — and loads them into the Email and Text buttons above it. Click either one and your mail or messaging app opens with the draft already in it.

Email draft
A subject line and three or four short paragraphs: acknowledges their situation, treats the estimate range as a starting point, and ends with a clear ask to schedule a free inspection. Straight-talking local contractor, not salesy.
Text draft
A short message for the Text button, written to be read on a phone. Only when the job has a phone number.

Drafts are generated on demand and then cached, so clicking a second time returns the saved copy instantly with no wait. Read them, change anything you want, and send. They're drafts — nothing is sent for you.

These are copy for you to send, not analysis of the lead. Everything they know is already on the screen in front of you.

Weekly intelligence report

Every Monday morning we write a plain-English summary of last week's pipeline. It lands in your inbox and sits on your Overview, and it covers:

  • Leads received and average estimate value for the week
  • Which lead types dominated — insurance claims trending up, metal roofing interest, and so on
  • Specific jobs that haven’t been contacted and may need a nudge
  • What your service area looked like, including out-of-area patterns
  • One prioritised recommendation for the week ahead

The card is collapsible — click the header to expand it — and past reports stay in your dashboard. Your first one arrives the Monday after your first lead.

AI

AI Autopilot

What AI Autopilot does

Autopilot follows up for you. When a homeowner submits an estimate request on your website, it sends them a short sequence of emails if they don't respond — each one written from that lead's own details, not a template with their name pasted in.

Your Overview header always says whether it's on or off, so it never runs without you knowing.

The sequence

Day 1
A warm follow-up referencing their specific estimate. Insurance leads get language about getting the adjuster process started quickly.
Day 3
A gentle check-in — “still here, the estimate still stands”. Insurance leads get a note about claim windows; out-of-pocket leads get a soft scheduling nudge.
Day 7
The last message. Low-pressure, keeps the door open. After this the sequence is complete either way.

Every message gives them somewhere to go.Each one carries a link to the homeowner's own estimate page, and asks for whatever that page can actually do: a booked arrival window if you take bookings here, your scheduling link if you use your own, or a call to your number if you've set one.

It won't invent a reason to hurry.BetterRoofing doesn't know your schedule, your crew or your lead times, so no message claims your calendar is filling up or that prices are about to rise. The only deadlines it may mention are the 30 days your estimate is valid for, and the claim window the carrier sets on an insurance job.

Quote-aware. If you send an itemised quote before a step goes out, that step and every one after it stops repeating the ballpark range and points the homeowner at reviewing and signing the quote you sent.

It stops itself.The moment you mark a job won or lost, or the homeowner signs a quote, the remaining steps are cancelled. You will not follow up with someone you've already closed.

Emails go only to website leads, never to jobs you added by hand, and never to a lead flagged out-of-area.

Turning it on

01

Open your settings

Account menu → Settings, then the Notifications & integrations panel.
02

Toggle AI Autopilot on

The panel turns orange and shows an Activebadge. The toggle saves on its own — you don't need to save the form for it.
03

That's it

Every new lead from that point gets the sequence. Leads already in your pipeline are untouched, so switching it on never emails someone you spoke to last month.

Compliance & opt-out

Follow-up emails carry an unsubscribe note in the footer. If a homeowner asks you to stop, mark the job Lost in your dashboard — that stops the sequence immediately.

Alerts

Notifications

New lead emails

Set a notification email under Account menu → Settings → Lead notification email. You get an email the moment a lead submits, with everything you need to decide who to call first.

Subject: New lead: Sarah M. · $10,200 – $12,400 · Insurance claim

Body: the full profile — address, estimate range, material, roof size, insurance status — and a link into your dashboard.

Leave the field blank to turn these off. Out-of-area flagged leads never send one.

The other emails we send

Everything else that leaves BetterRoofing on your behalf, so there are no surprises:

To you
A new lead, a homeowner booking themselves in, a quote being signed, your Monday report, and trial reminders as your trial runs down.
To the homeowner
Their quote when you send it, appointment confirmations, changes and cancellations, a reminder the day before a visit, and Autopilot follow-ups if you have it on.

Everything sent to a homeowner goes out under your company name with replies coming back to you. Appointment emails can be switched off per booking, or for the whole account, under Settings.

Integrations

Webhook & Zapier

The webhook payload

We send a POST to your webhook URL every time a new lead is created. Set it under Account menu → Settings → Webhook URL. The body is JSON:

{
  "id":              "clx8abc123",
  "name":            "Sarah Mitchell",
  "email":           "[email protected]",
  "phone":           "512-555-0199",
  "address":         "123 Main St, Austin, TX 78701",
  "lat":             30.2672,
  "lng":             -97.7431,
  "insuranceClaim":  "yes",
  "materialType":    "asphalt",
  "roofSlope":       "medium",
  "homeSqft":        2000,
  "roofSquares":     24.0,
  "estimateLow":     11200,
  "estimateHigh":    13600,
  "status":          "new",
  "outOfArea":       false,
  "createdAt":       "2026-09-16T14:22:00.000Z"
}

insuranceClaim

One of "yes", "no" or "unsure". Use it to route claim jobs into a different workflow.

homeSqft

The interior square footage, where the homeowner was asked for it.

AI drafts

aiEmailDraft and aiSmsDraft are written on demand, so they are null at webhook time. Read them from the job drawer instead.

Jobs you add by hand don't fire the webhook, and neither do leads flagged out-of-area.

Connecting Zapier

01

Create a new Zap

In Zapier, click Create Zap and search for Webhooks by Zapier as the trigger app.
02

Select "Catch Hook"

Choose Catch Hook as the trigger event, then Continue.
03

Copy your webhook URL

Zapier gives you a unique URL like https://hooks.zapier.com/hooks/catch/.... Copy it.
04

Paste it into BetterRoofing

Account menu → Settings → Webhook URL. Paste and save.
05

Send a test lead

Submit a test estimate on your own widget, then click Test Trigger in Zapier to confirm the data arrived.
06

Add your action

Send the lead anywhere Zapier reaches — Google Sheets, HubSpot, JobNimbus, AccuLynx, Slack, SMS — mapping fields like name, insuranceClaim, estimateLow and status to your destination.

Make, n8n or your own server

Any endpoint that accepts a POST with a JSON body works, including Make (formerly Integromat) and n8n. Use their Custom webhook module as the trigger, paste the URL into Account menu → Settings → Webhook URL, and submit a test lead to confirm the connection.

Analytics

Widget analytics

The headline numbers

Dashboard → Analytics covers the last 30 days and opens with four figures:

Widget starts
How many homeowners opened your estimator.
Leads generated
How many finished and submitted their contact details.
Conversion rate
Starts through to leads, as a percentage.
Out of area
How many were blocked or flagged for falling outside your service radius.

Events are recorded automatically on our side, attributed to your account. There's nothing to install and no tag to add.

The funnel

Underneath, every step of the journey with its count and its share of total starts, so you can see exactly where homeowners give up:

Started widget
They opened the estimator.
Completed address
They entered their address and their roof was found.
Selected material
They chose a roof type and saw their estimate.
Submitted lead
They filled in their contact details. This is where a lead is created.
Booked an inspection
They picked a time on your calendar. Only shown when you take bookings here, and read as a share of leads rather than of starts.

Below the funnel, a daily bar chart of lead submissions across the same 30 days shows whether last week was normal.

A high out-of-area count usually means either your radius is too tight or your widget is being seen in markets you don't serve.

Analytics

Win-rate intelligence

What it is

Win-rate intelligence reads the jobs you've decided — won and lost — and works out which kinds you actually close, broken down by material type and insurance status. It tells you where your highest close rate is, so your follow-up time goes where it pays.

It sits on the Analytics page below the funnel and updates itself as you close more jobs. There's nothing to set up — it reads the pipeline you're already keeping.

How to read it

Segments

Every decided job falls into one — Asphalt + insurance claim, Metal + no claim, and so on — each with its own close rate and average estimate.

Top segment

The one with the highest close rate is called out at the top: your single best lead type, from your own results rather than an industry average.

The table

Below it, every segment with at least 3 decided jobs, ranked, with its close rate, average estimate and how many jobs are behind that number.

The card needs 10 decided jobsbefore it activates, and shows a progress bar until then. A close rate off three jobs isn't a close rate, and we'd rather say nothing than point you at a pattern that isn't there.

Your account

Team access

Owner and team member

Bring your whole crew: every member gets their own login, at no extra cost and with no per-seat pricing. Team members work every job; how the business is set up, and the account itself, stay with the owner.

Owner
Everything: jobs, pricing, service locations, the widget, settings, billing and the team.
Team member
Every job: add jobs, notes, tasks, appointments and photos, build and send quotes, and move jobs along the pipeline. No access to pricing, service locations, the widget, settings, billing or the team — those pages don’t appear for them.

Inviting someone

01

Go to Account menu → Team

You'll see your current members and any invites still outstanding.
02

Enter their email address

Type their work email and click Send invite. They get an email with a unique link valid for 48 hours.
03

They accept

The link lands them on the accept page. If they're new to BetterRoofing they set a name and password; if they already have an account, they accept in one click and use their existing password.
04

They're in

They're signed in and taken to the dashboard. From then on they sign in at betterroofing.co/login like anyone else.

Managing your team

Remove a member

The trash icon next to them on Account menu → Team. Access is revoked immediately and they can't sign in to your account afterwards.

Pending invites

Invites not yet accepted sit in their own section with an expiry time. Each is valid for 48 hours; if one lapses, send a new one.

No seat limit

Office staff, sales reps, crew leads — invite as many as you need. It's one flat price however big the team gets.

Your account

Your account & billing

Company details & logo

Account menu → Settings holds your company details. Your company name is what homeowners see on quotes, emails and your widget — Google sign-ups start with a placeholder, so change it here if you used one.

Logo

PNG, JPEG or WebP up to 2 MB, uploaded in the setup wizard or here. It's stored against your account, ready for the homeowner-facing surfaces that use your branding. Your estimate PDF and emails carry your company name today.

Phone number

Shown to homeowners at the end of their estimate when you don't take bookings.

Time zone

Drives task due dates and your Today list. It's set from your browser automatically; change it here if that's wrong.

Plan, trial & cancelling

One plan, $99/month, everything in it. No tiers, no feature gating, no per-seat pricing and no cap on how many leads you take.

  • A 14-day free trial with no credit card. Your trial countdown sits in your Overview header, and turns into a banner in the last three days.
  • Month to month. Cancel any time from Account menu → Billing, with no cancellation fee and no annual commitment.
  • Cancelling keeps your access to the end of the period you have already paid for.

If a trial or subscription lapses, your account isn't deleted and your widget keeps capturing: leads that arrive while you're expired are held, counted on the billing page, and unlocked the moment you subscribe.

Still have questions?

Search above, ask the assistant in your dashboard, or reach out and we'll get back to you quickly.

Email Us →