Launch Readiness Guide
Implementation checklist · Architecture · Required data · Security setup
Reporting Stack Architecture
All dealer campaigns
Call Assets (GFN)
Read-only token
Nightly data sync
Call detail reports
Dealer dashboards
[DealerName] – [Type] → Riverside Toyota – Search, Metro Honda – PMax.
Consistent naming enables reliable filtering in this portal and in Google Ads reports.
https://www.googleapis.com/auth/adwords scope with read-only access.
Never use Admin or Write access for a reporting-only connection.
Store the refresh token in a secure secrets manager (e.g. Google Cloud Secret Manager), never in code.
| Report | Google Ads Field | Portal Column | Required? |
|---|---|---|---|
| Campaign Performance | campaign.id | campaign_id | Required |
| campaign.name | campaign_name | Required | |
| metrics.impressions | impressions | Required | |
| metrics.clicks | clicks | Required | |
| metrics.cost_micros | cost | Required | |
| metrics.conversions | conversions | Required | |
| metrics.phone_calls | phone_calls | Important | |
| metrics.phone_impressions | phone_impressions | Important | |
| campaign.advertising_channel_type | campaign_type | Recommended | |
| Call Details | call_detail.call_date_time | call_start_time | Required |
| call_detail.duration_seconds | duration_seconds | Required | |
| call_detail.call_status | call_status | Required | |
| call_detail.caller_area_code | caller_area_code | Required | |
| call_detail.caller_phone_number | caller_phone | Important | |
| call_detail.call_type | call_type | Important | |
| keyword.info.text | keyword | Important | |
| campaign.id (join) | campaign_id | Required |
youragency.com).
This prevents unauthorized external email addresses from being invited to any dealer account.
campaign_performance and call_details
tables from the Google Ads API nightly. The portal reads these tables via REST API automatically.
Step-by-Step: Connect Google Ads Data
In your Google Ads Manager Account: Tools → API Center → Apply for token. For a reporting-only integration, Basic access level is sufficient. Keep this token private — store it in an environment variable or secrets manager.
Go to console.cloud.google.com → APIs & Services → Credentials → Create OAuth 2.0 Client ID.
Choose "Web application." Add your redirect URI. Download the client_secret.json.
Never commit this to a code repository.
Run the OAuth flow once (using a Google Ads client library or the OAuth Playground).
After authorization, save the refresh_token securely.
This token lets your system call the Google Ads API without re-authenticating daily.
Access tokens expire in 1 hour; the library handles refreshes automatically.
Use the Google Ads Query Language (GAQL) to pull: impressions, clicks, cost, conversions, phone_calls, phone_impressions, ctr, average_cpc, conversion_rate, cost_per_conversion grouped by campaign.id and campaign.name, date range = previous month.
Query the call_view resource in the Google Ads API.
Fields: call_view.call_date_time, call_view.duration_seconds, call_view.call_status,
call_view.caller_area_code, call_view.caller_phone_number, call_view.call_type,
segments.keyword.info.text, campaign.id.
Join to the dealer mapping table using campaign ID.
POST the cleaned records to tables/campaign_performance and tables/call_details
via the portal's REST API. The portal's dashboard and reports will reflect the live data immediately.
Run this as a nightly scheduled job.
Review: Google Ads Access & Security users, linked manager accounts, OAuth app permissions at myaccount.google.com/permissions, and this portal's dealer records for accuracy. Remove any inactive users, old agencies, or stale tokens.
Google Ads Native Report Navigation
| Report | Navigation Path in Google Ads | Notes |
|---|---|---|
| Call Details Report | Campaigns → Insights & Reports → Report Editor → Ads & Assets → Call Details | Shows per-call data: start time, duration, caller phone, status, keyword, ad group |
| Campaign Performance | Campaigns → Campaigns → Columns: Add "Call Details" columns | Add Phone Calls, Phone Impressions, PTR columns from column settings |
| Call Conversion Summary | Campaigns → Campaigns → Columns → Conversions → Phone Calls (view-through) | Counts calls meeting your conversion duration threshold |
| Account Access | Admin → Access & Security → Users tab | Review and revoke user access; set access levels per user |
| Manager Account Security | Admin → Access & Security → Security tab | Set 2SV requirements and allowed email domains for all sub-accounts |
| API Center | Tools → Setup → API Center | Apply for developer token, view token status and usage |