FR
ZapierIntegration guide

Zapier

Capture leads from Facebook Lead Ads, Typeform, Webflow and 6000+ other apps via Zapier — step-by-step with screenshots.

Setup

Create a Zap with Facebook Lead Ads as source and Webhooks by Zapier as action.

Create a new Zap

In Zapier, click Create Zap. Name your Zap (e.g. Facebook Leads → Capturia).

Create Zap button in Zapier

Configure the Facebook Lead Ads trigger

As Trigger app, choose Facebook Lead Ads. Connect your Facebook Business account, select the Page and the Lead Form you want to route to Capturia. Click Test trigger — Zapier pulls a test lead from the form.

Facebook Lead Ads trigger configuration

Add the Webhooks by Zapier action

As Action app, choose Webhooks by Zapier. As Event, select POST (not Custom Request, not GET).

Webhooks by Zapier POST action

Configure URL and authentication

URL: https://app.capturia.io/api/v1/leads/capture

Payload Type: JSON (not Form, not XML)

Headers: add Authorization with the value Bearer cap_live_xxxxxxxx (your full Capturia API key).

Capturia URL and Authorization header

Map the fields

In the Data section, add the Capturia fields (see the mapping table below). Drag the matching Facebook Lead fields from the right-hand panel.

Important: for utm (nested object) and pipeline, use the format utm.source, utm.medium, pipeline.id, etc. Zapier flattens them by default — you must enable Unflatten = Yes in advanced options.

Field mapping in Zapier

Capture SMS consent

Recommended pattern: add a custom SMS consent question to your Facebook Lead Form (Custom Question type "Yes/No" or checkbox). Map this field to sms_consent.

Alternative pattern: if the custom question isn't possible, hardcode sms_consent: true but keep proof of consent (checkbox on the landing page, archived copy). See the LCAP section below.

Mapping the sms_consent field

Test and publish

Click Test action to send the test lead to Capturia. A 200 OK response with status: created or status: idempotent_replay confirms the connection. In My Prospects on Capturia, the test lead appears immediately. If everything is OK, click Publish Zap to activate the connection in production.

Test action and publish in Zapier

Field mapping

Recommended mapping for Facebook Lead Ads → Capturia. Adapt source field names to your form — phone_number in some forms becomes phone in others.

Capturia fieldRequiredSource fieldNotes
phoneYesphone_numberE.164 (+15145551234), NANP 10 or 11 digits, or formatted (514) 555-1234 / 514-555-1234. 10-digit numbers auto-prefixed with +1.
sms_consentYesconsent_yes_no (custom question)Boolean true OR string 'true' / 'yes' / 'oui' / 'vrai' / '1' / 'on' / 'checked' (case-insensitive). Accepted at the body root or inside the `customData` object (GoHighLevel webhooks).
first_nameNofirst_nameLead's first name
last_nameNolast_nameLast name
emailNoemailRFC 5322 valid email
source_labelNo(littéral) fb_lead_adsFree-form tag (e.g. 'webflow_form', 'fb_lead_ads')
utm.sourceNo(littéral) facebookNested utm object (not flat)
utm.mediumNo(littéral) cpcNested utm object
utm.campaignNocampaign_nameNested utm object
tagsNo[]Array of strings
pipeline.idNo(optionnel)Target pipeline UUID
pipeline.stage_idNo(optionnel)Target stage UUID

SMS Consent — CASL / Quebec Law 25

The sms_consent field is required. Canada's Anti-Spam Law (CASL) and Quebec's Law 25 require explicit consent before any commercial SMS. Capturia stores a timestamped record of this attestation for your legal protection.

Recommended pattern — consent captured at source

Add a custom consent question directly in the source form (FB Lead Form custom question, Typeform field, GHL form checkbox). Map this field to sms_consent. Consent is explicit, dated, and tied to the lead who gave it.

Alternative pattern — checkbox on the landing page

If the source form doesn't allow custom questions, add a consent checkbox on the landing page before the ad. Keep a copy of the page (Wayback Machine, dated screenshot) as evidence.

Legal grey area

Hardcoding sms_consent: true without real lead attestation = legal risk. In case of complaint, Capturia may be required to provide proof of consent. Without proof, liability falls on the SMB owner.

Step-by-step test

In Zapier, click Test trigger to pull a test lead from Facebook (use Meta's "Lead Ads Testing Tool"). Then Test action to send the lead to Capturia. A 200 OK response with status: created or status: idempotent_replay confirms it works. Then check My Prospects in Capturia to see the lead.

Error catalog

CodeErrorCauseFix
401missing_api_keyAuthorization header absent or malformedAdd the header Authorization: Bearer cap_live_...
401invalid_api_keyKey revoked, expired, or typoCheck the key in the dashboard, generate a new one if needed
403terms_acceptance_requiredToS not accepted (or version bump forced re-consent)The SMB owner must re-accept ToS in the dashboard
403insufficient_scopeKey lacks the leads:capture scopeCreate a new key with the 'Lead capture' preset
422invalid_phonePhone format not recognizedUse E.164 (+15145551234) or NANP 10 digits (5145551234)
422missing_consentsms_consent absent, false, or unrecognized value — the field is looked up at the body root AND inside the customData object (GHL)Map the consent field to sms_consent (true / yes / oui). From GHL: fixed value true behind a condition on the consent checkbox
422invalid_payloadOther field malformed (email, utm object vs flat, etc.)Check the body format — see the leads:capture API doc
429rate_limited_keyPer-key quota exceeded (often 100 req/min)Throttle at source, or request a tier upgrade from support
429rate_limited_ipPer-IP quota exceededReduce the rate or contact support
400invalid_payloadBody is not valid JSON (Form or form-urlencoded sent instead)Configure Payload Type = JSON / Content-Type = application/json

FAQ — common pitfalls

SymptomCause
Platform test green (200 OK) but lead doesn't show up in pipelinePhone matches an existing contact — response status: idempotent_replay. The lead exists but isn't duplicated. Test sandboxes often reuse the same number.
400 "Body is not valid JSON"Payload Type set to Form instead of JSON, or body sent as x-www-form-urlencoded instead of application/json.
200 OK response but no SMS sent to leadsms_consent: true but AI agent not configured, or SMS AI agent disabled, or no Twilio number provisioned for the client.
Lead created without UTM trackingutm field sent as flat (utm_source) instead of nested object (utm.source). Server expects an object.
403 terms_acceptance_required after an update that used to workToS version bump on Capturia side forces the SMB owner to re-accept in the dashboard before the key works again.
UTM lost despite mappingIn Zapier, the Unflatten = Yes option is required for utm.source to be sent as a nested object. Otherwise Zapier flattens to utm_source which Capturia rejects.