All guides
Lead intake: forms, Facebook Lead Ads, routing

Lead intake: forms, Facebook Lead Ads, routing

~5 min read

Closr ingests leads from four places: an embeddable form for your website, a one-click Facebook Lead Ads connect, the generic inbound API (anything that can POST JSON), and email-only feeds like Realtor.ca that get parsed out of inbound mail. New leads land as a Contact plus a Lead row, fire the `LEAD_CREATED` trigger, run any routing rules you've set, push a notification, and bump the contact's lead score. The whole path is the same regardless of source.

Facebook Lead Ads is now a native one-click connect. You connect your Facebook Page in Settings, pick which Pages to pull from, and leads flow straight into your pipeline. No Zapier in the middle. For sources Closr doesn't yet connect to directly, Zapier is still the bridge, covered lower down.

Embeddable form for your website

Drop a hand-coded HTML form on any page you control and post it to Closr's inbound endpoint.

  1. 1Go to Settings → Integrations → API Keys and mint a new key. Label it "Website form" so you can revoke just that one later. Copy the key. You only see it once.
  2. 2Build a normal HTML form with fields like `firstName`, `lastName`, `email`, `phone`, `message`, `propertyAddress`. The endpoint accepts JSON only, so wire a small `fetch()` in the submit handler instead of a plain form POST.
  3. 3POST to `https://getclosr.app/api/leads/inbound` with header `x-api-key: <your key>` and the JSON body. `firstName` is the only required field (100 characters max). Optional: `lastName`, `email`, `phone`, `source` (defaults to "API"), `formName` (the specific form the lead came through — becomes its own tag, see the Facebook section), `tags`, `propertyAddress`, `value` (a number), `message`.
  4. 4Test by submitting the form yourself. Within a few seconds the contact appears in Contacts and the lead lands in your pipeline at the default stage.

That's the whole API. Same endpoint Zapier hits, same endpoint Make.com hits, same endpoint a brokerage-supplied IDX site could hit if your provider lets you customize the post-submit handler.

Facebook Lead Ads (one-click connect)

Connect your Facebook Page once and every lead from your Lead Ad forms lands in Closr on its own. No API key, no Zapier, no webhook to paste.

  1. 1Go to **Settings → Integrations** and click **Facebook Lead Ads**.
  2. 2Click **Connect Facebook**. Sign in to Facebook and approve the permissions. You're sent back to Closr.
  3. 3Pick the **Page** (or Pages) whose Lead Ads you want to pull from. Closr subscribes to that Page's leads for you.
  4. 4Fire a test lead with Meta's Lead Ads Testing Tool, or submit one of your own forms. It shows up in Contacts within seconds, tagged and in your pipeline.

Closr tags each lead with the form it came from. "First-Time Buyer Guide" becomes the tag `first-time-buyer-guide` on its own. That's the payoff: point a campaign's trigger tags at a form's tag and every lead from that form auto-enrolls in that campaign, so the buyer guide goes out with no manual step. Source attribution surfaces under Analytics → Sources, so you can see cost-per-lead once you fill in the monthly ad spend.

Connected a Page and leads aren't showing up? Check that the Page is still listed under Settings → Integrations → Facebook Lead Ads. If you removed Closr's access on Facebook's side, reconnect from that page.

Zapier pathway (for sources without a native connect)

Facebook Lead Ads has a native connect above, so you don't need Zapier for it. Zapier is for the sources Closr doesn't connect to directly yet: Zillow US Premier Agent, FUB transfers, Realtor.com agent webhooks, a Google Ads lead form extension, your brokerage's proprietary lead pool, and so on.

Build a Zap with your source as the trigger and "Webhooks by Zapier → POST" as the action. URL is `https://getclosr.app/api/leads/inbound`, header `x-api-key: <your key>`, body shaped the same as the website form. Set `source` to something descriptive like "Zillow Flex" or "Realtor.com Lender Connect" so analytics splits them out properly. If the source system carries a form or campaign name, map it to `formName` and each lead arrives tagged with it.

Round-robin routing (teams)

If you're on a team plan, every inbound lead can auto-assign to a teammate via a rotation rule. Configured in Settings → Routing.

  1. 1Settings → Routing → New rule.
  2. 2Name it ("FB Toronto leads", "Stale-pricing-page leads", whatever).
  3. 3Set match criteria: by `source` (e.g. "Facebook"), by tag, by address-contains, by value range. Leave criteria empty to match everything.
  4. 4Pick a strategy: **Specific user** (always assigns to one teammate), **First in set** (walks an ordered list, picks the first one who's still on the team), or **Round-robin** (rotates through the list).
  5. 5Set priority. Higher priority rules match first. Save.

Unassigned leads also show a "Claim" button on the pipeline kanban for any teammate to grab.

What happens when a new lead lands

The flow is the same for every source:

  • Contact gets matched by email if one's there, otherwise created.
  • Lead row gets created at the default pipeline stage.
  • `LEAD_CREATED` trigger fires. Any automation rule you've set up (welcome SMS, auto-tag by source, notify on-call) runs.
  • Routing rule assigns the lead to a teammate (or to you, if you're solo).
  • Push notification fires to the assigned agent.
  • Lead score recomputes overnight on the cron. Web-tracker activity counts toward it.
  • If you've enrolled the matching source in a campaign, the drip starts.

Every inbound lead also creates a NOTE activity if the source included a "message" field. So buyer-form free-text questions stick to the contact record and show up in the activity timeline.

Where to go next

  • `lead-scoring-views`: what makes a lead score high, and how to save filtered lists
  • `automations`: wire reactions to `LEAD_CREATED` and the other triggers
  • `campaigns`: drip new leads from a given source automatically