Skip to main content

Google Ads Module

💎Premium Feature

This feature is exclusive for Premium users!

The Google Ads module transforms raw Google Ads Data Transfer tables into a more analysis-ready, efficient format. It joins metrics and dimensions from different raw Google Ads tables (BasicStats, ConversionStats, Lookup tables) and enables simplified reporting across ad entities.

Key Features​

  • Multiple Customer IDs: Consolidate data from multiple Google Ads accounts (not just under the same MCC account)
  • Dimension Lookups: Maintain latest metadata for ad entities (campaigns, ads, ad groups, keywords, gclid)
  • GCLID: deduplicated, incremental GCLID table that can be joined to other data sources (such as GA4) in downstream queries
  • Conversion Action Handling: Flexible configuration for multiple conversion actions
  • Incremental Processing: Process only new data from certain raw Ads tables that can get costly in high volume accounts
  • Include all relevant tables in your Google Ads BigQuery Data Transfer.
  • Set the Refresh window to 30 (which is the maximum)
  • If your metrics do not match very closely to the Google Ads UI - try to run a backfill, sometimes the data can get stale (especially if you didn't set the Refresh window). Conversion differences should be below 1-2%, non-conversion metrics should be mostly 1:1.

Limitations​

  • Only Primary Conversions are supported (for now)
  • GCLID join query is not provided (for now)
  • Only the latest entity information is stored in the dim_gads_* tables
  • gads_paid_organic_search_term_metrics table is only available if Search Console and Google Ads are connected
  • Custom reports of the Google Ads Data Transfer are not supported (for now)

Configuration​

The module uses a YAML configuration file: includes/custom/modules/google_ads/config.yaml

# set by Superform Labs team to indicate changes
version: 1
# true/false to toggle this feature, default is false
enabled: false
# list of Google Ads Customer IDs to use as sources
# if you use MCC (Manager) accounts - use the customer ID of the topmost account to include all subaccounts
gads_sources:
# - customer_id: '123456789'
# gcp_project: 'dataform-package'
# dataset: 'google_ads'
# - customer_id: '9876554321'
# gcp_project: 'ga4dataform-demo'
# dataset: 'google_ads'
# list the names of conversion actions you need
# these will have their own conversion columns (conversions_* and conversions_value_*)
conversion_action_names:
- name: 'Purchase'
renameTo: 'transaction'
- name: 'Add to Cart'
renameTo: 'add_cart'
- name: '30s on page'
renameTo: 'engagement'

Configuration Options​

Essential Settings​

SettingDescriptionExample
enabledEnable/disable the moduletrue or false
versionConfiguration version (set by Superform Labs)1

Data Sources​

Define one or more Google Ads accounts to process:

gads_sources:
- customer_id: '123456789'
gcp_project: 'ga4dataform-com'
dataset: 'google_ads'
- customer_id: '9876554321'
gcp_project: 'ga4dataform-demo'
dataset: 'google_ads'

If you use MCC (Manager) accounts - use the customer ID of the topmost account to include all subaccounts.

FieldRequiredDescription
customer_idYesGoogle Ads customer ID (10 digits, no dashes)
datasetYesBigQuery dataset containing raw Google Ads tables
gcp_projectNoGCP project name (uses default if omitted)

Conversion Actions​

Configure which conversion actions to track as separate columns:

# Simple format
conversion_action_names: ['Purchase', 'Lead', 'Signup']

# With custom column names
conversion_action_names:
- name: 'Purchase'
renameTo: 'transaction' # Creates: conversions_transaction and conversions_value_transaction
- name: 'Add to Cart'
renameTo: 'cart_add' # Creates: conversions_cart_add and conversions_value_cart_add
- 'Lead Form Submit' # Creates: conversions_lead_form_submit and conversions_value_lead_form_submit

# Mixed format
conversion_action_names:
- name: 'Purchase'
renameTo: 'txn'
- 'Lead' # No rename
- name: 'Signup'

Generated Columns:

  • conversions_{name}: Conversion count
  • conversions_value_{name}: Conversion value
Column Naming

Use renameTo to create cleaner column names. For example, "Add to Cart" becomes conversions_cart_add instead of conversions_add_to_cart. If you don't use renameTo, the field name is still sanitized (lower case + underscore separator).

Conversion Attribution Time

Conversions in Google Ads Data Transfer are attributed to the click date, not the conversion date. For example, a conversion that occurs on January 15th from a click on January 10th will be attributed to January 10th.

Table Structures​

The module follows the following structure:

  1. Dimension Tables (dim_gads_*): Latest metadata for campaigns, ad groups, ads, keywords, accounts. These are materialized in the superform_transformations_* dataset.
  2. Metric Tables (gads_*_metrics): Daily performance data with basic stats (impressions, clicks, cost) and conversions at various grains. These are materialized in the superform_outputs_* dataset.
  3. GCLID Table (gads_gclid): GCLID is a special output table as it contains click-level information that is joined with dim_ tables.

Dimension Tables​

dim_gads_accounts (table)​

Granularity: One row per Google Ads account

Latest metadata for each Google Ads customer account.

ColumnDescription
account_last_updatedDate when this account metadata was last updated
customer_idGoogle Ads customer ID
customer_descriptive_nameAccount name
customer_currency_codeAccount currency (e.g., USD, EUR)
customer_time_zoneAccount timezone
customer_auto_tagging_enabledWhether auto-tagging is enabled
customer_managerWhether this is a manager account
customer_test_accountWhether this is a test account
Customer = Account in Google Ads

Google Ads calls an "account" a "customer" which can be confusing.

dim_gads_campaigns (table)​

Granularity: One row per campaign per account

Latest metadata for each campaign.

ColumnDescription
campaign_last_updatedDate when this campaign metadata was last updated
campaign_idCampaign ID
customer_idGoogle Ads customer ID
campaign_nameCampaign name
campaign_statusCampaign status (ENABLED, PAUSED, REMOVED)
campaign_advertising_channel_typeChannel type (SEARCH, DISPLAY, VIDEO, etc.)
campaign_advertising_channel_sub_typeChannel sub-type
bidding_strategy_nameName of bidding strategy
campaign_bidding_strategyBidding strategy resource name
campaign_bidding_strategy_typeType of bidding strategy
campaign_budget_amountDaily budget amount
campaign_budget_total_amountTotal budget amount (for non-daily budgets)
campaign_budget_explicitly_sharedWhether budget is shared
campaign_budget_has_recommended_budgetWhether recommended budget exists
campaign_budget_periodBudget period (DAILY, CUSTOM)
campaign_start_dateCampaign start date
campaign_end_dateCampaign end date
campaign_experiment_typeExperiment type if campaign is an experiment
campaign_serving_statusServing status
campaign_tracking_url_templateTracking template
campaign_url_custom_parametersCustom URL parameters
campaign_maximize_conversion_value_target_roasTarget ROAS for maximize conversion value
campaign_manual_cpc_enhanced_cpc_enabledWhether enhanced CPC is enabled
campaign_percent_cpc_enhanced_cpc_enabledWhether percent CPC enhanced CPC is enabled

dim_gads_ad_groups (incremental)​

Granularity: One row per ad group per campaign per account

Latest metadata for each ad group.

ColumnDescription
ad_group_last_updatedDate when this ad group metadata was last updated
ad_group_idAd group ID
campaign_idCampaign ID
customer_idGoogle Ads customer ID
ad_group_nameAd group name
ad_group_statusAd group status (ENABLED, PAUSED, REMOVED)
ad_group_typeAd group type (SEARCH_STANDARD, DISPLAY_STANDARD, etc.)
ad_group_ad_rotation_modeAd rotation mode
ad_group_cpc_bidCPC bid amount
ad_group_cpm_bidCPM bid amount
ad_group_cpv_bidCPV bid amount
ad_group_display_custom_bid_dimensionDisplay custom bid dimension
ad_group_effective_target_cpaEffective target CPA
ad_group_effective_target_cpa_sourceSource of effective target CPA
ad_group_effective_target_roasEffective target ROAS
ad_group_effective_target_roas_sourceSource of effective target ROAS
ad_group_tracking_url_templateTracking template
ad_group_url_custom_parametersCustom URL parameters
campaign_bidding_strategyCampaign bidding strategy
campaign_bidding_strategy_typeCampaign bidding strategy type
campaign_manual_cpc_enhanced_cpc_enabledCampaign enhanced CPC enabled
campaign_percent_cpc_enhanced_cpc_enabledCampaign percent CPC enhanced enabled

dim_gads_ads (incremental)​

Granularity: One row per ad per ad group per campaign per account

Latest metadata for each ad creative.

ColumnDescription
ad_last_updatedDate when this ad metadata was last updated
ad_group_ad_ad_idAd ID
ad_group_idAd group ID
campaign_idCampaign ID
customer_idGoogle Ads customer ID
ad_group_ad_ad_nameAd name
ad_group_ad_ad_typeAd type (RESPONSIVE_SEARCH_AD, EXPANDED_TEXT_AD, etc.)
ad_group_ad_statusAd status (ENABLED, PAUSED, REMOVED)
ad_group_ad_ad_strengthAd strength (POOR, AVERAGE, GOOD, EXCELLENT)
ad_group_ad_policy_summary_approval_statusPolicy approval status
ad_group_ad_ad_final_urlsFinal URLs
ad_group_ad_ad_final_mobile_urlsFinal mobile URLs
ad_group_ad_ad_tracking_url_templateTracking template
ad_group_ad_ad_display_urlDisplay URL
ad_group_ad_ad_device_preferenceDevice preference
ad_group_ad_ad_added_by_google_adsWhether ad was added by Google Ads
ad_group_ad_ad_system_managed_resource_sourceSystem managed resource source
Responsive Search Ad fields
ad_group_ad_ad_responsive_search_ad_headlinesRSA headlines
ad_group_ad_ad_responsive_search_ad_descriptionsRSA descriptions
ad_group_ad_ad_responsive_search_ad_path1RSA path 1
ad_group_ad_ad_responsive_search_ad_path2RSA path 2
Expanded Text Ad fields
ad_group_ad_ad_expanded_text_ad_headline_part1ETA headline 1
ad_group_ad_ad_expanded_text_ad_headline_part2ETA headline 2
ad_group_ad_ad_expanded_text_ad_headline_part3ETA headline 3
ad_group_ad_ad_expanded_text_ad_descriptionETA description 1
ad_group_ad_ad_expanded_text_ad_description2ETA description 2
ad_group_ad_ad_expanded_text_ad_path1ETA path 1
ad_group_ad_ad_expanded_text_ad_path2ETA path 2
Responsive Display Ad fields
ad_group_ad_ad_responsive_display_ad_headlinesRDA headlines
ad_group_ad_ad_responsive_display_ad_descriptionsRDA descriptions
ad_group_ad_ad_responsive_display_ad_long_headlineRDA long headline
ad_group_ad_ad_responsive_display_ad_business_nameRDA business name
ad_group_ad_ad_responsive_display_ad_call_to_action_textRDA call to action
App Ad fields
ad_group_ad_ad_app_ad_headlinesApp ad headlines
ad_group_ad_ad_app_ad_descriptionsApp ad descriptions

dim_gads_keywords (incremental)​

Granularity: One row per keyword per ad group per campaign per account

Latest metadata for each keyword.

ColumnDescription
keyword_last_updatedDate when this keyword metadata was last updated
ad_group_criterion_criterion_idKeyword criterion ID
ad_group_idAd group ID
campaign_idCampaign ID
customer_idGoogle Ads customer ID
ad_group_criterion_keyword_textKeyword text
ad_group_criterion_keyword_match_typeMatch type (EXACT, PHRASE, BROAD)
ad_group_criterion_statusKeyword status
ad_group_criterion_system_serving_statusSystem serving status
ad_group_criterion_approval_statusApproval status
ad_group_criterion_negativeWhether this is a negative keyword
ad_group_criterion_effective_cpc_bidEffective CPC bid
ad_group_criterion_effective_cpc_bid_sourceSource of effective CPC bid
ad_group_criterion_effective_cpm_bidEffective CPM bid
Quality Score fields
ad_group_criterion_quality_info_quality_scoreQuality score (1-10)
ad_group_criterion_quality_info_creative_quality_scoreCreative quality score
ad_group_criterion_quality_info_post_click_quality_scorePost-click quality score
ad_group_criterion_quality_info_search_predicted_ctrPredicted CTR
Position Estimate fields
ad_group_criterion_first_page_cpcFirst page CPC estimate
ad_group_criterion_first_position_cpcFirst position CPC estimate
ad_group_criterion_top_of_page_cpcTop of page CPC estimate
ad_group_criterion_position_estimates_estimated_add_clicks_at_first_position_cpcEstimated additional clicks
ad_group_criterion_estimated_add_cost_at_first_positionEstimated additional cost
ad_group_criterion_final_urlsFinal URLs
ad_group_criterion_final_mobile_urlsFinal mobile URLs
ad_group_criterion_tracking_url_templateTracking template
ad_group_criterion_final_url_suffixFinal URL suffix
campaign_bidding_strategyCampaign bidding strategy
campaign_bidding_strategy_typeCampaign bidding strategy type
campaign_manual_cpc_enhanced_cpc_enabledCampaign enhanced CPC enabled
campaign_percent_cpc_enhanced_cpc_enabledCampaign percent CPC enhanced enabled

Metric Tables​

All metric tables include configured conversion columns based on your conversion_action_names configuration.

gads_campaign_metrics (table)​

Campaign-level performance data

Grain: segments_date, campaign_id, customer_id, segments_slot, segments_ad_network_type

Metrics:

  • impressions, clicks, interactions, cost
  • conversions_{action_name}, conversions_value_{action_name} (for each configured conversion)

Dimensions: Join to dim_gads_campaigns and dim_gads_accounts

gads_ad_group_metrics (table)​

Ad group-level performance data

Grain: segments_date, campaign_id, ad_group_id, customer_id, segments_device, segments_slot, segments_ad_network_type

Metrics:

  • impressions, clicks, interactions, cost
  • conversions_{action_name}, conversions_value_{action_name} (for each configured conversion)

Dimensions: Join to dim_gads_ad_groups, dim_gads_campaigns, and dim_gads_accounts

gads_ad_metrics (table)​

Ad-level performance data

Grain: segments_date, campaign_id, ad_group_id, ad_group_ad_ad_id, customer_id, segments_device, segments_slot, segments_ad_network_type

Metrics:

  • impressions, clicks, interactions, cost, view_through_conversions
  • conversions_{action_name}, conversions_value_{action_name} (for each configured conversion)

Dimensions: Join to dim_gads_ads, dim_gads_ad_groups, dim_gads_campaigns, and dim_gads_accounts

gads_keyword_metrics (table)​

Keyword-level performance data

Grain: segments_date, campaign_id, ad_group_id, ad_group_criterion_criterion_id, customer_id, segments_device, segments_slot, segments_ad_network_type

Metrics:

  • impressions, clicks, interactions, cost, view_through_conversions
  • conversions_{action_name}, conversions_value_{action_name} (for each configured conversion)

Dimensions: Join to dim_gads_keywords, dim_gads_ad_groups, dim_gads_campaigns, and dim_gads_accounts

gads_paid_organic_search_term_metrics (table)​

Combined paid and organic search performance

Grain: segments_date, campaign_id, ad_group_id, customer_id, paid_organic_search_term_view_search_term, segments_search_engine_results_page_type

Metrics:

  • clicks, impressions
  • combined_clicks, combined_queries
  • organic_clicks, organic_queries, organic_impressions
  • average_cpc, ctr
  • combined_clicks_per_query, organic_clicks_per_query, organic_impressions_per_query

Dimensions: Join to dim_gads_ad_groups, dim_gads_campaigns, and dim_gads_accounts

GCLID Table​

gads_gclid (incremental)​

Granularity: One row per GCLID (Google Click ID)

Output table containing Google Click IDs (GCLIDs) and their associated metadata. GCLIDs are unique identifiers assigned to each ad click, enabling cross-platform tracking between Google Ads and other analytics platforms like GA4.

ColumnDescription
gclid_last_updatedDate when this GCLID metadata was last updated
click_view_gclidGoogle Click ID - unique identifier for the ad click
campaign_idCampaign ID associated with this click
ad_group_idAd group ID associated with this click
ad_group_ad_ad_idAd ID associated with this click
customer_idGoogle Ads customer ID
click_view_ad_group_adAd group ad resource name
click_view_area_of_interest_cityCity of interest for the user
click_view_area_of_interest_countryCountry of interest for the user
click_view_area_of_interest_metroMetro area of interest for the user
click_view_area_of_interest_most_specificMost specific area of interest
click_view_area_of_interest_regionRegion of interest for the user
click_view_campaign_location_targetCampaign location target
click_view_keywordKeyword associated with the click
click_view_keyword_info_match_typeKeyword match type (EXACT, PHRASE, BROAD)
click_view_keyword_info_textKeyword text
click_view_location_of_presence_cityCity where user was present
click_view_location_of_presence_countryCountry where user was present
click_view_location_of_presence_metroMetro area where user was present
click_view_location_of_presence_most_specificMost specific location of presence
click_view_location_of_presence_regionRegion where user was present
click_view_page_numberPage number where ad appeared
click_view_user_listUser list associated with this click
segments_ad_network_typeNetwork type (SEARCH, DISPLAY, etc.)
segments_click_typeType of click (HEADLINE, SITELINK, etc.)
segments_dateDate of the click (YYYY-MM-DD format)
segments_deviceDevice type (MOBILE, DESKTOP, TABLET)
segments_slotAd slot position

Dimensions: Join to dim_gads_ad_groups, dim_gads_campaigns, and dim_gads_accounts

Common Use Cases​

  1. Campaign Performance Dashboards: Track key metrics across all campaigns
  2. Keyword Optimization: Identify high-performing keywords and negative keyword opportunities
  3. Search Query Mining: Discover new keyword opportunities from actual searches
  4. Multi-Account Reporting: Consolidated reporting across multiple Google Ads accounts
  5. Budget Pacing: Monitor spend vs. budget allocation
  6. Paid vs. Organic: Compare paid and organic search performance

Looker Studio Template​

warning

We do not (yet) have a Looker Studio template for this module.