Skip to content

Connect Measured Bid to Zapier

Measured Bid posts each new lead to a webhook URL as JSON. In Zapier, a Catch Hook trigger receives it, and your Zap sends it on to your CRM, a spreadsheet, a text to your crew or anywhere else Zapier reaches.

Your websiteThe widgetHomeowner sees a rangeand sends the formMeasured BidSaves the leadDashboard and email alert$1,500 to $2,025 shownZapier triggerCatch HookWebhooks by Zapierparses the JSONZapier actionsYour toolsCRM, Google Sheets,Slack or a textleadPOST JSONZap runsYour websiteThe widgetHomeowner sees a rangeand sends the formMeasured BidSaves the leadDashboard and email alert$1,500 to $2,025 shownZapier triggerCatch HookWebhooks by Zapierparses the JSONZapier actionsYour toolsCRM, Google Sheets,Slack or a textleadPOST JSONZap runs
Sample range from the sample house on our trade pages.

Set it up

You need a Measured Bid widget and a paid Zapier plan.

  1. Add a Catch Hook trigger

    In Zapier, create a Zap. For the trigger, pick Webhooks by Zapier, then the Catch Hook event. Leave Pick off a Child Key empty.

  2. Copy the webhook URL

    On the trigger's Test tab, copy the URL Zapier gives you.

  3. Paste it into Measured Bid

    Open your widget's settings, find New-lead alerts and paste the URL into Webhook. Save. Each widget has its own webhook, so repeat this for each one.

  4. Send a test lead

    Open your homeowner link, get a price for an address and send the form. It counts as one estimate. Leads your team saves from New estimate are sent too.

  5. Test the trigger

    Back in Zapier, click Test trigger and pick the lead. Every field below shows up, ready to map.

  6. Add your actions and turn it on

    Add the steps you want, such as a CRM contact, a Google Sheets row or a message to your crew. Then publish the Zap.

The webhook, field by field

A POST with a application/json body. Fields with no value are left out, except the ones that can be null.

  • Measured Bid sends each new lead once, as a POST with a JSON body, right after the homeowner sends the form. Leads your team saves from New estimate are sent the same way.
  • The webhook address must be a public https:// address. Redirects are not followed.
  • It waits up to 8 seconds for a reply and does not retry.
  • If your endpoint is down, the lead is still saved in your dashboard and the homeowner still sees their confirmation.
  • Demo widgets never send webhooks.

The webhook carries the contact details, the range, the trade and the source. The measured quantities are in the new-lead email. The lead in your dashboard has those, plus the homeowner's answers, the line-item dollars and the map of what was measured.

Sample lead, as Zapier receives itJSON
{
  "leadId": "5b0e2c1a-8f3d-4c7e-9a61-2d4f7b8c9e10",
  "brand": "sierra-gutter-co",
  "brandName": "Sierra Gutter Co.",
  "service": "gutters",
  "guardProduct": {
    "id": "sample-mesh",
    "name": "Micro-mesh aluminum"
  },
  "quoteId": "9c4d7e2f-1a3b-4c5d-8e6f-7a8b9c0d1e2f",
  "formattedAddress": "412 Sample Ridge Ct, Roseville, CA 95661, USA",
  "name": "Jordan Example",
  "phone": "(916) 555-0114",
  "email": "jordan@example.com",
  "preferredTime": "Weekday mornings",
  "estimateLow": 1500,
  "estimateHigh": 2025,
  "smsConsent": false,
  "smsConsentText": null,
  "utm": {
    "utm_source": "google",
    "utm_medium": "cpc",
    "utm_campaign": "sample-guards",
    "gclid": "sample-click",
    "referrer": "https://example.com/gutter-guards"
  },
  "property": {
    "source": "rentcast",
    "stories": 1,
    "yearBuilt": 1998,
    "propertyType": "single_family"
  },
  "receivedAt": "2026-09-25T16:42:07.000Z",
  "firstName": "Jordan",
  "lastName": "Example",
  "street": "412 Sample Ridge Ct",
  "city": "Roseville",
  "state": "CA",
  "zip": "95661"
}
Sample data for the fictional sample house. The range comes from the real pricing engine.
Fields in each webhook post
FieldTypeWhat it holds
leadIdstring or nullThe lead's ID in Measured Bid. Null only if the lead could not be saved; the rest still arrives.
brandstringYour widget's ID. Each widget has its own webhook, so one account can feed several CRMs.
brandNamestringThe business name shown on the widget.
service"gutters" | "painting" | "siding" | "roofing" | "lighting" | "holiday" | "washing"The trade the widget prices.
guardProductobjectThe guard product id and name saved with the estimate, when a named guard was quoted.
quoteIdstringThe estimate record behind the lead, when there is one.
formattedAddressstringThe address as Google formats it: street, city, state and ZIP, then country.
namestringThe homeowner's name as typed.
phonestringTheir phone number as typed. Every lead has one.
emailstringOptional. Missing when they left it blank.
preferredTimestringOptional. The best time for a visit, in their words.
estimateLownumberThe low end of the price range they saw, in dollars. Missing when no price was shown.
estimateHighnumberThe high end of the range, in dollars. Missing when no price was shown.
smsConsentbooleanTrue only when they checked the box to get texts.
smsConsentTextstring or nullThe exact consent wording they agreed to, or null.
utmobjectWhere the lead came from. Any of utm_source, utm_medium, utm_campaign, utm_term, utm_content, gclid, gbraid, wbraid, fbclid, msclkid, plus referrer, the page the widget was on. Missing when there's nothing to report.
propertyobjectCounty records for the home, such as stories, living area and year built. Only on plans with county records, and only when the county has a record.
receivedAtstringWhen Measured Bid received the lead, as an ISO 8601 time in UTC.
firstNamestringThe first word of name, for CRMs that want first and last names.
lastNamestringEvery word of name after the first. Missing when they typed one word.
streetstringThe street line of formattedAddress, with any unit. The whole address when it isn't a US street address.
citystringThe city from formattedAddress. Missing when the address isn't a US street address.
statestringThe two-letter state. Missing when the address isn't a US street address.
zipstringThe ZIP code. Missing when the address isn't a US street address.

What contractors send leads to

A few Zaps that work with the fields above.

A row in Google Sheets

One row per lead with the date, name, phone, address, estimateLow, estimateHigh and utm.utm_source.

A message to your crew

Post the name, phone, address and range to a Slack channel or send it as a text, so someone calls back fast.

FAQ

Is there a Measured Bid app in Zapier?

Not yet. You use Zapier's own Webhooks by Zapier app with the Catch Hook trigger. Measured Bid posts each lead to the URL it gives you.

Do I need a paid Zapier plan?

Yes. Zapier offers Webhooks by Zapier on its paid plans, not the free one. Check Zapier's plans page for current prices.

Can I use Make or n8n instead?

Yes. The webhook posts plain JSON to any https address, so a Make custom webhook or an n8n Webhook node works the same way.

Is the webhook signed?

No. There is no signature header, so treat the Catch Hook URL like a password and share it only with people who manage the Zap. If it leaks, make a new Catch Hook and paste the new URL into your widget's settings.

What happens if Zapier is down?

Measured Bid waits up to 8 seconds and doesn't retry. The lead is still saved in your dashboard, and you can export your leads as a CSV from there.

Send every lead where your team works

Start a trial, set your rates and paste your Catch Hook URL. 14 days or 25 estimates free, no card.