Google Ads Loader
The Google Ads loader pulls campaign, ad group, keyword, and performance data from your Google Ads accounts into your data warehouse. It uses the Google Ads API and supports incremental sync for reporting data based on date segments.
Prerequisites
- A Google Ads account (or access to a Google Ads Manager account)
- A Google account with read access to the target Google Ads accounts
- A connected Warehouse (target warehouse) with write permissions on the target schema
Authentication
The Google Ads loader uses OAuth 2.0 for authentication.
OAuth 2.0 Setup
- In SignalSmith, click Add Loader and select Google Ads
- Click Connect with Google
- You’ll be redirected to Google’s sign-in page
- Sign in with the Google account that has access to your Google Ads accounts
- Grant SignalSmith permission to access your Google Ads data (read-only)
- You’ll be redirected back to SignalSmith with the connection established
SignalSmith requests the following OAuth scope:
| Scope | Purpose |
|---|---|
https://www.googleapis.com/auth/adwords | Read-only access to Google Ads data via the API |
After authentication, SignalSmith discovers the Google Ads accounts accessible to the authenticated user. Select the account(s) you want to sync. If you use a Manager (MCC) account, you can select one or more child accounts.
Account Selection
| Field | Description | Example |
|---|---|---|
| Customer ID | The Google Ads account ID (10-digit number) | 123-456-7890 |
| Login Customer ID | Manager account ID (required if accessing via MCC) | 987-654-3210 |
Available Objects
| Object | API Name | Description | Default Sync Mode |
|---|---|---|---|
| Campaigns | campaigns | Campaign settings, status, budget, and targeting | Incremental |
| Ad Groups | ad_groups | Ad groups within campaigns with bid settings | Incremental |
| Ads | ads | Individual ad creatives with headlines, descriptions, and URLs | Incremental |
| Keywords | keywords | Search keywords with match type, bids, and quality score | Incremental |
| Campaign Performance | campaign_performance | Daily campaign metrics (impressions, clicks, cost, conversions) | Incremental |
| Ad Group Performance | ad_group_performance | Daily ad group metrics | Incremental |
| Ad Performance | ad_performance | Daily ad-level metrics | Incremental |
| Keyword Performance | keyword_performance | Daily keyword metrics including quality score and search impression share | Incremental |
| Search Terms | search_terms | Actual search queries that triggered your ads (Search Terms Report) | Incremental |
| Audience Segments | audience_segments | Audience segment definitions (remarketing lists, custom audiences) | Full Refresh |
| Conversions | conversions | Conversion action definitions and settings | Full Refresh |
| Geo Performance | geo_performance | Performance metrics segmented by geographic location | Incremental |
| Device Performance | device_performance | Performance metrics segmented by device type | Incremental |
Performance Reports
Performance objects contain daily aggregated metrics. Each row represents one day of data for the parent entity (campaign, ad group, ad, or keyword). The date field serves as part of the composite primary key.
Key metrics available in performance reports:
| Metric | Description |
|---|---|
impressions | Number of times ads were shown |
clicks | Number of ad clicks |
cost_micros | Total spend in micros (divide by 1,000,000 for currency units) |
conversions | Number of conversions |
conversions_value | Total value of conversions |
ctr | Click-through rate (clicks / impressions) |
average_cpc | Average cost per click in micros |
average_cpm | Average cost per thousand impressions in micros |
search_impression_share | Share of eligible impressions received (keywords only) |
Configuration
| Setting | Description | Default |
|---|---|---|
| Customer ID | Google Ads account ID to sync | — (required) |
| Login Customer ID | Manager account ID (if using MCC) | — (optional) |
| Objects | List of objects and reports to sync | — (you choose during setup) |
| Sync Mode | Full Refresh or Incremental (per object) | Incremental |
| Date Range | Lookback period for performance reports | Last 30 days |
| Primary Key | Field(s) that uniquely identify a record | id (entities), id + date (reports) |
| Target Schema | Warehouse schema for Google Ads tables | — (required) |
| Table Prefix | Optional prefix for table names | gads_ |
| Schedule | Sync frequency | Daily |
Scheduling Notes
- Conversion window: Google Ads attributes conversions to the click date, not the conversion date. Conversions can be attributed up to 90 days after the click. SignalSmith applies a configurable lookback window (default: 30 days) to re-fetch recent days and capture late-attributed conversions.
- Data freshness: Google Ads reporting data is typically available 3-4 hours after the end of each day (in the account’s timezone). Schedule daily syncs to run in the morning to capture the previous day’s data.
- Rate limits: The Google Ads API enforces per-developer token rate limits. SignalSmith handles rate limiting with automatic backoff.
- Cost in micros: All monetary values in the Google Ads API are returned in micros (1/1,000,000 of the account currency). For example, a cost of $1.50 is returned as
1500000. Your models should divide by 1,000,000 to get currency values. - Manager accounts: If syncing multiple child accounts via MCC, each account is extracted independently. Tables include a
customer_idcolumn to distinguish between accounts.
Schema Mapping
Google Ads field types are mapped to warehouse-compatible types:
| Google Ads Type | Warehouse Type | Notes |
|---|---|---|
STRING | VARCHAR | |
INT64 | BIGINT | Includes cost in micros |
DOUBLE | DOUBLE | Rates and percentages |
BOOLEAN | BOOLEAN | |
DATE | DATE | Report date segments |
ENUM | VARCHAR | Status values like ENABLED, PAUSED, REMOVED |
MESSAGE | JSON / VARCHAR | Nested structures |
Troubleshooting
| Issue | Solution |
|---|---|
| ”PERMISSION_DENIED” | The authenticated Google account doesn’t have access to the specified Google Ads account. Verify account access in Google Ads |
| ”CUSTOMER_NOT_FOUND” | The Customer ID is incorrect. Verify the 10-digit account number (without dashes) |
| “OAUTH_TOKEN_REVOKED” | Re-authenticate by clicking “Reconnect” on the loader detail page |
| Missing conversion data | Conversions are attributed to click dates and may take up to 90 days to appear. Increase the lookback window |
| Cost values look too large | Google Ads returns costs in micros. Divide by 1,000,000 in your models |
| No data for recent dates | Reporting data may not be available for 3-4 hours after the end of each day |
| ”RESOURCE_EXHAUSTED” | API rate limit exceeded. SignalSmith retries automatically. If persistent, reduce the number of reports synced |
Next Steps
- Create a model to transform your raw Google Ads data
- Combine ad performance data with conversion data from your CRM
- Build retargeting audiences based on website behavior