# Cost per qualified call dashboard for CallRail and Google Ads

> See what every client location really pays for a qualified phone lead by blending CallRail call tracking with Google Ads spend in one shareable dashboard.

- Workflow type: app
- Services: CallRail, Google Ads
- Categories: Marketing, Operations
- Published: 2026-08-16

## What it does

- Pick a client company and a date range, then see total calls, qualified calls, missed calls, and cost per qualified call at a glance, each compared against the previous period.
- Breaks performance down by traffic source and campaign, matching your call tracking data to the ad spend behind it so every row shows spend, cost per call, and cost per qualified call.
- Gives ad campaigns that spent money but produced no calls their own row, so wasted budget shows up instead of quietly disappearing.
- Click any row to see the individual calls behind the number, with date, length, caller number, and lead status.

## What you'll need

- A CallRail account with call tracking running for the client locations you want to report on
- A Google Ads account with campaign spend covering the same clients
- Lead status marked on your calls in CallRail, since the cost per qualified lead math depends on knowing which calls were real leads
- Campaign names that roughly line up between Google Ads and CallRail, since spend is matched to calls by campaign name

## Prompt

Build me a dashboard that my agency team and our clients open to see what each client location actually pays per qualified phone lead. CallRail on its own cannot blend ad spend into its reporting, so this app joins call tracking data with Google Ads spend on one screen. It is read only: nothing writes back to CallRail or Google Ads.

At the top of the page put a company picker and a date range picker. Fill the company picker from CallRail's List All Companies for the connected account, sorted by name. Give the date range picker presets for last 7 days, last 30 days, last quarter, and a custom range, defaulting to last 30 days. CallRail only retains communication records for 25 months, so cap the earliest selectable date at 25 months ago and show a clear message instead of an error if someone tries to go further back. Remember each user's last selected company and date range so the dashboard opens where they left it.

Under the pickers show four summary tiles: total calls, qualified calls, missed calls, and cost per qualified call. Cost per qualified call is total Google Ads spend for the range divided by qualified calls. Every tile also shows the change against the immediately preceding period of the same length, so a last 30 days view compares against the 30 days before it. Show the direction of the change and treat a falling cost per qualified call as the good direction.

Business rule that drives everything: a call counts as qualified only when its lead status marks it as a qualified lead and it is not flagged as spam. Spam calls are excluded from qualified counts and from all cost per qualified lead math, but they still appear in the call level drill down so clients can see what was filtered out.

Below the tiles put the main performance table, broken down by source and campaign. Fetch calls with CallRail's List All Calls for the selected company and date range, requesting the source, campaign, lead status, spam flag, duration, and caller number fields, and group the results by source and campaign. Fetch spend with Google Ads' Campaign Performance Report over the same date range, and match spend to call groups on campaign name using a trimmed, case insensitive comparison. Each row shows source, campaign, total calls, qualified calls, spend, cost per call, and cost per qualified call, with the change against the previous period alongside each metric. Sort by spend descending by default and make every column sortable.

Handle both sides of the join explicitly. A Google Ads campaign with spend in the range but no matching CallRail calls still gets its own row showing the spend against zero calls, visually flagged as wasted spend, because that is the row agencies most need to see. A CallRail source with calls but no matching ad spend, such as organic, direct, or referral traffic, also gets a row with the spend column left blank rather than shown as zero.

Clicking any row drills into the individual calls behind it. The detail view lists one row per call with date and time, duration, caller number, and lead status, plus a spam indicator, and keeps the selected company and date range from the parent view. Make it sortable by date and duration and give the user a clear way back to the summary table.

Formatting details: Google Ads returns cost in micros, so divide by one million before displaying any currency. Format durations in minutes and seconds and phone numbers in a readable form. When a row has zero qualified calls, show cost per qualified call as not applicable rather than a divide by zero result. Keep the layout clean enough to put in front of a client, since both agency staff and client stakeholders open this dashboard.

## How to customize

- Change what counts as a qualified call if your team uses custom lead statuses or tags instead of the standard ones
- Adjust the default date range and the comparison window, for example month over month instead of the previous 30 days
- Add or reorder table columns, such as average call length or a booked appointment count

## FAQ

### Why can I not just do this inside CallRail?

CallRail reports on calls, not on what those calls cost. It has no view of your ad spend, so it can tell you how many qualified calls a campaign produced but not what you paid for each one. This dashboard puts spend next to calls so cost per qualified lead is right there on the page.

### How does it decide which calls are qualified?

Only calls marked as a qualified lead and not flagged as spam count toward the qualified totals and the cost per qualified lead math. Spam calls stay visible in the call detail view so you can see what was filtered out, but they never inflate the numbers.

### How far back can I look?

CallRail keeps call records for 25 months, so the date picker stops there. Anything inside that window works, including custom ranges and comparisons against the previous period.

### What happens when a Google Ads campaign has no matching calls?

It still gets its own row showing the spend against zero calls. That is often the most useful row on the page, because it is budget going out with nothing coming back.

### Can I share this with clients?

Yes. It is a read only view, so nothing in it changes your CallRail or Google Ads accounts. Choose the client's company at the top and walk them through their own numbers.

Use this prompt in General Input: https://www.generalinput.com/prompts/cost-per-qualified-call-dashboard-for-callrail-and-google-ads