The storefront, not the platform



get_products. The loyalty data powers closed-loop attribution reported through standard delivery metrics. The store locations are modeled as catalogs with catchment areas for proximity targeting.

Concept mapping
| Retail media concept | AdCP equivalent | Reference |
|---|---|---|
| Retailer / retail media network | Sales agent (MCP server) | adagents.json |
| Advertiser account with retailer | account_id + list_accounts | Accounts & Agents |
| Brand’s product catalog | brand.product_catalog | Brand identity |
| GTIN / SKU selection for promotion | Catalog selectors (ids, gtins, tags) on Catalog | Catalogs |
| Sponsored product listing | Product with catalog-rendered creative | Creative Formats |
| On-site display / video | Product with standard format_ids | Media Products |
| Retailer first-party audience | Brief-based; named segments via data_provider_signals | Targeting |
| ROAS target / max conversions | optimization_goals on package | Optimization & Reporting |
| Closed-loop measurement | outcome_measurement + conversion_tracking on product | Delivery Reporting |
| Attribution window (14d click, 1d view) | attribution_window in delivery response | Delivery Reporting |
| ROAS / attributed revenue | roas, conversion_value in delivery metrics | Delivery Reporting |
| In-store attribution | by_action_source with in_store | Delivery Reporting |
| Store locations / store locator | Store catalog (seller-provided or buyer-synced) | Catalogs — Stores |
| Real-time inventory / in-stock | Inventory catalog via sync_catalogs | Catalogs |
| Proximity / catchment targeting | Store catchment areas (isochrone, radius, GeoJSON) | Catalogs — Catchment areas |
list_accounts and account on media buys — see Accounts & Agents.
The product spectrum
Retail media networks offer diverse product types — not just sponsored listings. All share theretail_media channel, but differ in format, pricing, and creative requirements. Daniel modeled ShopGrid’s full portfolio as separate products so buyer agents can mix and match across the funnel.
Sponsored product listings
The simplest commerce media product. The retailer renders the creative from the buyer’s product catalog — no custom creative upload needed. Pricing is typically CPC.catalog_types field declares what catalog types this product supports. The catalog_match field tells the buyer which of their catalog items are eligible on this retailer. Buyers use these values as catalog selectors (gtins, ids) when creating media buys — the same way publisher_properties lists available properties for refinement. Sellers can include matched_gtins, matched_ids, or both.
Sponsored product listings are catalog-rendered — the retailer pulls title, price, image, and rating from its own catalog data matched via GTIN. Enhanced product content (comparison charts, lifestyle galleries, brand story modules) and brand stores are complementary content strategies managed through the retailer’s content systems, not through the ad buy.
Key characteristics:
- CPC pricing with auction-based bidding
platform_managed: true— the retailer provides always-on purchase attributionsupported_targets— tells buyers which target kinds are available when settingoptimization_goalson packagestemplates_available: true— the retailer renders creatives from catalog dataaction_sourcesincludesin_storefor omnichannel attribution
On-site display and video
Display and video ads on retailer properties, targeted using retailer first-party shopper data. Buyers provide standard creatives. Higher minimums and CPMs reflect the value of retailer audience data and guaranteed placement.Off-site audience extension
The retailer uses first-party purchase data to target audiences on third-party inventory — extending reach beyond the retailer’s own site. The product still belongs to theretail_media channel because the buying context is the retailer’s data asset.
Premium placements
Homepage takeovers, category sponsorships, seasonal event placements. These high-visibility positions are sold at fixed rates with guaranteed delivery — often booked well in advance.placements array so buyers can assign different creatives to different positions within the same product.
In-store digital
Digital screens in physical retail locations — checkout lanes, end-caps, entrance displays, and waiting areas. These bridge the digital-physical gap, with measurement tied to in-store purchases. When paired with a synced store catalog, in-store digital products can target specific locations and show inventory-aware creative. In-store is where retail media networks have inventory that no one else can replicate. A retailer with thousands of physical locations has screens at the point of purchase — reaching shoppers while they’re browsing aisles, comparing products at the shelf, and waiting in line. Many of these shoppers never see digital ads elsewhere: they shop in-store exclusively, making them unreachable through online channels.Beyond these examples
Retail media portfolios often extend beyond the five product types above. Sponsored brand ads — a headline, brand logo, and 2-3 featured products — sit between sponsored product listings and display, with a custom headline from the buyer and catalog-rendered product tiles. Digital coupons and cashback offers tie directly to purchase and don’t fit neatly into impression-based models — they can be modeled as products with CPA pricing andconversion_tracking. Sponsored placements in retailer email newsletters and app push notifications are high-performing, low-funnel products modeled the same way as on-site display with different format_ids. Shoppable video — where products are tagged within the video frame and viewers can add items to cart — combines video formats with catalog-rendered product overlays. Keyword-level search sponsorships, sampling programs, and recipe integrations each have distinct economics but follow the same pattern: a product with the right pricing model, format, and measurement declarations.
End-to-end workflow
The buyer provides a brand reference that includes their product catalog feed. This enables SKU-level targeting and catalog-rendered creatives:
{
"name": "Summit Foods",
"url": "https://summitfoods.example.com",
"product_catalog": {
"feed_url": "https://summitfoods.example.com/products.xml",
"feed_format": "google_merchant_center",
"categories": ["food/sauces", "food/condiments", "beverages"],
"update_frequency": "daily"
}
}
The feed contains GTINs, titles, prices, and images — everything needed to render sponsored product listings and match products across retailers.
Before creating media buys, sync the brand’s data feeds to the retailer’s account via
sync_catalogs. This builds account state that creatives and targeting reference at serve time. See Account state for how this fits the broader setup sequence.{
"account": { "account_id": "acct_summitfoods_shopgrid_001" },
"catalogs": [
{
"catalog_id": "product-feed",
"name": "Summit Foods Product Catalog",
"type": "product",
"url": "https://summitfoods.example.com/products.xml",
"feed_format": "google_merchant_center",
"update_frequency": "daily"
},
{
"catalog_id": "inventory-feed",
"name": "Store-Level Inventory",
"type": "inventory",
"url": "https://feeds.summitfoods.example.com/inventory.json",
"feed_format": "custom",
"update_frequency": "hourly"
}
]
}
Store locations are seller-provided, not buyer-synced. In retail media, the retailer owns their store locations — a CPG brand doesn’t sync the retailer’s stores to the retailer. The retailer’s store catalog (with catchment areas for proximity targeting) is platform-side data that the buyer can reference in targeting. Buyers who operate their own physical locations (e.g., a DTC brand with retail stores, a restaurant chain) would sync their store catalogs to other platforms via
sync_catalogs.Formats that require synced catalogs declare
catalog asset types in their assets array — the buying agent checks these before submitting creatives. A sponsored product carousel might require both a product and inventory catalog.Query
get_products with channels: ["retail_media"] to find commerce media products. The brand identity enables the seller to filter by catalog eligibility, and the keywords filter signals search terms you want to target so the seller can assess availability and recommend products where those terms are actionable:{
"brief": "Promote our organic ketchup line across grocery retailers. Focus on high-intent shoppers.",
"brand": {
"domain": "summitfoods.example.com"
},
"filters": {
"channels": ["retail_media"],
"keywords": [
{ "keyword": "organic ketchup", "match_type": "exact" },
{ "keyword": "condiments" }
]
}
}
The seller returns products where the buyer’s GTINs have matches in the retailer’s catalog. A multi-product retailer might return sponsored products, on-site display, and off-site extension as separate products.
For sponsored product listings, sellers include
catalog_match on each product to indicate which of the buyer’s catalog items are eligible:{
"product_id": "shopgrid_sponsored_products",
"catalog_match": {
"matched_gtins": ["00013000006408", "00013000006415", "..."],
"matched_count": 3,
"submitted_count": 1200
}
}
This tells the buyer which GTINs are eligible on this retailer and how many of their total catalog items were evaluated. Buyers use
matched_gtins values as catalog gtins selectors when creating media buys — or use broader selectors like tags and category knowing the catalog coverage.Sellers can also return proposals with recommended budget allocations across product types — encoding media planning expertise that traditionally required human sales reps.
A single media buy can span multiple product types and retailers. Each package targets a different product:
{
"account": { "account_id": "acct_summitfoods_shopgrid_001" },
"brand": {
"domain": "summitfoods.example.com"
},
"start_time": "2026-04-01T00:00:00Z",
"end_time": "2026-04-30T23:59:59Z",
"packages": [
{
"product_id": "shopgrid_sponsored_products",
"pricing_option_id": "sp_cpc",
"budget": 15000,
"bid_price": 1.10,
"pacing": "even",
"optimization_goals": [{
"kind": "event",
"event_sources": [
{ "event_source_id": "shopgrid_purchases", "event_type": "purchase", "value_field": "value" }
],
"target": { "kind": "per_ad_spend", "value": 3.0 },
"priority": 1
}]
},
{
"product_id": "shopgrid_onsite_display",
"pricing_option_id": "onsite_cpm",
"budget": 25000,
"pacing": "even"
},
{
"product_id": "shopgrid_homepage_takeover",
"pricing_option_id": "takeover_flat",
"budget": 50000
}
]
}
The
account identifies the brand’s billing relationship with this retailer. The sponsored products package uses catalog selectors (gtins, tags) to specify which items to promote and optimization_goals with a per_ad_spend target to tell the retailer to optimize for 3x return on purchase value. The display and premium packages use standard creative workflows.Commerce media delivery reports include attribution metrics that traditional media lacks. The
attribution_window makes the measurement methodology transparent for cross-platform comparison:{
"reporting_period": {
"start": "2026-04-01T00:00:00Z",
"end": "2026-04-14T23:59:59Z"
},
"currency": "USD",
"attribution_window": {
"post_click": { "interval": 14, "unit": "days" },
"post_view": { "interval": 1, "unit": "days" },
"model": "last_touch"
},
"media_buy_deliveries": [
{
"media_buy_id": "mb_shopgrid_001",
"status": "active",
"totals": {
"impressions": 850000,
"spend": 10350
},
"by_package": [
{
"package_id": "pkg_sp_001",
"pricing_model": "cpc",
"rate": 0.92,
"currency": "USD",
"impressions": 850000,
"spend": 10350,
"clicks": 11250,
"conversions": 2100,
"conversion_value": 28500,
"roas": 2.75,
"cost_per_acquisition": 4.93,
"by_action_source": [
{ "action_source": "website", "count": 1500, "value": 20000 },
{ "action_source": "app", "count": 350, "value": 4800 },
{ "action_source": "in_store", "count": 250, "value": 3700 }
],
"delivery_status": "delivering"
}
]
}
]
}
Closed-loop attribution

How products declare it
Products signal closed-loop capability through two fields:outcome_measurement describes the attribution methodology:
conversion_tracking declares action sources and whether the retailer manages measurement:
platform_managed is true, the retailer provides always-on measurement. No buyer-side pixel or event source configuration needed.
Different retailers use different attribution windows (e.g., 14-day click vs. 7-day click). The
attribution_window in delivery responses makes this transparent so buyers can normalize ROAS comparisons across retailers.Key delivery metrics
| Metric | Field | Description |
|---|---|---|
| Return on ad spend | roas | conversion_value / spend |
| Attributed revenue | conversion_value | Total purchase value attributed to ads |
| Conversions | conversions | Purchase events attributed to ads |
| Cost per acquisition | cost_per_acquisition | spend / conversions |
| New-to-brand rate | new_to_brand_rate | Fraction of conversions from first-time brand buyers |
| In-store sales | by_action_source | Breakdown by website, app, in_store |
| By event type | by_event_type | Breakdown by purchase, add_to_cart, etc. |

Differences from traditional media buying
| Aspect | Traditional media | Commerce media |
|---|---|---|
| Attribution | Probabilistic, modeled | Deterministic, purchase-based |
| Targeting data | Third-party, contextual | First-party purchase/loyalty data |
| Primary KPIs | Impressions, clicks, CTR | ROAS, conversions, attributed revenue |
| Creative (sponsored) | Buyer-provided | Catalog-rendered by retailer |
| Measurement owner | Third-party (IAS, DV) | Retailer platform (platform_managed) |
| Conversion sources | Website only | Website + app + in-store |
| Landing page | Any destination | Often retailer site only |
| Pricing models | CPM, CPC, CPCV | CPC (sponsored), CPM (display), flat rate (premium) |
Best practices
For retailers: standing up an agentic storefront
The default retail media playbook — build a self-service platform, hire a sales team, grow managed service revenue, eventually build a DSP — works for the largest retailers. For everyone else, it means years of engineering investment competing against platforms with orders-of-magnitude more resources. An agentic storefront changes the economics. Instead of building a platform that brands must learn, you expose your inventory through a standard protocol that buyer agents already speak. Your engineering investment goes into your actual differentiators — data quality, measurement accuracy, inventory breadth — not into dashboard UX.- Model product types separately — sponsored products, on-site display, off-site, premium placements, and in-store digital should be distinct products with appropriate pricing and formats. This is how buyer agents comparison-shop across retailers.
- Lead with your data — declare
outcome_measurementwithdeterministic_purchaseattribution andconversion_trackingwithplatform_managed: true. This is what buyer agents optimize against. Retailers with weak measurement lose to retailers with strong measurement, regardless of UI quality. - Expose your physical footprint — provide store catalogs with catchment areas so buyer agents can target by geography. In-store digital inventory is something no online-only platform can offer. Make it discoverable.
- Return
catalog_matchon sponsored product listings so buyers see which GTINs/SKUs are eligible. This is the equivalent of a sales rep saying “we carry 3 of your 1,200 products” — but it happens automatically at query time. - Include
attribution_windowin delivery responses — buyers comparing across retailers need to know your lookback windows and model. - Report
by_action_sourceto show omnichannel impact — website, app, and in-store conversions. The cross-channel view is unique to commerce media and drives budget allocation. - Use proposals — return recommended budget allocations across product types with
get_productsresponses. This encodes your media planning expertise into the protocol, replacing the sales rep conversation with structured data that buyer agents can evaluate. - Set
channels: ["retail_media"]on all commerce media products so buyers can filter by channel.
For brands
- Set up accounts early — use
list_accountsto confirm your billing relationship with each retailer before placing buys - Sync product and inventory feeds early — product and inventory catalogs should be synced to the account before creating buys. Inventory feeds update hourly; product feeds daily.
- Reference retailer store catalogs in targeting — the retailer’s store locations and catchment areas are platform-side data. Use them for proximity targeting without needing to sync your own store catalog.
- Use
optimization_goals— set event goals withcost_perorper_ad_spendtargets on packages to let the retailer optimize delivery against their purchase data - Use catalog selectors strategically —
gtinsfor specific products,tagsorcategoryfor broad promotions - Budget across the funnel — sponsored products for conversion, on-site display for awareness, off-site for reach extension
- Compare attribution windows — use
attribution_windowin delivery reports to normalize ROAS across retailers with different lookback windows
Related documentation
- Account state — How catalogs, event sources, and campaigns build on the account
- Accounts & Agents — Account setup and billing relationships
- Media Channel Taxonomy —
retail_mediachannel definition - Media Products — Product model reference
- Catalogs — Product, inventory, store, and promotion feeds
- Brand identity — Product catalog and brand identity
- Pricing Models — CPC, CPM, flat rate details
- Optimization & Reporting —
optimization_goalsand conversion optimization - Delivery Reporting — Commerce attribution metrics
- Targeting — Brief-based targeting approach