YouTube benchmarks

The BenchmarksService enables advertisers and agencies to compare their YouTube ad performance against industry benchmarks. Using this service, you can evaluate how your campaigns perform relative to industry verticals or across all advertisers in specific product and service categories.

Key capabilities

With the BenchmarksService, you can:

  • Compare performance: Evaluate a customer's average rate metrics (such as CPM, CPV, CTR, and viewability) against aggregated industry averages.
  • Analyze market share: Understand a customer's relative market presence through share of voice (relative impressions) and share of spend.
  • Evaluate competitive standing: Measure a customer's competitive position using percentile metrics that classify performance across key dimensions into competitive tiers (such as Market Leader or Competitor).
  • Segment by time: Group benchmark metrics by weekly, monthly, or quarterly time granularities.
  • Discover supported benchmark dimensions: Query available date ranges, geographic locations, advertising products, and benchmark sources (industry verticals or product and service categories).

Discovery methods

Before generating benchmark metrics, use the discovery methods to retrieve the valid parameters and scoping criteria for your requests.

List available dates

The ListBenchmarksAvailableDates method returns the historical date ranges that support benchmark data in a ListBenchmarksAvailableDatesResponse.

The response provides two distinct date ranges:

  • supported_dates: The overall date range where benchmark metrics are supported (inclusive). Benchmark requests can query dates within this range.
  • supported_dates_for_all_metrics: A subset of supported_dates that supports the full set of benchmark metrics. Certain metrics—specifically customer share metrics (share_of_voice and share_of_spend) and average rate metrics of the benchmark source—are only available within this date range due to limited data availability. These metrics are omitted from the response if the requested date_range does not fall completely within supported_dates_for_all_metrics.

List locations

The ListBenchmarksLocations method returns the list of geographic locations (such as countries) that support benchmark data.

Each BenchmarksLocation in the response includes:

  • location_name: The unique location name in English (for example, "United States").
  • location_type: The location type corresponding to the target_type in the Google Ads API (for example, "Country").
  • location_info: A LocationInfo object containing the geographic target constant (such as geo_target_constant: "geoTargetConstants/2840").

List products

The ListBenchmarksProducts method returns the list of products and marketing objectives available for benchmarking.

Each BenchmarksProductMetadata entry includes:

  • product_name: The user-friendly product name.
  • product_code: The unique identifier string for the product, used when constructing a ProductFilter.
  • marketing_objective: The associated marketing objective (BenchmarksMarketingObjective):
    • AWARENESS: Campaigns designed to increase brand or product awareness.
    • CONSIDERATION: Campaigns designed to encourage potential customers to consider the brand or products.
    • ACTION: Campaigns designed to drive a specific conversion action.

List benchmarks sources

The ListBenchmarksSources method retrieves available benchmark sources. Specify the source types to retrieve using BenchmarksSourceType:

  • INDUSTRY_VERTICAL: Classifications of industry segments (for example, "Technology" or "Finance").
  • CATEGORY: Product & Service Categories (for example, "/Apparel/Clothing"). Categories can be used as filters to scope benchmarking when comparing against all advertisers.

The response returns a list of BenchmarksSourceMetadata objects containing either:

  • IndustryVerticalInfo: Contains industry_vertical_name, industry_vertical_id, and parent_industry_vertical_id (if applicable).
  • CategoryInfo: Contains category_name, category_id, and category_path (the full category hierarchy).

Generate benchmark metrics

Call GenerateBenchmarksMetrics to compare a customer's YouTube ad metrics against industry benchmarks.

Request parameters

A GenerateBenchmarksMetricsRequest scopes the analysis. At a minimum, you must specify a client customer_id, geographic location, a benchmarks_source (such as a specific industry vertical or all advertisers scoped by category_filter), and a product_filter. You can optionally provide a date_range, group metrics with a breakdown_definition, specify a currency_code, or request additional features such as PERCENTILE_DATA through supplemental_data.

For full parameter definitions and requirements, refer to the GenerateBenchmarksMetricsRequest reference documentation.

Date breakdowns

You can group metrics by setting breakdown_definition.date_breakdown using BenchmarksTimeGranularity:

  • WEEK: Aggregates metrics by week. The date_range must start on a Sunday and end on a Saturday (note that this differs from ISO 8601).
  • MONTH: Aggregates metrics by month. The date_range must start on the first day of the month and end on the last day of the month.
  • QUARTER: Aggregates metrics by calendar quarter. The date_range must start on the first day of the quarter and end on the last day of the quarter.

Response metrics

The GenerateBenchmarksMetricsResponse returns:

For complete field specifications, refer to the GenerateBenchmarksMetricsResponse reference documentation.

Percentile metrics

Percentile metrics represent a customer's competitive standing as percentile tiers among other advertisers within the scoped analysis.

Prerequisites

To retrieve percentile metrics, your request must meet the following requirements:

  1. Benchmarks source: benchmarks_source must select all_advertisers = true.
  2. Category filter: category_filter must be provided, containing one or more valid category_ids retrieved from ListBenchmarksSources.
  3. Supplemental data: You must add PERCENTILE_DATA to the supplemental_data field in GenerateBenchmarksMetricsRequest.

Percentile tiers

A customer's performance is classified into one of the BenchmarksCustomerPercentileTier enum values (ranging from DEVELOPING for the lower tiers up to MARKET_LEADER for top-performing advertisers). For a description of each tier and its percentile boundaries, refer to the BenchmarksCustomerPercentileTier reference documentation.

Example request

The following example illustrates a REST JSON request payload to generate benchmark metrics with percentile tiers for a user comparing their customer's YouTube ads performance against other advertisers running ads in the /Apparel/Clothing category:

{
  "customer_id": "1234567890",
  "location": {
    "geo_target_constant": "geoTargetConstants/2840"
  },
  "benchmarks_source": {
    "all_advertisers": true
  },
  "category_filter": {
    "category_ids": ["10176"]
  },
  "product_filter": {
    "marketing_objective_list": {
      "marketing_objectives": ["AWARENESS", "CONSIDERATION"]
    }
  },
  "supplemental_data": [
    "PERCENTILE_DATA"
  ]
}

The response including the additional percentile data requested:

{
  "customer_metrics": {
    "average_rate_metrics": {
      "average_cpm": 5.42,
      "click_through_rate": 0.0185
    },
    "share_metrics": {
      "share_of_voice": 0.0345,
      "share_of_spend": 0.0410
    },
    "aggregate_metrics": {
      "cost": 15200.0,
      "impressions": 2800000.0,
      "clicks": 51800.0
    },
    "percentile_metrics": {
      "cost_percentile_tier": "STRONG_COMPETITOR",
      "impressions_percentile_tier": "STRONG_COMPETITOR",
      "clicks_percentile_tier": "MARKET_LEADER",
      "video_trueview_views_percentile_tier": "COMPETITOR",
      "viewable_impressions_percentile_tier": "STRONG_COMPETITOR",
      "interactions_percentile_tier": "MARKET_LEADER",
      "engagements_percentile_tier": "COMPETITOR"
    }
  },
  "average_benchmarks_metrics": {
    "average_rate_metrics": {
      "average_cpm": 6.15,
      "click_through_rate": 0.0142
    }
  }
}

Error handling

When calling the BenchmarksService, you may encounter errors specific to benchmarks queries in BenchmarksError:

  • MAX_QUERY_COMPLEXITY_EXCEEDED: The combination of requested inputs is too complex to process. To reduce query complexity:
    • Select a more specific or granular benchmark source or category filter.
    • Shorten the requested date_range.
    • Reduce the number of products in product_filter.
  • NO_METRICS_FOUND: No metrics were found for the requested combination of inputs (for example, a niche category in a specific location and date range where no advertisers ran campaigns). Try adjusting the category, location, date range, or products.

For general API error handling and best practices, refer to the Error handling guide.