Call Performance Report
Aggregates call assets per campaign — received vs missed, average duration, and the share of quality calls — and alerts when you're paying for calls nobody answers.
by Dmytro Tonkikh·chiliad.io
Overview
For lead-gen accounts, calls are the conversions — and call quality hides behind click metrics. Call Performance Report aggregates tracked calls per campaign: total calls, missed vs answered, average duration, and the share of quality calls (at or above your duration threshold — long enough to be a real conversation). Campaigns whose missed-call share exceeds your tolerance are flagged, because paying for calls nobody answers is the most fixable waste in lead gen: it's almost always an ad schedule extending past staffed phone hours.
Setup
- 1Requires call assets with call reporting enabled (Google forwarding numbers).
- 2Open your Google Ads account and go to Tools → Bulk Actions → Scripts.
- 3Click the + button to create a new script and paste the code below.
- 4Adjust QUALITY_SECONDS to what a real conversation means in your business.
- 5Set EMAIL_ADDRESS to receive the report, then schedule weekly.
Configuration Variables
| Variable | Default |
|---|---|
DATE_RANGE | LAST_30_DAYS |
QUALITY_SECONDS | 60 |
MISSED_ALERT_PCT | 25 |
MIN_CALLS | 5 |
EMAIL_ADDRESS | (empty) |
Expected Output
=== Call Performance Report (LAST_30_DAYS) === Total tracked calls: 148 Lead Gen — Plumbing calls: 84 missed: 9 (11%) avg duration: 142s quality calls (>=60s): 78% Lead Gen — Emergency calls: 52 missed: 19 (37%) avg duration: 96s quality calls (>=60s): 61% --- Missed-call alerts: 1 --- Lead Gen — Emergency - 37% of calls missed Email sent to you@example.com
Notes
Only calls through Google forwarding numbers (call reporting) appear — direct dials of your real number aren't tracked. Duration data requires call reporting to be enabled on the call assets. The standard fix for missed-call alerts: align the ad schedule with staffed hours, or route after-hours calls to an answering service.