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.
Integrations
CallRail
Google Ads
Type
Categories
- Marketing
- Operations
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 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
How to 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
Use cases
- AI Reports
- Research & Monitoring