CallRail

Connect CallRail & track inbound calls

FunnelTrack receives CallRail's Post-Call webhook the moment a tracked call ends and fires two distinct events — New Caller and Returning Caller— based on CallRail's first_callflag. Attribution matches the call to the visitor's FunnelTrack pixel session using CallRail's own calltrk_session_idcookie, and falls back to a caller phone + IP match (and CallRail's last-touch data) when there's no pixel session — for example on a direct dial.

What you'll need
  • •A CallRail account with Admin access to Settings → Integrations
  • •The FunnelTrack pixel deployed on all site pages
  • •The CallRail JavaScript snippet deployed on all site pages
  • •At least one connected destination (Meta CAPI, Google Ads, GA4, etc.)
  • •About 10 minutes

Setup

Deploy the FunnelTrack pixel and the CallRail JavaScript snippet, connect CallRail in FunnelTrack, add a Post-Call webhook in CallRail pointing at the URL we generate, include the caller IP, then configure conversions and verify.

1

Add the FunnelTrack pixel to your site

From the Pixel section of FunnelTrack, copy your pixel snippet and deploy it on every page — especially the pages where the CallRail swap script runs and where your click-to-call buttons live.

Why this matters for attribution
FunnelTrack stitches calls to pixel sessions using CallRail's own calltrk_session_idcookie. Our pixel reads that cookie on the visitor's page and /api/collectstamps it on the session, so when CallRail delivers the call (with the same session ID in the payload) we match it 1:1 to the pixel session — and ship every ad click ID from that session to your destinations. If the pixel isn't on the page when a visitor browses, the call still comes through, but we fall back to a caller phone + IP match and CallRail's own source / campaign / medium data.
2

Deploy the CallRail JavaScript snippet

CallRail needs its own tracking snippet (the Dynamic Number Insertion swap script) on your site so it can attach a calltrk_session_idto each visitor — the same ID FunnelTrack's pixel reads. In CallRail, open Settings → Integrations → JavaScript Snippet and copy the snippet. Paste it immediately before the closing </body> tag on every page of your site — every landing page and every page that shows a phone number.

CallRail JavaScript Snippet (Dynamic Number Insertion swap.js) with a Copy to clipboard button
CallRail → Settings → Integrations → JavaScript Snippet — deploy on all site pages, before </body>.
3

Connect CallRail in FunnelTrack

In FunnelTrack, open Integrations → Sources → CallRail and click Connect CallRail. FunnelTrack generates a workspace-scoped Post-Call webhook URL that looks like this:

Your CallRail Post-Call webhook URL (copy the exact one from your workspace)
https://app.funneltrack.com/api/webhook/callrail?key=YOUR_WORKSPACE_KEY

Copy the exact URL shown in your workspace — you'll paste it into CallRail in the next step.

FunnelTrack CallRail integration page showing the generated Post-Call Webhook URL with a Copy button
FunnelTrack generates your workspace's Post-Call Webhook URL — copy it here.
Treat this URL like a secret
The webhook URL contains your workspace's API key. Don't share it in public docs, screenshots, or Slack channels outside your team — anyone with the URL can post call data to your workspace.
4

Add a Post-Call webhook integration in CallRail

In CallRail, go to Settings → Integrations → Library, search for Webhooks, and open the Webhooks integration.

CallRail Integrations library with Webhooks found in the catalog
Settings → Integrations → Library → search Webhooks and open it.

Under Post-Call, paste the FunnelTrack webhook URL you copied in Step 3 as the endpoint / Post-Call Webhook URL, then save and activatethe integration. FunnelTrack fires conversions after the call ends, so it uses the completed-call payload (duration, disposition, transcription, value, and CallRail's session_uuid). Once it's live, CallRail posts every completed call to that URL — new callers, returning callers, missed calls, everything.

Pasting the FunnelTrack webhook URL in CallRail's Post-Call webhook field
Paste your FunnelTrack Post-Call Webhook URL, then save and activate.
5

Include the caller IP in the webhook payload

Enable the caller IP field on the webhook payload. When a call arrives with no calltrk_session_idmatch (a direct dial, say), FunnelTrack uses the caller's IP together with a hash of their phone number as a last-resort match against the visitor's session — so including IP meaningfully improves recovery on calls that would otherwise be unattributed.

Enabling the caller IP field in the CallRail webhook payload
Include the caller IP so the phone + IP fallback can match direct dials.
6

Configure conversions

As soon as you connect the source, FunnelTrack seeds event cards in your workspace:

  • •New Caller — fires whenever CallRail sets first_call: true. This is your primary lead conversion for phone-driven acquisition.
  • •Returning Caller — fires whenever CallRail marks the call as a repeat ring. Useful for retention audiences or excluding repeat calls from lead cost calculations.

Open any connected destination's routing page (e.g. CallRail → Meta Conversions API), toggle on the cards you want, and pick the destination event for each — Meta's Lead, a Google Ads conversion action, and so on — then save.

FunnelTrack Event Routing for CallRail to Meta Conversions API with New Caller enabled and Meta Event set to Lead
CallRail → Meta: enable a card and choose the destination event (Lead).

For platforms that need a conversion identifier (like Google Ads), fill in the destination event name and Conversion Action ID on the card, then save.

FunnelTrack Event Routing for CallRail to Google Ads with New Caller enabled, event name and Conversion Action ID filled in
CallRail → Google Ads: set the event name + Conversion Action ID on each card.
All Calls, then New vs Returning
Every completed call comes into FunnelTrack as a single inbound event — shown in the logs as Inbound Call Completed. From that payload FunnelTrack determines whether it's a new or returning caller (via CallRail's first_call flag) and fires the matching card, so you route each outcome to the right conversion.
7

Verify in your logs

Place a real inbound call to your CallRail tracked number, then open the Event Delivery Log and filter the source to CallRail. Within a few seconds you should see an IN row tagged Inbound Call Completed (received), plus an OUT row per destination showing the dispatched conversion (e.g. Meta Lead) marked delivered.

FunnelTrack Event Delivery Log filtered to CallRail showing an inbound Inbound Call Completed row and outbound delivered rows to Meta, AdRoll, and Google Ads
Event Delivery Log — inbound 'Inbound Call Completed' plus outbound delivered rows per destination.

Notes & best practices

Details worth knowing before you scale this to every tracked number in your account.

  • •Post-Call fires once per call. CallRail waits for the call to end before posting, so you get the full payload — duration, disposition, voicemail flag, transcription, value — in a single delivery.
  • •New vs Returning is decided by CallRail, not FunnelTrack. We route the trigger based on the first_call field on the payload. If CallRail marks it as first, we fire callrail_new_caller; otherwise callrail_returning_caller. Don't deduplicate these upstream — CallRail already does that for us.
  • •Attribution: FunnelTrack first, CallRail as fallback. When the call carries a matching calltrk_session_id, we look up the pixel session and use its ft_* / utm_*/ click IDs. Only when that lookup fails do we fall back to a phone + IP match and then CallRail's own milestones.last_touchblock. You'll see both stamped on the event for debugging.
  • •Call value → conversion revenue. If you set a call value in CallRail (either manually or via lead scoring rules), FunnelTrack reads the numeric value field and stamps it on the event as revenue. Destinations that accept a value (Meta CAPI, Google Ads offline conversions, TikTok Events API) will receive it automatically.
  • •Missed calls / voicemails still fire.Any completed call — answered, missed, voicemail, abandoned — fires a Post-Call webhook. If you don't want those events firing to ad platforms, use FunnelTrack's Conditions on the event card to filter by answered, duration, or voicemail.

Events we support

The trigger keys CallRail sends to FunnelTrack, and the event cards you can enable.

  • •callrail_new_caller — fired when the Post-Call payload has first_call: true (or total_calls === 1 / prior_calls === 0 on older payloads).
  • •callrail_returning_caller — fired for every other call from a caller CallRail has seen before.
Supported event categories
  • •All Calls — the workspace-wide catch-all (callrail_all_calls). Fires on every completed call regardless of new vs returning. Useful for a CRM sync that should capture everything.
  • •New Callers — fires only on first-time callers. Your primary lead conversion for phone-driven acquisition.
  • •Returning Caller — fires on repeat callers. Good for retention audiences or excluding repeat rings from lead-cost math.
Form tracking isn't supported for CallRail
FunnelTrack tracks calls from CallRail — not CallRail Form submissions. If you need form conversions tracked, connect the form platform directly (Gravity Forms, Elementor, Jotform, etc.).

FAQs

Do I need CallRail's Pro plan or higher?
Post-Call webhooks are available on CallRail's Call Tracking plans and above. If Webhooks doesn't appear under Settings → Integrations, check your CallRail plan.
How is 'first_call' decided?
CallRail marks a caller as first-time based on the caller's phone number — if they've never dialed any tracked number in your CallRail account before, first_call is true. We use CallRail's flag directly rather than computing it ourselves.
What if the caller dials directly, with no web visit?
Direct dials with no browsing session won't have a calltrk_session_idto match, so we can't attach a pixel session. FunnelTrack still fires the event and matches on the caller's IP + phone hash, then falls back to CallRail's own last-touch attribution. Including the caller IP in the webhook payload (Step 5) is what gives these calls the best chance of a confident match.
Can I filter out short calls or voicemails?
Yes — on the event card in FunnelTrack, open Conditions and gate the dispatch on duration > 60 or answered === true. The event still logs on the inbound side; conditions decide what actually dispatches to ad destinations.
Where do I see the raw payload?
Every inbound row in the Usage Log carries the exact CallRail payload we received. Expand the row to inspect session_uuid, customer_phone_number, duration, milestones.last_touch, and every field CallRail sent.

Ready to set it up?

Jump into your FunnelTrack workspace and wire up CallRail in about ten minutes.

Configure your CallRail integration →

Need a hand?

If anything in this guide didn't match what you're seeing in CallRail or FunnelTrack, open a support ticket in your dashboard and we'll get you sorted.