---
title: CallRail Setup for Ad-to-Move-In Attribution
type: article
created: '2026-04-05'
updated: '2026-04-05'
source_docs:
- raw/2025-12-02-weekly-call-w-sebastian-105605382.md
tags:
- attribution
- callrail
- lead-generation
- google-ads
- crm
- dns
- utm-parameters
layer: 2
client_source: null
industry_context: null
transferable: true
---

# CallRail Setup for Ad-to-Move-In Attribution

## Overview

When clients run paid ads and want to know which ads are actually driving move-ins (or any high-value conversion), a simple conversion pixel isn't enough. The gap appears the moment a prospect picks up their phone and dials — that call is invisible unless you've implemented **dynamic number insertion (DNI)** via a tool like CallRail.

This guide covers the full attribution chain: from ad click → landing page → phone call → CRM record → confirmed move-in.

> **Context:** This approach was developed while working on [[clients/adavacare/index|Adavacare]], where the client (Kharosh) was skeptical of ad ROI and demanded proof that ads were driving actual move-ins, not just form fills.

---

## The Attribution Gap

Without CallRail, your traceability breaks the moment a visitor dials a phone number directly:

```
Ad click → Landing page ✓ (tracked)
                ↓
         Visitor dials phone ✗ (gap — no idea where this call came from)
```

With CallRail + DNI, the chain is complete:

```
Ad click → Landing page → Unique tracking number displayed → Call recorded
    ↓
Google Click ID captured → Keyword/ad attributed → CRM record created
    ↓
Move-in confirmed → Traced back to originating ad
```

---

## Prerequisites

Before setup, confirm:

- [ ] Landing pages live **on the client's main domain** (not in GoHighLevel or a separate tool — those pages won't appear in GSC/GA and break attribution)
- [ ] You have access to the CallRail account
- [ ] You have access to the client's CRM (e.g., Monday.com, GoHighLevel)
- [ ] Google Ads is running and passing click IDs

> **Note:** GoHighLevel does not reliably handle call attribution tied to specific ad keywords. CallRail uses the Google Click ID to look back at the exact keyword and ad — this is something only CallRail can do cleanly.

---

## Setup Steps

### 1. Configure Dynamic Number Insertion (DNI)

DNI swaps the phone number displayed on a page based on the traffic source. A visitor from a Google Ad sees a different number than an organic visitor.

- Install the CallRail JavaScript snippet on all site pages
- Create a **number pool** in CallRail for Google Ads traffic
- Assign a **static tracking number** for organic/direct traffic (so you can distinguish those calls too)
- Test: visit the landing page via a Google Ad click and confirm the number changes

### 2. Pass UTM Parameters Through to the CRM

Every CTA button and link in your ads, social posts, and emails should carry UTM parameters:

```
utm_source=google
utm_medium=cpc
utm_campaign=memory-care-wisconsin
utm_content=blog-boost-oct
```

When a form is submitted or a call is made, these parameters should be captured and passed into the CRM record. This lets you see not just *that* someone converted, but *which ad, campaign, and even which button* they clicked.

### 3. Connect CallRail to the CRM

- In CallRail, enable the **Google Ads integration** to import call data into the Ads dashboard as conversions
- Pass the **Google Click ID (GCLID)** from CallRail into the CRM on each call record
- When a move-in is confirmed in the CRM, look up the contact's GCLID → trace back to the originating call in CallRail → trace back to the originating ad

### 4. Export and Analyze Calls with AI

Once calls are flowing through CallRail:

1. Export call logs (CallRail provides transcripts for each call)
2. Feed the export into ChatGPT or similar: *"Here are all our calls from the last 30 days. How many were legitimate leads? What were the common questions? Which locations were most requested?"*
3. Use the output to build a weekly lead report for the client

This same workflow applies to form fills — see [[knowledge/seo/ai-data-analysis-workflow|AI-Assisted Data Analysis for Client Reporting]].

---

## Presenting Attribution to a Skeptical Client

When a client demands proof that ads drive move-ins, reframe the conversation around the value of leads already in the pipeline before attribution is fully closed:

1. **Quantify existing leads.** Export all form fills for the year, run them through ChatGPT, and surface the count of legitimate inquiries (e.g., 138 real prospects).
2. **Calculate revenue potential.** At ~$6,000–$7,000/month per resident × 12 months = ~$72,000/year per move-in. 138 inquiries × $72,000 × 10% conversion = **~$1M in annual revenue potential** from leads already generated.
3. **Acknowledge the gap honestly.** Explain that without DNI, calls that come in after a visitor dials manually are invisible — and that's exactly what CallRail fixes.
4. **Show the plan.** Attribution tightening is a project with clear steps, not a mystery. Present the setup roadmap.

> *"You've got 138 legitimate leads this year. We don't need huge numbers — we just need to convert 10% of them. That's a million dollars. Let's make sure we can trace every one."*

---

## Gravity Forms Integration (for Form Fill Attribution)

If the client uses Gravity Forms on WordPress:

- Configure **form notifications** so every submission triggers an email alert (confirm who receives these — they are often misconfigured or unmonitored)
- Set up a **Google Sheets export** via Gravity Forms add-on or Zapier for a running lead log
- Include the UTM parameters as hidden fields in the form so source data is captured on submission

---

## Related

- [[clients/adavacare/index|Adavacare Client Overview]]
- [[knowledge/seo/ai-data-analysis-workflow|AI-Assisted Data Analysis for Client Reporting]]
- [[knowledge/content/blog-promotion-strategy|Blog Promotion: Indexing, Boosting, and Email Amplification]]
- [[knowledge/client-management/over-communication-strategy|Over-Communication as a Client Retention Strategy]]