Integrations
Auto-call new leads with a webhook
Give ExoCall one URL and paste it into your website form, your Shopify or WooCommerce store, or your Google Ads lead form. Every new lead or order is added to a campaign and called automatically by your AI agent — no API key, no code, and no Zapier subscription.
What you need first
Set it up
- 1
Create the campaign that will receive the leads
Go to Campaigns → New Campaign, turn on Always-on campaign, and leave the leads box empty — an always-on campaign is allowed to start with none. Write the call script for these calls, set your calling hours, then create it and press Start.
- 2
Copy the webhook URL
On that campaign, click Connect → Create webhook URL, then copy it. It looks like
https://app.exocall.io/api/hooks/lead/9f3c1e8a… - 3
Paste it into whatever creates your leads
See the per-platform steps below. Anything that can send a POST to a URL will work.
- 4
Send one real test
Submit your own form, or place a test order, using a number you can answer. The Connect panel shows the count received, when the last lead arrived, and the last payload — so if a field was not picked up you can see exactly what was sent.
Connecting each platform
Shopify — call every COD order to confirm it
In Shopify go to Settings → Notifications → Webhooks, click Create webhook, choose the Order creation event, format JSON, and paste your URL. Shopify sends every new order, and each one becomes a confirmation call. This is the single biggest use of this feature in India: unconfirmed COD orders are the main cause of returns, and an AI call within minutes of checkout catches the bad ones before you ship.
WooCommerce
WooCommerce → Settings → Advanced → Webhooks → Add webhook. Set Topic to Order created, paste the URL as the Delivery URL, and set Status to Active.
Google Ads lead forms
In your lead form asset, open Lead delivery option → Webhookand paste the URL. Google nests the values in an array, so set the field mapping described below. Use Google's Send test data button — the test payload appears in your Connect panel.
Website and form builders
WordPress (Contact Form 7, WPForms, Elementor), Webflow, Framer, Tally and Typeform all have a webhook or POST-to-URL action. Paste the URL there. Both JSON and normal form submissions are accepted.
Your own code
curl -X POST https://app.exocall.io/api/hooks/lead/YOUR_TOKEN \
-H "Content-Type: application/json" \
-d '{"name":"Ritu Sharma","phone":"9876543210","email":"ritu@example.com"}'Field mapping
ExoCall looks for the phone number in the places these tools normally put it — including phone, mobile, customer.phone and shipping_address.phone, since Shopify often leaves the top-level field empty and fills only the address. Most integrations need no mapping at all.
When a tool puts it somewhere unusual, open Field mapping in the Connect panel and give the path. Use dots for nested values and numbers for list positions — for Google Ads lead forms the phone is usually at user_column_data.1.string_value. The last payload received is shown right underneath, so you can read the real structure instead of guessing.
A mapping you set is used exactly as written
customer.phone and that field is empty, the delivery is rejected rather than falling back to some other number in the payload. Calling a different person than the one you mapped would be worse than a visible error.Calling hours matter here
Orders and ad leads arrive at all hours. The campaign's calling hours are what stop a 2am order becoming a 2am phone call — the lead simply waits in the queue until the window reopens. Set them on the campaign before you connect anything.
If leads are not arriving
The Connect panel shows an error›
The message names the cause — usually a phone field that was missing, empty or not a valid Indian mobile. The payload that arrived is shown underneath so you can map the right field.
Nothing arrives at all›
Check the sending tool actually fired: Shopify and WooCommerce both show recent deliveries and their responses. Confirm the URL was pasted whole, including the long token at the end.
Leads arrive but nobody is called›
Check the campaign is running, not paused, and that the current time is inside its calling hours. Also check Billing — outbound calling stops when the included minutes for the month are used up.
The panel says the campaign cannot accept leads›
The campaign is not always-on. Open Edit on it, turn on Always-on campaign, and save.
FAQ
Do I need Zapier or Pabbly Connect for this?›
No. The webhook URL is pasted directly into your website form, store, or ad platform. Those tools post to it themselves, so there is no middleware to pay for. Zapier or Pabbly are only useful for a source that cannot post to a URL at all.
Is the URL secret?›
Yes — treat it like a password. The long random token in the URL is what authorises the request, because Shopify, WooCommerce, Google Ads and most form builders cannot send an Authorization header. Anyone holding the URL can add leads to that one campaign and nothing else. If it leaks, delete the webhook and create a new one; the old URL stops working immediately.
Why must the campaign be always-on?›
An ordinary campaign is a fixed batch: its lead list is locked the moment you press Start. A webhook pointed at one would work while the campaign is a draft and then silently stop. An always-on campaign is a standing queue that accepts leads at any time and never auto-completes, so it keeps dialling new arrivals.
When exactly does the customer get called?›
As soon as the campaign worker reaches the lead, within seconds — provided the campaign is running and the current time is inside its calling hours. Outside those hours the lead waits in the queue and is dialled when the window reopens. Set calling hours on the campaign so an order placed at 2am is not answered by a phone call at 2am.
What stops the same person being called twice?›
A number already waiting or being dialled in that campaign is not added again, so webhook retries and double submissions are ignored. Someone who ordered last month and whose call already finished will be added again — that is a new order, not a duplicate.
What happens if the phone number is missing or invalid?›
The delivery is rejected and the reason is shown in the Connect panel, along with the exact payload that arrived. Nothing is queued. Numbers must be Indian mobiles: ten digits starting 6, 7, 8 or 9. Prefixes like +91, 0091 and a leading 0 are accepted and stripped.
Outbound Campaigns →
Calling hours, concurrency, retries and how leads are dialled.
API & Webhooks →
The full API when you want to trigger calls from your own backend.
Call Logs & AI Insights →
What the AI recorded on each call and what to do next.
Still stuck? Email info@exocall.io.