Skip to content

Send leads into Measured Bid

Post leads from any website form, CRM or automation to a widget's form leads URL. They land in the same lead list as widget leads, and you can keep their stage in sync.

View as Markdown

Your form leads URL

  • Find it in the widget's settings, under Leads from your other website forms. It looks like https://measuredbid.com/api/intake/<token>.
  • Keep it private. Anyone with it can add leads. Rotating it stops the old URL right away.
  • Demo widgets don't have one.

The request

  • POST with JSON, form-encoded or multipart data. JSON can be nested; it's flattened.
  • Up to 64 KB and 300 fields.
  • Browsers can post to it directly (CORS is open).
  • Optional Idempotency-Key header, up to 200 characters, so a retry isn't saved twice.
From a browser or NodeJS
fetch("YOUR_FORM_LEADS_URL", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    external_id: "your-lead-id",
    name: "Jordan Example",
    email: "jordan@example.com"
  })
});
From the command lineBASH
curl -X POST "YOUR_FORM_LEADS_URL" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: crm-123" \
  -d '{"name":"Jordan Example","phone":"(916) 555-0142","address":"412 Sample Ridge Ct, Roseville, CA 95661","service":"gutters","external_id":"crm-123"}'

Fields it understands

Field names are matched loosely, so most form plugins work without renaming anything.

MeaningField names accepted
Namefull_name, fullname, your-name, contact_name, name
First and last namefirst_name, fname, firstname; last_name, lname, lastname
Phonephone_number, your-phone, phone, tel, telephone, mobile, cell
Emailemail_address, your-email, email, e-mail
Full addressfull_address, street_address, property_address, address
Address partsaddress1, address_line_1, street, city, state, zip, zipcode, postal_code
Messageyour-message, message, comments, notes, details, description
Tradeservice, trade, project, project_type, interested_in. Matched to the widget's trades by keyword.
Form nameform_name, form, source
Your lead IDexternal_id, externalid, hub_lead_id. Needed for stage sync.
Spam trapwebsite, _gotcha, hp. Leave it empty. A filled one gets a normal answer and is not saved.

Any utm_* field is kept. A lead needs a name (or first and last name, or an email) and a way to reach them: a phone number with at least 10 digits or an email.

Responses

StatusMeans
200Saved: { "ok": true, "id": "..." }.
400Missing name or contact (listed in missing), or a bad Idempotency-Key.
404unknown_url: the URL is wrong or was rotated.
413Body over 64 KB.
415Content type it can't read.
429Too many requests: 60 an hour and 500 a day per URL.
503Try again after 60 seconds (see Retry-After).

Duplicates

The same Idempotency-Key is saved once. A lead with the same phone or email within 24 hours is merged into the first one instead of creating a second.

Update a lead's stage

Post to your form leads URL with /status on the end. Use the external_id you sent with the lead.

POST <form leads URL>/statusJSON
{
  "external_id": "your-lead-id",
  "status": "won",
  "value": 1775
}
  • status: new, contacted, quoted, won, lost or spam (spam is saved as lost). value is optional, in dollars.
  • contacted and quoted never move a booked lead back.
  • Changes you send aren't echoed back to your lead updates webhook.
  • Answers: 200 { "ok": true, "id", "status" }, 400, 404 unknown_url or unknown_lead, 429 after 600 an hour.