Google Merchant Center top products
Overview
Caution: BigQuery will no longer support this version of the Topproducts table on September 1, 2025. We recommend that you migrate to use thenew best sellers reportinstead. For more information about migrating to the new report, seeMigrate the best sellers report.Best sellers data helps merchants understand the most popular brands andproducts in Shopping ads. For more information about best sellers, see thedescription inSupported Reports.
The data is written to a table namedBestSellers_TopProducts_MERCHANT_ID.
Schema
TheBestSellers_TopProducts_ table has the following schema:
| Column | BigQuery data type | Description | Sample field |
|---|---|---|---|
rank_timestamp | TIMESTAMP | Date and time when the rank was published. | 2020-03-14 00:00:00 UTC |
rank_id | STRING | Rank identifier to join against theProduct Inventory table. | 2020-03-14:AU:100:2:product |
rank | INTEGER | The popularity rank of the product on Shopping ads for the `ranking_country`and `ranking_category`. Popularity is based on the estimated number ofproducts sold. The rank updates daily. The data included in metrics might bedelayed by up 2 days. | 2 |
previous_rank | INTEGER | The change in rank over the previous 7 days. | 4 |
ranking_country | STRING | Country code used for ranking. | AU |
ranking_category | INTEGER | Googleproduct category ID used for ranking. | 5181 |
ranking_category_path | RECORD, | Googleproduct category full path for each locale used for ranking. | |
ranking_category_path.locale | STRING | en-AU | |
ranking_category_path.name | STRING | Luggage & Bags | |
relative_demand | RECORD | A product's estimated demand in relation to the product with the highest popularity rank in the same category and country. | |
relative_demand.bucket | STRING | Very high | |
relative_demand.min | INTEGER | 51 | |
relative_demand.max | INTEGER | 100 | |
previous_relative_demand | RECORD | A product's estimated demand in relation to the product with the highest popularity rank in the same category and country over the previous 7 days. | |
previous_relative_demand.bucket | STRING | Very high | |
previous_relative_demand.min | INTEGER | 51 | |
previous_relative_demand.max | INTEGER | 100 | |
product_title | RECORD, | Product title. | |
product_title.locale | STRING | en-AU | |
product_title.name | STRING | ExampleBrand Backpack | |
gtins | STRING, | GlobalTrade Item Number (GTIN). | 07392158680955 |
brand | STRING | Brand of the item. | ExampleBrand |
google_brand_id | STRING | Google brand ID of the item. | 11887454107284768328 |
google_product_category | INTEGER | Googleproduct category ID of the item. | 100 |
google_product_category_path | RECORD, | Googleproduct category full path of the item. | |
google_product_category_path.locale | STRING | en-US | |
google_product_category_path.name | STRING | Luggage & Bags > Backpacks | |
price_range | RECORD | Price range: lower and upper (with no decimals) and currency. Theprice does not include shipping costs. | n/a |
price_range.min | NUMERIC | 115 | |
price_range.max | NUMERIC | 147 | |
price_range.currency | STRING | AUD |
Understanding the data
- Ranking categories are subject to change over time.
- TheGoogle product categoryin the
BestSellers_TopProducts_Inventory_table might be different from theGoogle Product Category in theProducts_table. TheProducts_table surfaces a retailer provided value of Googleproduct category. - For products in your inventory, the price range in
BestSellers_TopProducts_might differ from theProducts_PriceBenchmarks_table. Price benchmarks metrics are calculated over a different timeperiod. The price ranges inBestSellers_TopProducts_reflect prices ofdifferent variants of the product, whereas the price ranges inProducts_PriceBenchmarks_only refer to a single variant. - Some products in your inventory might not have a rank for each category inthe path. We limit the number of products per category to 10,000, and insome sub-categories we don't publish any ranking.
Example
Products might have a rank for each category within the product categorypath. For example, a Google Pixel 4 phone is classified asElectronics >Communications > Telephony > Mobile Phones. The Pixel 4 will have a separateranking for Electronics, Communications, Telephony, and Mobile Phones. Useranking_category_path in addition toranking_country to determine the depthof category that you want to see a ranking for.
In the example below, an ExampleBrand Backpack contains a separate rankingfor both the Luggage & Bags and Backpacks categories. Select "Backpacks" and"AU" to see what its ranking is in Australia in the Backpacks category.
Ranking for Luggage & Bags
| product_title | ExampleBrand Backpack |
|---|---|
| ranking_country | AU |
| ranking_category | 5181 |
| ranking_category_path | Luggage & Bags |
| Rank | 40 |
| google_product_category | 100 |
| google_product_category_path | Luggage & Bags > Backpacks |
Ranking for Luggage & Bags > Backpacks
| product_title | ExampleBrand Backpack |
|---|---|
| ranking_country | AU |
| ranking_category | 100 |
| ranking_category_path | Luggage & Bags > Backpacks |
| rank | 4 |
| google_product_category | 100 |
| google_product_category_path | Luggage & Bags > Backpacks |
Query examples
Top products for a given category and country
The following SQL query returns top products for theSmartphones category inthe US.
SELECTrank,previous_rank,relative_demand.bucket,(SELECTnameFROMtop_products.product_titleWHERElocale='en-US')ASproduct_title,brand,price_rangeFROMdataset.BestSellers_TopProducts_merchant_idAStop_productsWHERE_PARTITIONDATE='YYYY-MM-DD'ANDranking_category=267/*Smartphones*/ANDranking_country='US'ORDERBYrank
google_product_category.Top products in your inventory
The following SQL query joinsBestSellers_TopProducts_Inventory_ andBestSellers_TopProducts_ data to return a list of top products youhave in your inventory.
WITHlatest_top_productsAS(SELECT*FROMdataset.BestSellers_TopProducts_merchant_idWHERE_PARTITIONDATE='YYYY-MM-DD'),latest_top_products_inventoryAS(SELECT*FROMdataset.BestSellers_TopProducts_Inventory_merchant_idWHERE_PARTITIONDATE='YYYY-MM-DD')SELECTtop_products.rank,inventory.product_id,(SELECTANY_VALUE(name)FROMtop_products.product_title)ASproduct_title,top_products.brand,top_products.gtinsFROMlatest_top_productsAStop_productsINNERJOINlatest_top_products_inventoryASinventoryUSING(rank_id)
google_product_category.Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2026-02-19 UTC.