Skip to content
Product Metrics
Reference

Product Metrics MCP tools

Every tool the Product Metrics MCP server gives an AI assistant, what each one is for, and the arguments it takes.

The Product Metrics MCP server gives an AI assistant such as Claude or ChatGPT 24 tools to read your store, your products and your Google Ads account. Every tool reads, except propose_change, which files a proposal that a person approves in Priorities. No tool changes Google Ads or your store. To connect an assistant, see Connect Claude or ChatGPT.

How the tools work

  • Pick a store first. One connection covers every store (property) you can open in Product Metrics. The assistant calls list_properties, then passes property_id to every other tool. If you have one store, it can leave property_id out.
  • Your role applies. Any member of a workspace can use the read tools. Only editors and admins can file proposals.
  • Arguments are forgiving. A limit above the maximum, a plural value or a camelCase name is corrected instead of refused, and the answer starts with what was corrected.
  • Hourly limits. Up to 5,000 tool calls per person and 20,000 per store each hour. Expensive tools (marked below) have a lower limit: 30 calls per person and 120 per store each hour.
  • Answers are text. Each tool returns a readable summary with figures, dates and currency, cut off at about 40,000 characters. Narrow the request to see more.

Stores

Pick the store (property) to work on and read its own sales numbers.

list_properties

Properties · Read-only · reads Product Metrics data · any workspace member

The Product Metrics properties (one store’s Google Shopping account each) the signed-in person can open, with the company, the linked Google Ads customer id and the currency. Call this first when no property is chosen yet, then pass its propertyId as property_id to every other tool. If there is exactly one, use it without asking; if there are several and the question names none, ask which store or answer per store.

ArgumentTypeRequiredDefaultDescription
name_containsstringNoUp to 100 characters.

get_store_overview

Store overview · Read-only · reads Product Metrics data · any workspace member

The store’s own numbers next to the ads: web analytics from GA4 for the period (sessions on product pages, sessions with a purchase, revenue, product views, add to carts, checkouts, conversion rate, revenue per session) with the comparison period, an optional daily, weekly or monthly trend and the top products by revenue, plus shop orders from the connected shop when order tracking is set up, over the same range with the comparison and the same trend (orders, revenue ex tax, average order value, new and returning customers, refunds, profit). Use it for how the store is doing overall, whether a change in ads shows up in store revenue, and the ad share of revenue. GA4 figures count sessions that landed on a product page, not every session; shop order figures are the shop’s own.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
date_rangeenum or object { start, end }Nolast_30_daysOne of yesterday, last_7_days, last_14_days, last_30_days, last_90_days, last_365_days, last_4_weeks, last_8_weeks, last_13_weeks, this_month, last_month, this_year. Or { "start": "YYYY-MM-DD", "end": "YYYY-MM-DD" }.
compareenumNoprevious_periodOne of previous_period, previous_year, none.
breakdownenumNononeday, week or month adds a trend series. One of none, day, week, month.
top_productsintegerNo10From 0 to 50.

Read the Google Ads account linked to the store, live. These tools only read: nothing here changes the account.

explain_google_ads_change

Explain a Google Ads change · Read-only · reads your Google Ads account live · any workspace member · counts towards the hourly limit for expensive tools

Explains why a Google Ads metric changed, in one call: use it first for ‘what happened to …’, ‘why did … drop or rise’, ‘something is off since …’. For the scope (the account, campaign ids, types or a name), it reads the daily series and finds the day the metric stepped to a new level (or says the change is gradual), compares the days after with as many days before, splits the change into its funnel (impressions, CTR, clicks, CPC, conversion rate, value per conversion), ranks which campaigns, asset groups, ad groups, products, devices, networks and conversion actions carry it (concentrated in one, or spread over all), counts how many products got impressions and spend before and after (a widened product mix), flags an asset group or product that started or stopped delivering, estimates how much value is still to come from conversion delay, lists the account changes made in the days before (budget, status, targets, by whom, and listing group edits Google Ads records without values), and sets the store’s own revenue and orders next to it, so a tracking problem can be told apart from a real drop. Follow up with get_google_ads_report only to drill further.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
metricenumNoconversion_valueOne of conversion_value, roas, conversions, cpa, cost, clicks.
date_rangeenum or object { start, end }Nolast_30_daysWhere to look for the change (at most 90 days); the same number of days before it is read as the baseline. One of yesterday, last_7_days, last_14_days, last_30_days, last_90_days, last_365_days, last_4_weeks, last_8_weeks, last_13_weeks, this_month, last_month, this_year. Or { "start": "YYYY-MM-DD", "end": "YYYY-MM-DD" }.
change_datedateNoThe first day of the change, when the person names it; otherwise it is found in the daily series.
campaign_idsarray of stringNo1 to 50 items.
campaign_typesarray of enumNoEach one of SEARCH, SHOPPING, PERFORMANCE_MAX, DISPLAY, VIDEO, DEMAND_GEN. 1 to 6 items.
campaign_name_containsstringNoUp to 100 characters.

get_google_ads_report

Google Ads report · Read-only · reads your Google Ads account live · any workspace member

Live Google Ads performance for the property’s linked account, at any level: account totals, campaigns (with type, status, budget, bidding, target ROAS and search impression share lost to budget and rank), ad groups, Performance Max asset groups, search terms, keywords (with quality score), products, conversion actions, device, network, day of week or hour. Each row has impressions, clicks, cost, conversions, conversion value, CTR, CPC, conversion rate, CPA and ROAS, plus the comparison period and its change. Filter by campaign ids, campaign name or type, row name, spend or clicks, or rows with spend and no conversions (wasted spend); sort by any metric or by its change; break down by day, week or month for trends. Use it for Google Ads questions about levels, splits and lists: spend, ROAS, wasted search terms, budget-limited campaigns, device or hour splits, trends. Money is in the account currency. Totals cover every matching row, not just the rows shown. To find out why something dropped or rose, call explain_google_ads_change instead: it does the drill-down in one call. When CPA looks fine but ROAS does not, read level conversion_action for that campaign: each action shows whether it is primary, and a primary action without value (sign-up, call) inflates conversions. For profit, margin, POAS or stock, use get_poas_report instead.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
levelenumNocampaignRow grain: account (one totals row), campaign, ad_group, asset_group (Performance Max), search_term (Search and Shopping queries), keyword, product (Shopping and Performance Max item ids), product_label (one row per value of a custom label, e.g. the Product Metrics segments, with how many products got impressions and spend), conversion_action (conversions per action; no cost or clicks), conversion_lag (conversions by days from the ad interaction to the conversion: how much value arrives late), device, network, day_of_week, hour_of_day. One of account, campaign, ad_group, asset_group, search_term, keyword, product, conversion_action, device, network, day_of_week, hour_of_day, conversion_lag, product_label.
date_rangeenum or object { start, end }Nolast_30_daysA preset (day presets end yesterday; week presets are complete Monday–Sunday weeks ending last Sunday) or { start, end } as YYYY-MM-DD. One of yesterday, last_7_days, last_14_days, last_30_days, last_90_days, last_365_days, last_4_weeks, last_8_weeks, last_13_weeks, this_month, last_month, this_year. Or { "start": "YYYY-MM-DD", "end": "YYYY-MM-DD" }.
compareenumNoprevious_periodAdds the same metrics for the period before (or a year earlier) with changes. One of previous_period, previous_year, none.
breakdownenumNononeSplit rows by day, week or month for a trend; level account + breakdown day is the account’s daily trend. One of none, day, week, month.
campaign_idsarray of stringNo1 to 50 items.
campaign_name_containsstringNoUp to 100 characters.
campaign_typesarray of enumNoEach one of SEARCH, SHOPPING, PERFORMANCE_MAX, DISPLAY, VIDEO, DEMAND_GEN. 1 to 6 items.
name_containsstringNoCase-insensitive filter on the row’s name: search term, keyword, product title or id, ad group. Up to 100 characters.
include_pausedbooleanNotruefalse keeps only rows whose campaign is enabled now.
min_clicksintegerNoFrom 0 to 9007199254740991.
min_costnumberNoAt least 0.
only_without_conversionsbooleanNofalseKeep rows with spend and zero conversions: wasted spend.
sort_byenumNocostOne of cost, clicks, impressions, conversions, conversion_value, roas, cpa, ctr, conversion_rate, avg_cpc, cost_change, conversion_value_change, roas_change.
orderenumNodescOne of desc, asc.
limitintegerNo25From 1 to 500.
labelenumNoproduct_label level: the custom label to group by; defaults to the one Product Metrics writes its segments to. One of custom_label_0, custom_label_1, custom_label_2, custom_label_3, custom_label_4.
recent_daysintegerNoAlso reads the last N days of the range per row (spend, its share of the row’s spend, ROAS, and ROAS adjusted for conversion delay) and flags rows that took a bigger share of spend recently while their ROAS fell: products, asset groups or campaigns that look good over the range but drain budget now. From 3 to 14.

get_poas_report

Profit on ad spend (POAS) · Read-only · reads your Google Ads account live · any workspace member

Profit on ad spend: live Google Ads per product and campaign joined, in Product Metrics, with the store’s own margin (cost of goods), stock and the engine’s push/hold/reduce/pause decision. Gives per product, per campaign or for the account: cost, conversion value, ROAS, gross profit (conversion value × margin), POAS, profit after ads, the margin coverage, and per product the stock (on hand, weeks of cover, stockout date, slow mover) and decision; campaign rows add the spend on out-of-stock and low-cover products. Filter by stock (out_of_stock, low_cover, slow_movers) or to unprofitable rows (POAS below break-even); sort by profit after ads, POAS or cover. Use it for every question about profit, margin, POAS, ‘which products lose money on ads’, ‘are we advertising products we cannot deliver’, and budget moves that should follow profit or stock rather than ROAS. Search and Demand Gen campaigns sell no single product: their POAS uses the account’s average margin and is marked as estimated.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
levelenumNoproductproduct: one row per advertised product with its margin, stock and decision; campaign: POAS per campaign from its products’ margins; account: totals. One of product, campaign, account.
date_rangeenum or object { start, end }Nolast_30_daysOne of yesterday, last_7_days, last_14_days, last_30_days, last_90_days, last_365_days, last_4_weeks, last_8_weeks, last_13_weeks, this_month, last_month, this_year. Or { "start": "YYYY-MM-DD", "end": "YYYY-MM-DD" }.
compareenumNoprevious_periodOne of previous_period, none.
campaign_idsarray of stringNo1 to 50 items.
campaign_typesarray of enumNoEach one of SEARCH, SHOPPING, PERFORMANCE_MAX, DISPLAY, VIDEO, DEMAND_GEN. 1 to 6 items.
item_idsarray of stringNo1 to 50 items.
stockenumNoanyKeep products by stock: at_risk (out of stock or running out before restock: use it for ‘are we advertising what we cannot deliver’), out_of_stock, low_cover (fewer weeks of cover than the lead time, or a stockout before the next delivery), slow_movers (too much stock), in_stock. One of any, at_risk, in_stock, out_of_stock, low_cover, slow_movers.
only_unprofitablebooleanNofalseKeep rows whose POAS is below break-even: ad spend the margin does not pay back.
sort_byenumNocostOne of cost, profit_after_ads, gross_profit, poas, roas, conversion_value, cover_weeks.
orderenumNodescOne of desc, asc.
limitintegerNo25From 1 to 200.

get_google_ads_changes

Google Ads change history · Read-only · reads your Google Ads account live · any workspace member

The Google Ads account’s change history (the last 30 days, which is all Google Ads keeps): who changed what and when, with each field’s value before and after: budgets, campaign and ad group status, bidding and target ROAS or CPA, and the rest; plus the edits Google Ads records only as ‘changed’ without values (listing group filters, asset groups, criteria), which the change history leaves out. Filter by campaign ids or name. Use it for ‘did anyone change something’, ‘who paused …’, and to check what was changed before a drop.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
date_rangeenum or object { start, end }Nolast_30_daysGoogle Ads keeps change history for the last 30 days (the default reads all of it): last_7_days, last_14_days, last_30_days or { start, end } within them. One of yesterday, last_7_days, last_14_days, last_30_days, last_90_days, last_365_days, last_4_weeks, last_8_weeks, last_13_weeks, this_month, last_month, this_year. Or { "start": "YYYY-MM-DD", "end": "YYYY-MM-DD" }.
campaign_idsarray of stringNo1 to 50 items.
campaign_name_containsstringNoUp to 100 characters.
limitintegerNo50From 1 to 200.

get_product_targeting

Product targeting (listing groups) · Read-only · reads your Google Ads account live · any workspace member

Which products each Performance Max asset group and Shopping ad group may serve: its listing group filters as rules (custom label, item id, brand, product type; included or excluded; ‘everything else’ nodes), the custom label Product Metrics writes its segments to, and what conflicts: a product excluded in one asset group but still servable through another, a catch-all that serves every other label, filters on a different custom label than the segments. Use it for ‘is my campaign filtered on my segments’, ‘where are my Stars’, ‘why does this excluded product still spend’.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
campaign_idsarray of stringNo1 to 50 items.
campaign_name_containsstringNoUp to 100 characters.
include_pausedbooleanNofalse

compare_product_segments

Segments vs campaign setup and other labels · Read-only · reads your Google Ads account live · any workspace member

Product Metrics segments (Stars, Cash Cows, Question Marks, Ghosts, Drainers, Dogs) against how each campaign is actually set up and against the other labels in the feed, per campaign: which custom label each campaign’s listing groups filter on and what fills it (our segments, ProfitMetrics, Producthero, Channable or Flowboost labels, or the merchant’s own segmentation such as categories or margin bands); spend, conversion value and ROAS per segment and per value of the other labels; the segment × label cells with the most spend; and the spend where the two systems disagree (a product one calls good and the other bad), with examples. Use it for ‘is my campaign built on your segments or on ProfitMetrics’, ‘how do your segments compare with Producthero/Channable/Flowboost/my own labels’, ‘which products do the systems disagree on’.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
date_rangeenum or object { start, end }Nolast_30_daysOne of yesterday, last_7_days, last_14_days, last_30_days, last_90_days, last_365_days, last_4_weeks, last_8_weeks, last_13_weeks, this_month, last_month, this_year. Or { "start": "YYYY-MM-DD", "end": "YYYY-MM-DD" }.
campaign_idsarray of stringNo1 to 50 items.
campaign_typesarray of enumNoEach one of SEARCH, SHOPPING, PERFORMANCE_MAX, DISPLAY, VIDEO, DEMAND_GEN. 1 to 6 items.
campaign_name_containsstringNoUp to 100 characters.
compare_withenumNoThe custom label to set against the segments; by default every other filled label (another tool’s first, then the merchant’s own). One of custom_label_0, custom_label_1, custom_label_2, custom_label_3, custom_label_4.

run_google_ads_query

Google Ads query (GAQL) · Read-only · reads your Google Ads account live · any workspace member · counts towards the hourly limit for expensive tools

Runs one read-only GAQL (Google Ads Query Language) SELECT against the property’s linked Google Ads account, for what the other Google Ads tools cannot answer: ad copy and asset performance, landing pages, geography, bid strategies, conversion action settings, listing groups, or an unusual combination of fields. Costs more than the report tool: prefer the report. Resources: customer, campaign, ad_group, asset_group, ad_group_ad, keyword_view, search_term_view, shopping_performance_view (segments.product_item_id, segments.product_title, segments.product_brand, segments.product_type_l1), campaign_budget, bidding_strategy, conversion_action (settings: conversion_action.name, status, category, primary_for_goal, counting_type; no metrics: per-action conversions come FROM campaign with segments.conversion_action_name), change_event (prefer get_google_ads_changes), geographic_view, user_location_view, landing_page_view, asset_group_listing_group_filter. Dates: segments.date DURING LAST_7_DAYS | LAST_30_DAYS | THIS_MONTH | LAST_MONTH, or segments.date BETWEEN ‘YYYY-MM-DD’ AND ‘YYYY-MM-DD’. Money fields ending in _micros are millionths of the account currency (divide by 1,000,000); the result adds the divided value as <field> without _micros. No OR in WHERE; use IN. A segment in WHERE must also be in SELECT (segments.date excepted). metrics.search_impression_share and friends cannot be combined with segments.device or hour. Rows come back flattened (campaign.name, metrics.clicks) and capped at max_rows.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
querystringYesOne GAQL SELECT, e.g. SELECT campaign.name, metrics.cost_micros FROM campaign WHERE segments.date DURING LAST_30_DAYS ORDER BY metrics.cost_micros DESC LIMIT 20. Up to 6000 characters.
max_rowsintegerNo200From 1 to 1000.

Products and segments

Find products worth a look, read everything Product Metrics knows about one product, and see how segments and categories are doing.

list_products_to_investigate

Products to investigate · Read-only · reads Product Metrics data · any workspace member

Ranked list of products that need attention now, across ads performance, web traffic, competitor prices, margin and stock. Ranked by severity and money at stake per week. Start here when the user asks what to look at, what changed or where money is lost. Each row has the decision (push/hold/reduce/pause) and its strongest signal; call get_product_context for the full picture. Filter by segment or category to drill into a group from summarize_groups; then the reply can also list the group’s highest-spend products the assistant does not store (beyondStore: ad totals only, no decision).

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
signal_kindsarray of enumNoOnly products with at least one of these signals. Each one of ads_performance_drop, traffic_drop, priced_above_market, competitor_price_drop, stock_risk, slow_mover, spend_while_out_of_stock, below_break_even, scale_opportunity.
actionenumNoOnly products with this decision. One of push, hold, reduce, pause.
sortenumNoattention (default): products that need attention, most urgent first. spend / conversion_value: every stored product by ad spend or by conversion value (sales from ads) in the window, also those with nothing to investigate; use them for the top spenders and the best sellers. One of attention, spend, conversion_value.
segmentenumNoOnly products in this Product Segmentation segment (see summarize_groups by=‘segment’). One of stars, question_marks, cash_cows, dogs, drainers, ghosts.
categorystringNoOnly products with this value of the category column (see summarize_groups by=‘category’); ‘Unknown’ for products without one. Up to 200 characters.
limitintegerNo10From 1 to 50.
cursorstringNonextCursor from a previous page.

search_products

Search products · Read-only · reads Product Metrics data · any workspace member

Find products by title, brand, item_id, offer id or product type. Use when the user names a product; returns item_ids for the other tools.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
querystringYesWords from the title or brand, or an id. Up to 200 characters.
limitintegerNo10From 1 to 25.

get_product_context

Product Context · Read-only · reads Product Metrics data · any workspace member

Full Product Context for up to 10 products: the five layers (advertising, journeys, market prices, margin, inventory) with their freshness, the decision with each layer’s vote and reason, signals and suggested Merchant Center labels. detail=‘detailed’ adds the figures behind the layers: advertising window totals and series summaries, journey next buys, competitor rows, and stock planning (weekly sales, cover, stockout and reorder dates, suggested quantity, lead time). Use it when the answer needs those figures; concise is enough to explain a decision.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
item_idsarray of stringYes1 to 10 items.
detailenumNoconciseOne of concise, detailed.

summarize_groups

Segments and categories · Read-only · reads Product Metrics data · any workspace member

Totals per Product Segmentation segment (Stars, Cash Cows, Question Marks, Dogs, Drainers, Ghosts) or per value of the property’s category column: products, spend, conversion value, ROAS, share of spend and of conversion value, and the mix of decisions (push/hold/reduce/pause). With coverage ‘catalogue’ the totals cover every product in the catalogue; the decision mix only counts the products the assistant stores (storedProducts). Use for questions about a segment or category, or where spend goes without conversions; then drill in with list_products_to_investigate segment/category. Totals are for Product Segmentation’s date range; there is no previous period. The segments: Stars sell at volume at or above target; Cash Cows return strongly on smaller volume; Question Marks are mid performers, or above target on too little traffic; Dogs had enough traffic and stayed below par; Drainers take clicks and spend with little or no conversion value (and low-volume products that never got enough traffic to be judged); Ghosts get impressions but no clicks.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
byenumYessegment, or category (the property’s category column). One of segment, category.
limitintegerNo20Most groups, by spend. From 1 to 50.

get_changes

What changed · Read-only · reads Product Metrics data · any workspace member

What changed in the property, precomputed at the last refresh: the last delivered week against the week before (spend, conversion value, ROAS) for all products and per segment or category; the products that gained or lost the most conversion value and those whose spend rose most; signals that appeared or cleared and decisions that changed since about a week ago; and how much of the ad spend the daily history covers. Start here for ‘what changed’, ‘how was this week’, a weekly briefing or ‘anything unusual’, then drill into products with get_product_context or get_product_timeseries. Week figures cover only the products with daily history (see coverage): name the two weeks’ dates and how much of the spend the history covers.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
group_byenumNosegmentBreak the week-over-week totals down by segment or by category. One of segment, category.
limitintegerNo5Products per list (risers, fallers, spend up, new and cleared signals). From 1 to 20.

get_insights

Store insights · Read-only · reads Product Metrics data · any workspace member

Store insights, precomputed per feed after the nightly feed run: Stars that run out of stock while advertised (dashboard_run_out), return rates per category (category_returns), break-even ROAS of Shopping and Performance Max campaigns (campaign_break_even, information only), low-stock products that the next save would put in Stars (save_settings_stock) and products where competitors undercut us while we spend (competitor_comparison). Each card has a state: ready (shown in the app), below_threshold (computed, too little at stake to show) or not_applicable (a source is missing: say which and how to connect it). Population: every catalogue item matched to a Google Ads item of the feed, not only the products get_product_context stores; computed for properties with a Product Segmentation subscription only. Quote the numbers with their dataAsOf per source and the footnote; describe what happened together, never a cause, and never turn break-even into a bid change.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
spotsarray of enumNoOnly these spots. Each one of dashboard_run_out, category_returns, campaign_break_even, save_settings_stock, competitor_comparison. 1 to 5 items.
feed_keystringNoOnly this feed’s cards (feedKey of an earlier result). Up to 200 characters.
limitintegerNo10From 1 to 20.

get_highlights

Product Segmentation highlights · Read-only · reads Product Metrics data · any workspace member

The property’s Product Segmentation highlights over its saved date range: revenue, ad spend and ROAS in total, the spend going to Drainers (products that spend without returning) and the ROAS Product Segmentation estimates if that spend earned what Stars and Question Marks earn. Use for how the account is doing overall, to size the waste before drilling into products, or to open a monitoring update. These are Product Segmentation’s numbers and segments: explain them, never relabel products or promise the uplift.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.

get_inventory_state

Inventory state · Read-only · reads Product Metrics data · any workspace member

Stock from the connected shop: on hand, units sold per week, weeks of cover, stockout and reorder dates, the suggested reorder quantity and slow movers, with the lead time behind them. Pass item_ids for specific products, or leave them out and pick a filter (‘reorder_due’, ‘slow_movers’ or ‘all’) to list the shop’s products that need stock attention; list rows carry the shop’s product id, variant id and SKU (search_products with the SKU finds the item_id). Use for stock, reorder and ‘can we keep advertising this’ questions. Reorder dates and quantities are the planner’s: report them, do not order or pause anything.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
item_idsarray of stringNo1 to 20 items.
filterenumNoList mode, without item_ids; default ‘all’. One of reorder_due, slow_movers, all.
limitintegerNo20From 1 to 50.
cursorstringNonextCursor from a previous page. Up to 2048 characters.

get_competitor_offers

Competitor offers · Read-only · reads Product Metrics data · any workspace member

The latest price of every seller of one product from the competitor price scraper over the last days: our own offer first, then competitors from cheapest, each with its gap to our price in percent and when it was seen. Use for ‘who is cheaper’, ‘what does this seller charge’ or to check a price-position signal from get_product_context. One product per call: to rank many products use the market layer of get_product_context instead. Report the gaps and their age; price and label changes are the merchant’s and the algorithm’s call.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
item_idstringYesMerchant Center item_id as returned by another tool; a lake canonical_item_id or GA4 item id also works when it matches one item after ignoring case and punctuation.
daysintegerNo30From 1 to 90.

History

Day-by-day history of a product, a group of products or the segments.

get_product_timeseries

Product history · Read-only · reads Product Metrics data · any workspace member

Daily or weekly history for one product. By default returns a summary per measure (total, recent change, trend per week, level shift date, outliers), which is what you should reason from. Ask for format=‘csv’ only when you must inspect individual points; prefer grain=‘week’ for more than 60 days. History holds about 90 days, for the top products by spend only, and only the measures the sources record (ad and session measures; stock, price and gross profit series only where connected): the result names measures that are not recorded. Ratios such as ROAS/POAS are not series: compute them from the summed measures, or use the advertising window in get_product_context.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
item_idstringYesMerchant Center item_id as returned by another tool; a lake canonical_item_id or GA4 item id also works when it matches one item after ignoring case and punctuation.
measuresarray of enumNo["clicks","cost","conversionValue"]Which measures to return. Each one of impressions, clicks, cost, conversions, conversionValue, grossProfit, sessions, purchases, unitsSold, onHand, ownPrice, marketMedianPrice. 1 to 6 items.
daysintegerNo90How many days back from the latest day with data (about 90 are stored). From 7 to 400.
grainenumNodayDaily points, or weeks summed. One of day, week.
formatenumNosummarysummary: totals, change, trend and level shifts per measure; csv: every point. One of summary, csv.

get_group_timeseries

Group history · Read-only · reads Product Metrics data · any workspace member

Summed daily or weekly history across several products: the top products by ad spend or conversion value (optionally within a Product Segmentation segment or a category), or a list of item_ids. Use it for the trend of a group or the portfolio (is revenue growing, week by week for our top 20, did a segment change) instead of reading products one by one. Returns the summed series as a table, a summary per measure, the dates the data covers and how many of the products have history (only some do): say which products and weeks the result covers. Ratios such as ROAS come from the summed conversionValue and cost.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
item_idsarray of stringNoThese products instead of a ranked selection. 1 to 50 items.
top_byenumNospendRank the stored products by ad spend or by conversion value. One of spend, conversion_value.
segmentenumNoOnly products in this Product Segmentation segment. One of stars, question_marks, cash_cows, dogs, drainers, ghosts.
categorystringNoOnly products with this value of the category column. Up to 200 characters.
limitintegerNo20How many products to add up. From 1 to 50.
measuresarray of enumNo["clicks","cost","conversionValue"]Additive measures (and onHand); prices cannot be added up. Each one of impressions, clicks, cost, conversions, conversionValue, grossProfit, sessions, purchases, unitsSold, onHand, ownPrice, marketMedianPrice. 1 to 6 items.
daysintegerNo56How many days back from the latest day with data (about 90 are stored). From 7 to 400.
grainenumNoweekWeeks summed, or daily points (a table of the days for up to 31 days). One of day, week.

get_segment_history

Segment history · Read-only · reads Product Metrics data · any workspace member

How one product moved between segments (stars, cash_cows, question_marks, dogs, drainers, ghosts, or not_in_feed) over the last days, from the daily segment snapshots of its feed. Each move comes with the product’s Google Ads spend and conversion value in the 7 days before vs the 7 days from the move (null where not cached) and the campaign and Product Segmentation settings changes within 7 days of it. Use when the user asks why a product changed segment, when it dropped out of Stars or Cash Cows, or whether a move followed a settings change; point to the spend and value before vs after the move and the changes around it. A segment describes the 30 days of results before the day it was captured: say plainly that it explains the past and does not predict future profit.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
item_idstringYesMerchant Center item_id as returned by another tool; a lake canonical_item_id or GA4 item id also works when it matches one item after ignoring case and punctuation.
daysintegerNo90From 7 to 400.

Proposals

File a proposed change for a person to approve in Priorities, and list existing proposals. Filing a proposal never changes Google Ads or the store by itself.

propose_change

Propose a change · Files a proposal · reads Product Metrics data · editors and admins only

Propose a change for a person to approve: a Merchant Center custom label, a priority, or a task (e.g. reorder). Nothing is written to Merchant Center until a person approves it. Always pass the context_version you based the proposal on and a rationale that cites the layers and signals behind it.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
item_idstringYesMerchant Center item_id as returned by another tool; a lake canonical_item_id or GA4 item id also works when it matches one item after ignoring case and punctuation.
changeobject { kind, slot, from, to } or object { kind, from, to } or object { kind, text }Yesset_label (slot, from, to), set_priority, or a task with its text.
rationalestringYesWhy, citing the layers and signals behind it (at least 20 characters). Up to 2000 characters.
context_versionstringYescontextVersion of the product context the proposal is based on.

list_proposals

Proposals · Read-only · reads Product Metrics data · any workspace member

Proposals in the Priorities ledger with their status and, once measured, an outcome: the 28 days after the change was applied versus the 28 days before. An outcome with verdict “causal” carries outcome.did, an estimate against matched products that did not change: causal: compared with matched products that did not change, the 95% interval of the effect excludes zero and a placebo check 28 days earlier found none. Only for that verdict may you say the change caused the effect, quoting the estimate and its interval. Every other outcome is directional: before/after, may reflect season, budget or competitors: report how the numbers moved and never say the change caused it. Use to avoid duplicate proposals and to report how metrics moved after earlier changes.

ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
statusarray of enumNoEach one of proposed, approved, rejected, superseded, expired, applied, failed, measured.
item_idstringNoMerchant Center item_id as returned by another tool; a lake canonical_item_id or GA4 item id also works when it matches one item after ignoring case and punctuation.
limitintegerNo20From 1 to 50.

Advanced

Raw SQL over the store’s data, for questions the other tools cannot answer.

query_lake

Query the lake · Read-only · reads Product Metrics data · any workspace member · counts towards the hourly limit for expensive tools

Last resort, costing far more than the other tools: one read-only SELECT over this property’s lake tables, for what they cannot answer, e.g. a custom daily breakdown, a total across all products or a window the context does not hold. Use the logical table names below exactly (the tenant scope is applied for you). Lake column names are not the other tools’ field names: use the columns listed below and the mapping after them. No comments, UNION or writes. Results are capped and carry the data age per source; dates outside a table’s range are missing, not zero, so state the first and last date the result covers. Aggregate in SQL; never select raw rows you do not need.

In your assistant, this tool’s description also lists every table and column the store’s data lake holds; that list is not repeated here.
ArgumentTypeRequiredDefaultDescription
property_idstringNoThe store to read: a propertyId from list_properties. Optional when you have access to one store only.
sqlstringYesOne SELECT statement; the tenant scope is applied for you. Up to 4000 characters.
max_rowsintegerNo100From 1 to 500.