Skip to content
SourceLoop
Webhooks

How to use SourceLoop Incoming Webhooks

Send new leads into SourceLoop from any tool that can fire a webhook. One URL per conversion type (form, meeting, chat). Auto-detects email and phone from any payload shape.

On this page
  1. When to use an Incoming Webhook
  2. What SourceLoop captures from each webhook delivery
  3. Before you start
  4. Step 1: Generate the webhook URL
  5. Step 2: Wire the URL into your tool
  6. Step 3: Format the payload
  7. Step 4: Fire a test webhook
  8. Monitor and debug deliveries
  9. Where the leads show up
  10. What’s next

SourceLoop’s Incoming Webhooks are how you send leads into SourceLoop from a tool that doesn’t have a native integration. Any form builder, scheduling tool, chat tool, or custom app that can POST JSON to a URL when a submission happens can pipe its data straight into your Contacts Hub.

This is the path the semi-automated web form integrations use under the hood. It’s also what powers the Zendesk Chat capture flow, and it’s the recommended path for anything custom you’ve built that produces leads.

When to use an Incoming Webhook

You want an Incoming Webhook when:

  • The form / meeting / chat tool is hosted on a domain that isn’t yours, so the SourceLoop tracker can’t read the submit event from the browser
  • You’ve built a custom lead-capture flow (a backend API, an internal tool, a Slack command that creates a lead) and want it to land in SourceLoop
  • An existing tool has a webhook action but no native SourceLoop integration

You don’t need an Incoming Webhook when:

  • The form is embedded on a page that loads the SourceLoop tracker (automated capture handles it)
  • You’re using one of the native CRM, payment, or ad-platform integrations from Setup (those use their own dedicated paths)

What SourceLoop captures from each webhook delivery

Every incoming webhook produces one lead in your Contacts Hub with:

  • Email and / or phone auto-detected from the payload
  • Name, company, and any other custom fields you send (stored on the lead’s custom-data section)
  • Conversion type matching the endpoint (Web form, Meeting, or Chat)
  • First-touch and last-touch marketing attribution, stitched from the visitor’s pre-submit journey if the tracker is also installed
  • Receive timestamp and the raw payload for forensic debugging

Before you start

You’ll need:

  • A SourceLoop workspace (free trial)
  • Admin or Owner role in SourceLoop
  • A tool that can POST JSON to a URL when a submission happens
  • (Recommended) The SourceLoop tracking pixel installed on your site if visitors browse your site before the submission

Step 1: Generate the webhook URL

SourceLoop creates one webhook URL per conversion type so leads land in the right bucket in reports.

  1. Sign in to SourceLoop.
  2. Open Setup -> Incoming Webhooks in the left sidebar.
  3. Pick the conversion type that matches your tool:
    • Web form for form builders, lead-capture tools, surveys
    • Meeting for scheduling tools that don’t have a native integration
    • Chat for chat tools that fire webhooks (Zendesk Messaging, custom bots, etc.)
  4. Click Create on the matching card if no URL exists yet, or Copy to grab the URL.

The URL contains a secret token unique to your endpoint. Treat it like a private API key.

Step 2: Wire the URL into your tool

The exact steps depend on your tool. Most tools call this feature “Webhooks”, “HTTP requests”, “Outgoing connections”, or “Custom integrations”. The common shape:

  1. Open the integrations / webhooks section in your tool.
  2. Add a new webhook (or “HTTP request action” / “Outgoing webhook”).
  3. Paste the SourceLoop URL.
  4. Set the method to POST and the body type to JSON.
  5. Save.

If your tool offers signature verification, Authentication: None is correct, the secret is already inside the URL itself.

If your tool lets you choose which events trigger the webhook, pick the event that fires after the visitor has shared their email (form submitted, meeting confirmed, chat conversation ended, etc.). Triggering before email is collected will create empty leads that SourceLoop has to drop.

Step 3: Format the payload

You don’t need a specific payload shape. SourceLoop auto-detects the email and phone fields no matter how your tool nests them, so most tools’ default JSON body works out of the box.

If you control the payload (writing custom code, using a tool with a JSON template), the simplest minimal body is:

{
  "email": "[email protected]",
  "name": "Jane Doe",
  "phone": "+1-555-0100",
  "company": "Acme Co.",
  "chat_id": "your-unique-submission-id"
}

Field-level notes:

  • email — preferred contact identifier; deduplicated within the workspace
  • phone — accepted as a fallback when no email is present
  • name, company — populated on the contact in the Contacts Hub
  • chat_id — a unique identifier for this submission. Pass it if your tool may fire the webhook more than once (retries, late-email backstops, etc.) so SourceLoop dedups by it. The Zendesk integration uses zendesk:{ticket.id}.
  • Any other fields — stored as custom data on the lead, viewable in the lead detail drawer and exportable to CSV

Common form-builder shapes (Typeform’s form_response.answers[] array, JotForm’s rawRequest, Tally’s data.fields[]) are recognised automatically; no transformation needed.

Step 4: Fire a test webhook

The cleanest way to test: trigger your tool the way a real visitor would.

  1. Open your tool’s form / scheduler / chat in an incognito window.
  2. Append ?utm_source=test&utm_medium=verify&utm_campaign=webhook-check to the URL if your tool runs on your own domain.
  3. Submit / book / chat with an email you can access.
  4. Within seconds, the lead should appear at the top of the Contacts Hub at app.sourceloop.ai/contacts.

If you’d rather hit the URL directly with curl while testing:

curl -X POST 'https://your-webhook-url-from-setup' \
  -H 'Content-Type: application/json' \
  -d '{"email":"[email protected]","name":"Webhook Test"}'

A successful delivery returns HTTP 200. Any other status means the payload was rejected; check the next section.

Monitor and debug deliveries

Setup -> Incoming Webhooks shows the Recent Webhook Logs table at the bottom, every delivery with:

  • Type — which endpoint (web_form / meeting / chat) received it
  • Status — HTTP response code
  • Time — when SourceLoop received the request
  • Error — short message if the payload was rejected

The most common errors:

HTTP codeWhat it means
200Delivered and processed. The lead is in your Contacts Hub.
400The payload was JSON but neither an email nor phone was found. Either your tool isn’t passing those fields, or it’s nesting them in a shape SourceLoop hasn’t recognised. Paste the raw payload into the All Events tab to see what landed.
401The URL is missing the secret token or the secret has been rotated. Recopy the URL from Setup.
404Wrong URL entirely, or the endpoint has been deleted.
429Rate limit hit. Slow the firing rate or contact [email protected] to lift the limit.
5xxSourceLoop processing failed. Rare; the tool’s retry will usually succeed.

Where the leads show up

Same as every other capture path:

  • Contacts Hub — one row per webhook delivery, with auto-detected contact details, custom data, and full marketing attribution. See Contacts (Leads) table.
  • Traffic dashboard — webhook leads roll into the same channel / source / campaign breakdown as every other conversion type. See Traffic dashboard.
  • Funnels — build a funnel ending in the webhook’s conversion type to find which campaigns produce the most webhook-captured leads. See Conversion funnels.

What’s next

Frequently asked questions

  1. Which tools can use Incoming Webhooks?

    Any tool that can POST JSON to a URL when a form submission, meeting booking, or chat conversation happens. Examples that ship with native SourceLoop guides include Zendesk Chat (webhook + trigger pattern), Typeform, JotForm, Fillout, Formstack, and 123FormBuilder. For anything else, copy the webhook URL into your tool's webhook or HTTP request action and SourceLoop will accept it.

  2. Do I need to install the tracking pixel as well?

    For full marketing source attribution, yes. The tracker on your site records the visitor's session, UTMs, and pre-conversion journey; the webhook delivers the submission with the visitor's anonymous identifier so SourceLoop can stitch the two together server-side. Without the tracker, webhook leads still land in your Contacts Hub, but their source shows as Direct because there's no visitor journey to attach.

  3. What format does the webhook payload need to be in?

    JSON, anything else is rejected. SourceLoop auto-detects the email and phone number anywhere in the payload (top level, nested objects, arrays of name/value pairs, common form-builder shapes), so you don't need a specific structure. As long as one identifiable contact field (email or phone) is present, the lead is created.

  4. How are email addresses detected in the payload?

    SourceLoop checks known field names first (email, e-mail, email_address, contact_email, user_email, work_email, business_email and their snake_case / camelCase variants), then falls back to any string that matches the email format. The first matched value wins.

  5. How do I prevent duplicate leads if my tool fires the webhook multiple times?

    Pass a stable chat_id (or any unique identifier you have for the submission) in the JSON payload. SourceLoop dedups by that identifier within the conversion's website. The Zendesk chat integration uses the literal string zendesk plus the Zendesk ticket id as its chat_id, which is why hourly catch-up automations are safe to re-fire.

  6. Is the webhook URL secret? What happens if it leaks?

    The URL contains a secret token unique to your endpoint. Treat it like an API key, don't post it publicly. If it leaks, delete and recreate the endpoint at Setup -> Incoming Webhooks; previously captured leads stay in your Contacts Hub.

  7. Are there rate limits?

    Yes. The endpoint accepts up to several requests per second per workspace. For backfilling historical data, contact [email protected] so we can lift the limit for the migration window.

  8. How do I debug a failing webhook?

    Open Setup -> Incoming Webhooks and scroll to Recent Webhook Logs. Every delivery is logged with the HTTP status code, timestamp, and any error message. 4xx errors mean the payload was rejected (usually no email/phone found); 5xx means SourceLoop's processing failed (rare, contact support if persistent).

Track every conversion to its true source

Capture and send full attribution data from every signup, lead, booking, and sale to your CRM and ad platforms, so you know exactly what's driving revenue.

Without SourceLoop

Untagged

Kayden Floyd

kayden@abc.com

  • SourceUnknown
  • MediumUnknown
  • CampaignUnknown
  • Landing pageUnknown
Journey
No touchpoints captured

With SourceLoop

Auto-tagged

Kayden Floyd

kayden@abc.com · Acme Co.

  • Channel Paid Social
  • CampaignFree_demo
  • Landing page/pricing
Journey
Synced to HubSpot Google Ads Meta