Skip to main content

Google Ads

💎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 google_ads_dim_* tables
  • google_ads_paid_organic_search_term_report 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
  • all_conversions: Sum of metrics_conversions across all configured conversion_action_names
  • all_conversions_value: Sum of metrics_conversions_value across all configured conversion_action_names
Stable column for dashboards

all_conversions and all_conversions_value give downstream dashboards a stable column to bind to regardless of which individual conversion actions are configured. Add or remove entries in conversion_action_names without rewiring your dashboards.

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).

Apostrophes and special characters

Conversion action names containing apostrophes (e.g. Client's Call) and other special characters work as-is from v2.2.4 onwards - the module wraps them in BigQuery triple-quoted string literals so escaping no longer breaks Dataform compilation.

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 (google_ads_dim_*): Latest metadata for campaigns, ad groups, ads, keywords, accounts. These are materialized in the superform_transformations_* dataset.
  2. Metric Tables (google_ads_*_report): 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 (google_ads_gclid): GCLID is a special output table as it contains click-level information that is joined with google_ads_dim_ tables.

Dimension Tables​

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.

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

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

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

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.

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)
  • all_conversions, all_conversions_value (sum across all configured conversion actions)

Dimensions: Join to google_ads_dim_campaigns and google_ads_dim_accounts

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)
  • all_conversions, all_conversions_value (sum across all configured conversion actions)

Dimensions: Join to google_ads_dim_ad_groups, google_ads_dim_campaigns, and google_ads_dim_accounts

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)
  • all_conversions, all_conversions_value (sum across all configured conversion actions)

Dimensions: Join to google_ads_dim_ads, google_ads_dim_ad_groups, google_ads_dim_campaigns, and google_ads_dim_accounts

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)
  • all_conversions, all_conversions_value (sum across all configured conversion actions)

Dimensions: Join to google_ads_dim_keywords, google_ads_dim_ad_groups, google_ads_dim_campaigns, and google_ads_dim_accounts

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 google_ads_dim_ad_groups, google_ads_dim_campaigns, and google_ads_dim_accounts

GCLID Table​

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 google_ads_dim_ad_groups, google_ads_dim_campaigns, and google_ads_dim_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

Data Studio Template​

warning

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