# How to track lead source in CallRail

Turn every CallRail phone call into an attributed lead. Connect once with an API key and each call lands in SourceLoop with the source, campaign, UTMs, and the caller's full pre-call journey.

Source: https://sourceloop.ai/help/track-lead-source-in-callrail/
Updated: 2026-05-31

---

When a phone call closes a deal, the obvious question is the one most teams can't answer: which ad, search, or page actually made the phone ring? CallRail tells you a call happened. It rarely tells you which marketing channel earned it.

SourceLoop fills that gap. Connect CallRail once with an API key, and every call to a tracking number arrives in SourceLoop as a lead with its first-touch and last-touch source, the UTMs, the landing page, and the caller's entire browsing path before they dialed. The same attribution your form and chat conversions already carry, now on your phone calls.

Four steps, about five minutes. Works on any paid CallRail plan.

## What SourceLoop captures from CallRail

For every call to a CallRail tracking number, SourceLoop records a lead with **Type: Call** that carries:

- **First-touch source** of the visitor (e.g. `google / cpc`, `bing / organic`)
- **Last-touch source** of the session that led to the call
- **UTM parameters** from the landing URL (source, medium, campaign, content, term)
- **The full pre-call journey**: every page viewed and every ad clicked before the phone rang, when the caller browsed your site first
- **Caller details**: phone number, name, and city or state when CallRail has them
- **Call facts**: duration, direction, and whether it was answered
- **Recording and transcription links**, when those are enabled on your CallRail account
- **Tags and qualification** you apply to the call inside CallRail

## Before you start

You'll need:

- A **SourceLoop workspace** ([free trial](https://app.sourceloop.ai/sign-up))
- The **SourceLoop tracker installed** on the pages where your tracked phone numbers appear, so there's a browsing session to attach each call to
- A **CallRail account** with at least one tracking number live on your site
- Permission to **create an API key in CallRail** (an admin role, typically)
- **Admin** or **Owner** role in SourceLoop

## Step 1: Install the SourceLoop tracking script

Attribution for a call is built from the web session that came before it, so the tracker has to be live on the pages where your CallRail numbers show up. If you've already installed it for form or chat tracking, you're set, skip to Step 2.

If not, add the SourceLoop snippet to every page of your site (the global header is the simplest place). Full walkthrough: [Install the SourceLoop tracking pixel](/help/install-the-tracking-pixel/).

> **Why the tracker matters for calls**
> CallRail swaps in a unique tracking number per visitor and remembers the session behind it. The SourceLoop tracker is what gives that session its source, campaign, and journey in the first place. No tracker on the page means the call still records, but with nothing to attribute it to.

## Step 2: Create an API key in CallRail

1. Sign in to CallRail and click the **Settings** gear in the top right.
2. Open **API Keys** in the left sidebar.
3. Click **Create API Key**, name it `SourceLoop`, and copy the token.

CallRail shows the token only once. If you navigate away before copying it, just create a fresh key.

> **Create the key from an admin user**
> A key generated by a user with no account permissions can't see any companies, and the connection will fail with "API key has no CallRail accounts visible to it." If you hit that, have a CallRail admin create the key instead.

## Step 3: Connect CallRail in SourceLoop

1. Sign in to [SourceLoop](https://app.sourceloop.ai/).
2. Open **Setup -> Phone** in the left sidebar.
3. Find the **CallRail** card and click **Connect**.
4. Paste your API token into the **API key** field.
5. Leave **Account ID** blank unless your key can see more than one CallRail account. If it can, paste the specific account ID you want (it's in your CallRail dashboard URL, after `account_id=`).
6. Click **Connect**.

That's the whole setup. SourceLoop validates the key, picks up your account, and registers call delivery for every active company on it. Within a few seconds the card flips to **Connected** with a green check. You don't need to open CallRail's integrations page or paste any URL yourself, SourceLoop wires that up for you.

> **Optional: forward the visitor ID for a perfect match**
> Out of the box, SourceLoop matches each call to a web session with high accuracy using the analytics identifier CallRail already captures. For a deterministic one-to-one match, tell CallRail to also carry SourceLoop's visitor ID. Where CallRail's number-swap script runs on your site, change `CallTrk.swap();` to:
> 
>   ```js
>   CallTrk.swap({
>     custom: { sl_aid: 'sl_aid' },
>   });
>   ```
> 
>   Now every call from a visitor with a SourceLoop session is matched exactly, no guesswork. This is optional, most accounts are fine without it.

## Step 4: Verify it's working

Open your site in an **incognito window**, append `?utm_source=test&utm_medium=verify&utm_campaign=callrail-check` to the URL, then call the tracking number shown on the page and let the call connect for a few seconds.

Within moments of hanging up, the call appears at the top of your **Contacts Hub** in SourceLoop with the three test UTM values, the landing page, the call duration, and the full session timeline that led up to it.

> **Call shows up as Direct after calling from your own site?**
> Usually the number didn't have a moment to swap before you dialed, for example you opened the page on mobile and tapped the number instantly. Give the page a second to load before calling, or set up the optional visitor-ID forwarding in Step 3 for a match that doesn't depend on timing.

## Where to see CallRail calls in SourceLoop

### Contacts Hub

Every captured call becomes a contact row at [app.sourceloop.ai/contacts](https://app.sourceloop.ai/contacts). Open one to see the caller's complete journey before they picked up the phone: every page, every ad, every session. The context your reps wish they'd had on the call, and exactly what you need for the follow-up.

![SourceLoop Contacts Hub showing a CallRail phone call lead with the caller's full pre-call journey timeline](/help/screenshots/sourceloop-lead-journey-demo.webp)

### Attribution dashboard

For the channel-level picture, [app.sourceloop.ai/dashboards/traffic](https://app.sourceloop.ai/dashboards/traffic) groups calls by source, medium, and campaign right alongside your form and chat conversions, so you can finally see which channels drive the phone to ring, not just which fill out forms.

![SourceLoop attribution dashboard with CallRail phone calls grouped by source and campaign](/help/screenshots/sourceloop-attribution-dashboard.webp)

### Funnel reports

Build a funnel at [app.sourceloop.ai/funnels](https://app.sourceloop.ai/funnels/) that ends in a phone call. Slice by source, landing page, or device to find the paths that most reliably turn a visit into a call.

![SourceLoop funnel report ending in a CallRail phone call conversion step](/help/screenshots/sourceloop-funnel.png)

For paid acquisition, forward your qualified calls back to **Google Ads, Meta, and LinkedIn as offline conversions** so the bidding algorithms learn from real phone calls instead of raw clicks. [Connect your Google Ads account](/help/connect-google-ads/) covers the wiring.

Using a different call tracking provider? SourceLoop also supports [CallTrackingMetrics](/help/track-lead-source-in-calltrackingmetrics/) and [Invoca](/help/track-lead-source-in-invoca/).

## Frequently Asked Questions

### Do I need a paid CallRail plan?

You need a plan that lets you generate an API key, which is every paid CallRail plan. API access is included at no extra cost, and SourceLoop does not charge for the connection itself. Each captured call counts as one lead toward your SourceLoop quota, the same as a form or chat conversion.

### Do I have to set up webhooks inside CallRail myself?

No. That is the part SourceLoop handles for you. The moment you paste your API key, SourceLoop registers the call delivery for every active company on the account. You never have to open CallRail's integrations page or copy a URL by hand.

### What if my CallRail account has several companies?

SourceLoop subscribes to all of them automatically when you connect. Calls from any company on the account flow into the same SourceLoop workspace, each tagged with the number that was dialed.

### A customer dialed a tracking number off a billboard, not my website. Does that still get captured?

Yes, the call is still recorded as a lead. Because there was no web session behind it, there is no journey to attach, so it shows up as Direct in your reports. Calls that started from a tracked page on your site carry full attribution.

### How quickly do calls appear in SourceLoop?

Within seconds of the call ending. There is no batch import or polling delay, so a call that wraps up now is in your Contacts Hub almost immediately.

### What happens when I tag or qualify a call later inside CallRail?

That update flows through to the same lead in SourceLoop. Tagging a call or marking it qualified updates the existing record rather than creating a duplicate, so your reports stay clean.

### Will connecting SourceLoop change anything in my CallRail setup?

No. Your number pools, routing, recordings, and existing integrations keep working exactly as they did. SourceLoop only reads completed-call data, so nothing about how CallRail handles live calls changes.

### How do I disconnect CallRail?

Open Setup then Phone in SourceLoop and click Disconnect on the CallRail card. Call delivery to SourceLoop stops immediately and previously captured leads stay in your Contacts Hub. The webhook entry remains on the CallRail side until you remove it under Settings then Integrations, where you can leave it idle or delete it for tidiness.
