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.
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.
What does this prompt do?
- 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 do I need to use this?
- 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
How can I customize it?
- 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
FAQs
Why can I not just do this inside CallRail?
How does it decide which calls are qualified?
How far back can I look?
What happens when a Google Ads campaign has no matching calls?
Can I share this with clients?
Related templates
See the Google Ads search terms burning money with no conversions, decide on each one as a team, and build your negative keyword list as you go.
See every responsive search ad ranked by spend, spot the headlines Google rates Low, and have an agent draft replacements in your brand voice.
See every client's traffic, ad spend and search numbers on one screen, then let an agent write and design this month's report for you to approve.
Open one screen each morning to score yesterday's tracked calls as qualified, not a lead, or spam, and send the real leads straight to HubSpot.
See every CallRail tracking number across your client accounts in one table, find the ones nobody calls, and rename, reroute, or release them in place.
Every Monday, match last week's ad spend to the jobs you actually booked in Workiz, then get the winners, losers, and where to move budget in Slack.
Stop guessing what a qualified phone lead costs.
Put CallRail calls and Google Ads spend on one screen and give every client a straight answer about cost per qualified lead.