
Lead intake: forms, Facebook Lead Ads, routing
Closr ingests leads from four places: an embeddable form for your website, the generic inbound API (anything that can POST JSON), Facebook Lead Ads via OAuth, 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.
This is partially live. Generic API + Realtor.ca + Zillow.ca + Facebook OAuth are running. Direct Zillow Premier Agent and the polished "paste-your-Zapier-URL" UX are paused for alpha (more on that below).
Embeddable form for your website
Drop a hand-coded HTML form on any page you control and post it to Closr's inbound endpoint.
- 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.
- 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.
- 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. Optional: `source` (defaults to "API"), `tags`, `value`.
- 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
OAuth-based. You connect a Facebook Page, Closr subscribes to its leadgen events, and every form submission on that Page arrives in your pipeline within a few seconds.
- 1Go to Settings → Integrations → Facebook.
- 2Click "Connect Facebook". You'll bounce to facebook.com, grant the Page permissions, and bounce back.
- 3You'll see a list of Pages your Facebook account manages. Click "Connect" next to the one you want.
- 4Closr subscribes that Page to the leadgen webhook and stores a long-lived Page Access Token. Lead-form submissions from that Page now flow in tagged `facebook` with source `Facebook`.
Source attribution surfaces under Analytics → Sources so you can see cost-per-lead per Page if you fill in the monthly ad spend.
If Facebook revokes the token (rare, but happens if the Page admin changes), you'll get a push notification telling you to reconnect. The webhook keeps returning 200 so Facebook doesn't retry indefinitely, but no leads land until you re-auth on the Settings page.
Zapier pathway
For everything Closr doesn't directly integrate with yet (Zillow US Premier Agent, FUB transfers, Realtor.com agent webhooks, a Google Ads lead form extension, your brokerage's proprietary lead pool, etc.), Zapier is the path.
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.
The alpha-invite email mentions Zillow / Facebook Lead Ads / Zapier are "paused for alpha". That referred to the polished one-click setup screens, which were too developer-flavored for a "I don't do software" product. The underlying generic API has been live the whole time. If you're comfortable with Zapier, this works today. The guided versions come back when we ship a setup flow that doesn't require copy-pasting webhook URLs.
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.
- 1Settings → Routing → New rule.
- 2Name it ("FB Toronto leads", "Stale-pricing-page leads", whatever).
- 3Set match criteria: by `source` (e.g. "Facebook"), by tag, by address-contains, by value range. Leave criteria empty to match everything.
- 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).
- 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