Skip to content

Send Measured Bid leads to GoHighLevel

Measured Bid posts each new lead to a webhook. In GoHighLevel, a workflow with the Inbound Webhook trigger receives it and creates or updates the contact. There's no native HighLevel app yet. You set this up once in your workflow builder.

Your websiteThe widgetWordPress, HighLevelfunnel or any siteMeasured BidSaves the leadDashboard and email alert$1,500 to $2,025 shownHighLevel triggerInbound WebhookStarts your workflowwith the lead's fieldsHighLevel actionContact updatedThen tags, pipeline,tasks and follow-upleadPOST JSONmaps fieldsYour websiteThe widgetWordPress, HighLevelfunnel or any siteMeasured BidSaves the leadDashboard and email alert$1,500 to $2,025 shownHighLevel triggerInbound WebhookStarts your workflowwith the lead's fieldsHighLevel actionContact updatedThen tags, pipeline,tasks and follow-upleadPOST JSONmaps fields
Sample range from the sample house on our trade pages.

Set it up

You need a Measured Bid widget and access to Automation in the HighLevel sub-account the leads should land in.

  1. Create the workflow

    In HighLevel, open Automation and create a workflow. Add the Inbound Webhook trigger and copy the webhook URL it shows.

  2. Paste it into Measured Bid

    Open your widget's settings, find New-lead alerts and paste the URL into Webhook. Save. The address must start with https://.

  3. Send a test lead

    Open your homeowner link, get a price for an address and send the form. It counts as one estimate. Back in HighLevel, click Test Trigger, pick the request that arrived and save it as the sample.

  4. Create or update the contact

    Add the Create/Update Contact action. Map firstName, lastName, phone and email, and street, city, state and zip to the contact's address fields. HighLevel needs a phone or an email, and every Measured Bid lead has a phone number.

  5. Keep the range and the source

    Create custom fields for what you want to keep, such as estimate low, estimate high, trade and lead source. Map estimateLow, estimateHigh, service and the utm values to them.

  6. Add your follow-up

    Add the actions you already use: a tag, an opportunity in your pipeline, a task or an alert to your team. Then publish the workflow.

What HighLevel receives

One JSON post per new lead. None of the keys have spaces, which HighLevel's field mapping needs.

  • Contact: name, phone, email and the formatted address.
  • The price range the homeowner saw, and the trade.
  • Where they came from: UTM tags, click IDs and the page the widget was on.
  • Their text consent, with the exact wording they agreed to.

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 HighLevel 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.

Every field

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 doesn't sync

The new-lead webhook is one way. Form leads can use separate status updates.

Widget leads are one way

The new-lead webhook does not bring HighLevel changes back. Leads your HighLevel forms send to a widget's form leads URL with an external_id can sync stage and price both ways. See custom integrations.

One attempt per lead

If HighLevel doesn't answer within 8 seconds, the post isn't retried. The lead is still in your dashboard.

No measurements

Run lengths, wall area and roof squares stay in Measured Bid. Link your team to the lead there when they need them.

FAQ

Is there a GoHighLevel app for Measured Bid?

Not yet. Leads reach HighLevel through a webhook and a workflow you build once. The steps on this page are the whole setup.

Does the Inbound Webhook trigger cost extra in HighLevel?

HighLevel lists it as a premium trigger. Each sub-account gets 100 free executions, then HighLevel charges per execution. Check HighLevel's help center for the current rate.

Can each client's widget go to its own sub-account?

Yes. Every widget has its own webhook address, so an agency can point each client's widget at that client's sub-account. Multi-market includes unlimited widgets.

Does HighLevel get the measurements?

Not through the webhook. HighLevel gets the contact details, the price range, the trade and the ad source. The measurements are on the lead in your Measured Bid dashboard and in the new-lead email.

Can I put the widget on a HighLevel website or funnel?

Yes. Paste the website code from your widget's Install page into a custom code element on the page, and add that site's address under Websites in the widget's settings.

Send measured leads to HighLevel

Start a trial, set your rates and paste your workflow's webhook URL. 14 days or 25 estimates free, no card.