Ad platforms, WhatsApp, API & webhooks

Every lead, from every channel, in seconds.

Connect Meta, Google, TikTok, LinkedIn, your website and WhatsApp once. Subul CRM verifies each lead, removes duplicates, records the campaign and puts it in front of the right agent — automatically.

Real-time intake with signature checks and automatic retries Campaign, ad set and ad saved on every lead Open REST API and webhooks for everything else
Live intakeSample data
Meta Lead AdsGoogle AdsTikTok
Website forms leads today WhatsApp
LinkedInCalendarsREST API
Omar KhaledMeta Lead Ads · Spring LaunchAssigned to Nour A. in 4 s now
Key capabilities

Lead intake you never have to babysit

From the moment someone submits a form to the moment an agent calls — every step is automatic, checked and logged.

Real-time intake Leads arrive in seconds via native connectors and webhooks — no CSV downloads from ad managers.
Duplicate protection Phone and email matching merges repeat submissions into the existing contact, with full history.
Campaign attribution Campaign, ad set, ad, form and UTM parameters are saved on every lead, ready for ROI reports.
Field mapping Map each form question to a standard or custom field, with phone normalisation and value mapping.
Reliable delivery Signature verification, automatic retries and daily reconciliation so no lead slips through.
Open API & webhooks Create and update records via REST and subscribe to events in your own systems.
Channels

Connect the tools your team already uses

Ad platforms, messaging, calendars, telephony, spreadsheets and your own code.

All integrations
Third-party names are trademarks of their owners and are shown here for identification only. Availability per plan: [PLACEHOLDER].
Intake pipeline

What happens in the 4 seconds after a form is submitted

Each lead passes the same six checks before an agent sees it. Watch a sample lead go through.

Sample leadSample data
·
EVENT LOG
NORMALISED PAYLOAD
Every step is logged with a timestamp, so you can trace any lead back to the exact request.
Campaign attribution

Know which ads bring revenue — not just leads

Because the campaign is captured at intake, every deal can be traced back to the campaign, ad set and ad that started it. Cost per lead and revenue sit side by side.

Native ad IDs and UTM parameters on every lead Revenue attributed to first touch, last touch or both Spot expensive ad sets before the budget is gone
See the attribution report
Campaign performance · last 30 daysSample data
CAMPAIGNSOURCELEADSQUALIFIEDWONCOST / LEADREVENUE
Spring LaunchMeta57424121118 EGP2.9 M
Villas — SearchGoogle30015114164 EGP1.8 M
Riverside WhiteningTikTok20062696 EGP0.7 M
B2B Demo WeekLinkedIn74395410 EGP0.9 M
CAPTURED AUTOMATICALLY
campaign_idadset_idad_idform_idutm_sourceutm_campaigngclid
Field mapping

Every form question lands in the right field

Map ad-form questions to standard or custom fields once. Subul CRM normalises phone numbers, translates answer values and flags anything it can’t map.

Works with your custom fields and entities Phone numbers normalised to international format Answer values mapped to your dropdown options
Field mappingMeta form: New Cairo Apartments — v4Sample data
FORM FIELDSUBUL CRM FIELD
full_name Full name Required
phone_number Phone Normalise to +20Required
what_is_your_budget? Budget (EGP) Custom fieldNumber
preferred_area Interest area Custom fieldMap 4 answers
when_do_you_plan_to_buy? Purchase timeline Custom fieldMap 3 answers
All required fields mapped Send a test lead
Reliability

Built so that no lead goes missing

Ad platforms occasionally retry, time out or deliver late. Subul CRM is designed for it — and shows you the proof.

Signature verificationEvery webhook is checked with the platform’s signature or secret before it is accepted.
Automatic retriesFailed deliveries retry with backoff; outgoing webhooks retry up to 5 times.
Daily reconciliationSubul CRM compares platform lead counts with what arrived and back-fills anything missed.
Delivery logSample data
Reconciliation · yesterday
Reported by Meta 214Received 214Back-filled 0
10:42:07 evt_31Hx Lead from Meta form v4 Delivered
10:39:51 evt_31Gq Lead from Google Ads Retried ×2 · delivered
10:31:12 evt_31Fa Duplicate submission Merged
10:18:40 evt_31Dz Lead from TikTok Delivered
02:00:05 rec_0926 Late lead (platform delay) Recovered by reconciliation
For developers

An API your engineers will actually enjoy

REST endpoints for leads, contacts, deals, activities and custom entities, plus signed webhooks for every important event.

Scoped access tokens per integration Signed webhooks (HMAC SHA-256) with retries Idempotency keys and clear rate limits Sandbox workspace for testing
WEBHOOK EVENTS
lead.createdlead.assignedlead.mergedfollowup.loggeddeal.stage_changeddeal.won
curl -X POST https://app.subulagency.com/api/v1/leads \
  -H "Authorization: Bearer $WASLA_TOKEN" \
  -H "Idempotency-Key: 6f1c2e7a-lead-0412" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Omar Khaled",
    "phone": "+201002344567",
    "source": "website",
    "campaign": "spring-launch",
    "fields": { "budget_egp": 4500000, "area": "new-cairo" }
  }'

# 201 Created
# { "id": "lead_8KQ2", "assigned_to": "usr_nour", "duplicate": false }
POST https://your-app.example.com/hooks/wasla
X-Wasla-Event: lead.assigned
X-Wasla-Signature: t=1760090523,v1=5d2c…a91f

{
  "id": "evt_31Hx",
  "type": "lead.assigned",
  "created_at": "2026-10-10T10:42:07Z",
  "data": {
    "lead_id": "lead_8KQ2",
    "source": "meta_lead_ads",
    "campaign": { "id": "238491", "name": "Spring Launch" },
    "adset_id": "238492",
    "ad_id": "238497",
    "assigned_to": { "id": "usr_nour", "name": "Nour A." }
  }
}
import crypto from "node:crypto";

export function verify(rawBody, header, secret) {
  const parts = Object.fromEntries(
    header.split(",").map((p) => p.split("="))
  );
  const expected = crypto
    .createHmac("sha256", secret)
    .update(parts.t + "." + rawBody)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(parts.v1)
  );
}
Illustrative sample — endpoints and fields are placeholders until the API reference is published.
How it works

Live in an afternoon

No developer needed for native connectors.

01 Connect the account Sign in to Meta, Google, TikTok or LinkedIn and pick the ad accounts.
02 Choose forms & map fields Select the forms to sync and map each question to a field.
03 Set assignment rules Route by source, campaign, language or area — or round-robin.
04 Go live & monitor Send a test lead, then watch the delivery log and reconciliation.
Use cases

One intake, many ways to grow

Teams running paid ads across several platforms see the biggest difference.

Real estate developer
Meta + TikTok launch campaigns Hundreds of leads a day routed to the right project team within seconds. First call in under 5 minutes
Clinic group
Google Ads + WhatsApp Form leads and WhatsApp chats in one list, with no-show follow-ups. Booked appointments up 25%
Marketing agency
Many client ad accounts Each client in its own pipeline, with campaign ROI they can see. Reporting time down 60%
B2B company
LinkedIn + website demo form Company and job title captured, demo requests routed by region. Demo-to-deal rate up 18%
Expected outcomes based on typical results — not a guarantee.
FAQ

Questions about integrations

Need a connector we don’t list? Ask us — or build it with the API.

Visit the help center

Connect your first ad account today

Start a free trial and send a test lead in minutes — or book a demo and we will set up your channels with you.