Text Facebook and Instagram Lead Ad Leads on iMessage in Seconds
Short answer: connect Meta's lead ads to a ZeroSettle iMessage number so every new lead gets a text from your business seconds after submitting the form. In Zapier, use the Facebook Lead Ads trigger and either ZeroSettle's Send iMessage action or a webhook step that calls POST /api/imessage/agent/start, so the hosted AI agent opens the conversation, qualifies the lead and shares your booking link. In GoHighLevel, a workflow's Send SMS action sends from your number once the iMessage (ZeroSettle) app is the sub-account's SMS provider. Put consent language for texts in the form, open with who you are and a question (no link), and plan around each number's new-contact limit.
Key takeaways
- Consent lives in the form. Add text to the lead form saying you will contact them by text about their request, and keep the submission record. No form consent, no text.
- Three wiring options: Zapier with the hosted agent (a webhook step to
/api/imessage/agent/start), Zapier with your own first text (Send iMessage action), or a GoHighLevel workflow. - The first text: say who you are, name the form they filled out, end on a question, and leave the link for after they reply, because links to someone who has never texted your number aren't tappable.
- Pacing: Pro opens 5 new conversations a day per number; Growth opens 50 a day per number, at most 3 per 15 minutes. Size the plan and the number count to your lead volume.
- Not every lead is on iMessage. Keep a call or email path for leads who can't receive it; SMS fallback is a limited pilot, not a default.
Why text lead ad leads on iMessage?
Because a lead ad lead is warmest in the minute after the form closes, and a text reaches them on the device they are probably still holding. Meta's instant forms make submitting easy, which also makes it easy to forget you submitted. A call from an unknown number an hour later can go to voicemail, and an email can sit unread. A blue-bubble text from a named business, sent while they are still scrolling, starts a conversation they can answer with their thumb.
ZeroSettle gives your business a dedicated phone number on iMessage, running on Apple hardware we operate for you in a server facility. Your automation sends from it through an API, and a hosted AI agent can answer the replies for you. The same number works for every campaign, so a lead who replies tomorrow reaches the same thread. For the wider picture, see iMessage for lead generation and speed to lead for home service businesses.
What consent language does the form need?
The form itself has to tell the lead you will text them, before they submit. ZeroSettle's rules are plain: use it only to contact people who agreed to hear from you for the intended purpose, and, in the docs' words, “If you are unsure whether you have consent, you don't.” A lead who submitted a form that said nothing about texts did not agree to texts.
Meta's instant forms let you add your own disclaimer text to the form. Write one that names your business, says how you will contact them and why, and says how to stop. An illustrative example for a fictional roofing company, which is not legal advice and should be reviewed by your own counsel:
By submitting this form, you agree that Brightline Roofing may contact
you at the number you provided by text message (including iMessage and
automated messages) and by phone about your inspection request and
related offers. Consent is not a condition of purchase. Message
frequency varies. Message and data rates may apply. Reply STOP to opt
out at any time.
Three habits go with it:
- Keep the record. Store when each lead submitted, which form and ad they came from, and the disclaimer text that form showed. If someone asks why you texted them, that record is your answer.
- Text about what they asked for. A roof inspection form is consent to talk about the inspection, not a license to add the number to every promotion you run.
- Respect STOP. ZeroSettle enforces it for you: when a contact texts STOP (or a phrase like “remove me”), every number on your account is blocked from texting them and sends return
403 recipient_opted_outuntil they text START.
Never upload purchased lists, scraped numbers or old door-knock sheets into this flow. iMessage marketing and TCPA consent covers the US rules in more depth; it is not legal advice either.
How do you connect lead ads to your number?
Pick one of three routes, based on who should answer the replies.
| Route | Who writes the first text | Who answers replies | Number setting |
|---|---|---|---|
Zapier + webhook step to /api/imessage/agent/start | The hosted agent (your first_message, or its own opener) | The hosted agent | Managed by AI Agent |
| Zapier + Send iMessage action | Your Zap, with form fields filled in | Your team in the console, or your own code | Managed by API |
| GoHighLevel workflow (Send SMS) | Your workflow | Your team in the GoHighLevel inbox or mobile app | Managed by API |
Managed by AI Agent and Managed by API are set per line group in the console's Messaging tab. Sends from GoHighLevel on a number the agent manages are refused, so keep GoHighLevel numbers Managed by API.
Zapier and the hosted agent
This is the hands-off route: the Zap only starts the conversation, and the hosted agent does the rest. Set up the agent first (below), then build a two-step Zap.
- Trigger: the Facebook Lead Ads app's new-lead trigger, pointed at your Page and the form your ad uses. Lead ads that run on Instagram use the same Meta instant forms, so pick the form those ads use too.
- Action: Webhooks by Zapier, a POST to
https://portal.zerosettle.io/api/imessage/agent/startwith a JSON payload and your API key in anAuthorizationheader.
| Field | Value |
|---|---|
| URL | https://portal.zerosettle.io/api/imessage/agent/start |
| Payload type | JSON |
Data: to | The lead's phone number from the form, with country code |
Data: name | The lead's first name (optional; the agent knows it for the whole conversation) |
Header: Authorization | Bearer followed by an API key from the console's Settings → API key |
The request is the same one you would send from your own code:
curl -X POST https://portal.zerosettle.io/api/imessage/agent/start \
-H "Authorization: Bearer $ZEROSETTLE_TOKEN" -H "Content-Type: application/json" \
-d '{"to": "+12535550123", "name": "Dana"}'
A 200 with "status": "started" means the opener went out. Watch for these answers in your Zap history:
429 new_contact_limit: the number reached today's new contacts;error.retry_after_ssays when it can open another.403 recipient_opted_out: this person texted STOP earlier. Don't retry.403 awaiting_reply: this contact already has 2 messages from you and has never replied, for example a lead who submits the form again after ignoring the opener and the follow-up. Wait for them. A repeat submission otherwise starts another opener, so filter repeats out of the Zap if you can.402 ai_credits_exhausted: too few credits for the opener; nothing was sent.409 not_managed: the line group is still Managed by API. Switch it to the agent first.
Mint a separate API key for Zapier. Minting a new key revokes nothing, so the Zap's key can live alongside your others (revoking, though, revokes every key on the account). iMessage automations with Zapier, n8n or Make has more Zap patterns.
Zapier and your own first text
If people on your team answer replies, keep the number Managed by API and send the opener yourself. In the console, open Settings → CRM → Zapier and choose Open in Zapier to add the ZeroSettle app, connect it with an API key, then build: Facebook Lead Ads new lead → ZeroSettle Send iMessage, with the lead's phone number as the recipient and a text that uses their form answers. Sends follow the same rules as POST /api/imessage/send.
Add a second Zap on ZeroSettle's New iMessage Received trigger to post replies into your team's channel or CRM, and one on iMessage Failed to flag leads whose text couldn't be sent so someone calls them instead.
GoHighLevel workflows
Agencies that already route Meta leads into GoHighLevel can keep their workflows and change only the sender. Install the iMessage (ZeroSettle) app on the sub-account from the console (Settings → CRM → GoHighLevel), then in GoHighLevel choose iMessage (ZeroSettle) under Settings → Phone Numbers → Advanced Settings → SMS Provider. From then on the workflow's Send SMS action, the conversations inbox, the mobile app and bulk actions send from your ZeroSettle number, and replies land in the contact's conversation.
Sends from GoHighLevel follow the same rules as the API: STOP, the two-unanswered-messages rule and the new-contact limits. A send those rules refuse is marked failed in GoHighLevel with the reason, so a workflow that texts a sixth new lead on a Pro number shows the failure instead of hiding it. A sub-account connects to one ZeroSettle account. GoHighLevel + iMessage for lead gen agencies walks through the full agency setup, and the CRM integrations docs list every setting.
What should the first text say?
The first text should say who you are, mention the form they just filled out, and end on a question that is easy to answer. Leave out links. That is all it needs to do: earn one reply.
The no-link rule is not a style choice. An iPhone won't open links from an unknown sender: until the lead replies to your number or saves it, a link shows as plain text they can't tap, and the API returns a link_not_tappable warning. Once they reply, every link after that works. Why links in a first iMessage aren't tappable explains it.
Being an unknown sender has a second cost. On iOS 26, Screen Unknown Senders moves texts from unknown senders into a separate list without a notification, so a first text from you may go unseen. Where you can, give leads a way to text you first, such as a “Text us” button on the website page your form sends them to; how to get customers to text you first shows how. Anyone who texts first is a known sender, their links work, and they never count toward your new-contact limit.
| Opener | Why |
|---|---|
| “Hi Dana, this is Brightline Roofing. You asked for a free roof inspection on our Facebook ad, so we're texting as promised. What's the address of the home?” | Names the business and the form, and asks one question the lead can answer in seconds. |
| “Thanks for your interest! Book here: https://brightline-roofing.example/book” | No name, no context, and the link isn't tappable yet. |
| “Hi! Quick question for you.” then, an hour later, “Did you see my text?” | Vague, and it spends both messages you get before a reply. A third, sent later, is refused with 403 awaiting_reply. |
Texts sent within 5 minutes of the first count as one message for the two-unanswered-messages rule, so a two-text opener is fine. After that, you have one more message before the lead replies. Use it well: by default the hosted agent spends it on a single follow-up the next morning. How to write a first iMessage customers actually reply to has more examples.
Timing matters too. ZeroSettle's compliance guidance says not to text before 8 am or after 9 pm in the recipient's time zone for anything promotional. A lead who submits at 11 pm can wait until morning; a Zapier delay step can hold the send.
How does the hosted agent qualify and book?
The hosted agent answers every reply from a business context you write, asks your qualifying questions, and shares your booking link once the lead is a fit. Set it up in the console's Messaging tab (step by step in the AI agent in the console docs):
- Business context: who it is texting (people who filled out your lead ad form), what they asked for, your service area, prices it may quote, the questions to ask, who isn't a fit and how to tell them politely, and when to hand off to a person.
- First message: 1 to 3 texts sent exactly as written. It can't insert the lead's name, so write it to fit every lead from that form. Or turn it off and let the agent write its own opener, which can use the
nameyou passed. - Goal and link: the goals are
purchase,trial_startanddemo_booked. For an estimate or consultation, pick Demos booked and paste your booking page as the link. - Response time: Instant, for lead ads.
- Triggers: the default follow-up goes once, the morning after things go quiet, if they haven't replied. Keep it, and set the agent's time zone (default
America/New_York) to where your leads are, so “morning” means their morning.
A short business context for a roofing lead ad might start like this:
You are Brightline Roofing's automated assistant, texting people who
filled out our Facebook or Instagram ad form for a free roof inspection.
Goal: get a qualified lead booked for an inspection.
Ask, one at a time: the home's address, what's going on (leak, storm
damage, age/replacement), and whether they own the home.
Service area: Tacoma, Lakewood, University Place, Puyallup. Outside it,
thank them and say we can't serve that area.
Renters: ask them to have the owner reach out.
Once they qualify, share the booking link. Inspections take about an
hour and are free. Never quote a replacement price.
Active leak with water coming in: tell them to call (253) 555-0187.
- Tue 7:12 PM
- Business: Hi, this is Brightline Roofing's automated assistant. You asked for a free roof inspection on our ad a moment ago.
- Business: What's the address of the home?
- Lead: 1420 alder ct tacoma
- Business: Thanks Dana, Tacoma is in our area. Is this for a leak, storm damage, or planning a replacement?
- Lead: leak in the upstairs bedroom after the rain last week
- Business: Sorry to hear that. Do you own the home?
- Lead: yes
- Business: An inspector can check the leak and the rest of the roof in about an hour, free.
- Business: Pick a time here: https://brightline-roofing.example/book
- Lead: booked thursday 10am
- Business: You're set for Thursday at 10. If water starts coming in before then, call (253) 555-0187.
The agent never invents facts the context doesn't give, says it is your automated assistant if sincerely asked, and points anyone who wants no more texts to STOP. Each text it sends uses one credit: the conversation above used 7. Free credits come once (500 on Pro, 1,000 on Growth) and never refill; packs are 1,000 for $50 or 5,000 for $200 and never expire. Qualify leads with an AI agent over iMessage goes deeper on qualifying questions, and how the hosted agent works covers every setting.
One trade-off: while the agent manages a line group, inbound texts don't reach your webhook, and Close and HubSpot sends from it are refused. The conversations stay readable in the console and through GET /api/imessage/messages. To take over a conversation, switch the group back to Managed by API.
What about leads who aren't on iMessage?
They can't receive an iMessage, so plan another path for them from day one. iMessage reaches Apple devices; a lead on another kind of device, or with iMessage off, won't get your text. SMS fallback exists only as a limited pilot that ZeroSettle must enable per account, and it is off by default, so don't build a lead flow that assumes it.
- Check first, if you write code.
GET /api/imessage/availabilitychecks whether a number is registered with iMessage without sending anything. Route the rest to a call task or an email. - Catch failed sends, if you don't. Zapier's iMessage Failed trigger fires when a text couldn't be sent, and GoHighLevel marks a refused or failed send with the reason. Turn either into a call task, and still give unanswered leads a call or email after a day, since a quiet lead may simply not have seen the text.
- Keep email in the form. Ask for email alongside the phone number, so every lead has a second channel.
How many leads can one number text a day?
As many new conversations as your plan's new-contact limit allows: 5 a day per number on Pro, and 50 a day per number on Growth, with at most 3 in any 15 minutes. Only conversations the number starts count. Anyone who texts your number first is never limited, and ongoing conversations don't count either; each number allows 10,000 messages a day, sent and received, with known contacts.
| Plan | New contacts per number | What it means for a lead ad |
|---|---|---|
| Pro ($49/month, one number) | 5 a day | Fits a small local campaign. The sixth new lead of the day waits for the reset at 3 AM Eastern. |
| Growth ($199/month per number, upgraded in the console; or $599/month for 3 numbers from a Growth link, plus $199 per extra number) | 50 a day, 3 per 15 minutes | A fourth lead inside 15 minutes waits for retry_after_s. Each added number has its own day. |
| Enterprise (custom pricing) | Talk to sales | For high volume and compliance needs. Book a demo. |
A new contact is counted when the number delivers its first text to someone; failed sends never count. Pro and Growth subscriptions come with a 30-day money-back guarantee.
The limits are what keep a number out of Apple's spam filters, and they are a floor, not a target. Repeated messages to people who never answer are the fastest way to get a number flagged, and then every send fails, to everyone. Practical rules:
- Match volume to capacity. If a campaign brings more leads a day than your numbers can open, add numbers or upgrade before you raise the budget, not after.
- Queue, don't drop. If your own code calls the API, hold leads that get
429 new_contact_limitand retry aftererror.retry_after_s, oldest first. In Zapier, check the Zap history for those errors. - Stop after two. The API refuses a third message to someone who hasn't replied. Don't try to get around it with another number.
Lead nurture on iMessage without getting your number flagged covers follow-up cadence, and what happens if a number is flagged explains the stakes.
Launch checklist
- Consent text about texting is in the form, and you store each submission's time, form and disclaimer.
- The number's line group is set the way your route needs: Managed by AI Agent for the hosted agent, Managed by API for Zapier Send iMessage or GoHighLevel.
- The business context replaces the example, and you have texted the number from your own iPhone to test it.
- The first text names your business and the form, ends on a question, and has no link.
- Late-night leads wait until 8 am in their time zone.
- Failed sends become a call or email task.
- Daily lead volume fits your plan's new-contact limit.
Ready to try it? Get a number, then read the AI agent docs and the limits and compliance docs before the first lead arrives.
Frequently asked questions
Can I text everyone who fills out my lead form?
Only if the form told them you would text them and they agreed. Put consent language covering texts in the form itself and keep a record of who submitted it and when. A lead from a form without that language, a purchased list or a scraped number is not someone you should text. This is not legal advice.
What happens with leads who don't have an iPhone?
iMessage reaches Apple devices, so a lead who isn't on iMessage can't receive the text. SMS fallback is a limited pilot ZeroSettle must enable per account, so don't plan on it: send those leads to a call or an email instead. GET /api/imessage/availability checks whether a number is on iMessage without sending anything.
How many new leads can one number text a day?
On Pro, 5 new contacts a day per number. On Growth, 50 a day per number, and at most 3 in any 15 minutes. Only conversations the number starts count; people who text the number first are never limited. Past the limit the API answers 429 new_contact_limit with retry_after_s.
Can the first text include my booking link?
It can, but it won't work: until the lead replies or saves your number, an iPhone shows the link as plain text they can't tap. Ask a question first and send the link after they answer.
Do I need Zapier?
No. Zapier and GoHighLevel are the no-code routes. If your own code already receives leads, it can call POST /api/imessage/agent/start for the hosted agent, or POST /api/imessage/send to send your own first text, with the same bearer token.
What does it cost?
Pro is $49 a month for one dedicated number, with 5 new contacts a day and 500 free credits, once. Growth is $199 a month per number (upgrade in the console), with 50 new contacts a day per number, team members and 1,000 free credits, once; from a Growth link it is $599 a month for 3 numbers plus $199 per extra number. Enterprise is custom pricing through sales for high volume and compliance needs. Pro and Growth come with a 30-day money-back guarantee on the subscription. Credits pay only for the hosted agent's texts (one per text it sends) and videos; free credits never refill, and packs are 1,000 for $50 or 5,000 for $200 and never expire.
Sources
- ZeroSettle iMessage API docs: “Your iMessage number” (pricing), “Send a message” (SMS fallback, links in a first message), “AI agent” (Managed by AI Agent, triggers, credits), “AI agent in the console”, “Errors, limits, and compliance” and “CRM integrations” (GoHighLevel and LeadConnector, Zapier). Checked November 2, 2026.
- 47 CFR 64.1200, Delivery restrictions, Electronic Code of Federal Regulations (cited by ZeroSettle's compliance docs). Checked November 2, 2026.
- ZeroSettle iMessage API Terms of Service.