CtrlK
BlogDocsLog inGet started
Tessl Logo
PluginPublic

kuudoai/kuudo-skills

22 Agent Skills for Amazon sellers and advertisers: Sponsored Products and Brands audits, search-term mining, budget pacing, DSP and Amazon Marketing Cloud, reporting, listing optimization and compliance, product images, repricing, FBA inbound, stockout, refunds, buyer messaging, and profitability. Built for Kuudo's hosted Amazon Ads and Selling Partner MCP servers; price, budget, listing, and shipment writes are previewed and wait for explicit approval.

68

1.65x
Quality

93%

Does it follow best practices?

Impact

66%

1.65x

Average score across 22 eval scenarios

SecuritybySnyk

Medium

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

audience.mdskills/amazon-ads-reporting/references/reports/sp/

Amazon Ads API v1 Report Template

Equivalent to v3 Sponsored_Products_Audience_report — 16 v3 columns mapped to v1 fields

Summary

This template replicates the v3 Sponsored Products Audience report on the Amazon Ads API v1 cross-product reporting endpoint (CreateReport). 15 of 16 v3 columns map cleanly to v1 fields; 1 ('Retailer') has no v1 equivalent.

The single most important mapping decision in this report: 'Audience Name' maps to target.value, NOT audienceSegment.name. The v1 audienceSegment. dimension family is for Amazon DSP, and the validator explicitly rejects every combination of audienceSegment with conversion metrics. Using the wrong field family would silently break the report.*

The 19-field payload was validated against the packaged v1 catalog: zero unknown fields, zero missing required, zero incompatible pairs.

Why 'Audience Name' is target.value

Sponsored Products has three target types: keywords, products, and audiences. All three are stored in the same dimensional family — target.value (the targeting expression) and target.matchType (the modifier, when applicable). When an audience-type target serves an impression, target.value carries the audience expression — typically something like views(asin="B0...") for retargeting, purchases(asin="B0...") for cross-sell, or lookalike(...) for similar-shopper targeting.

The v1 catalog also has an audienceSegment.* family (audienceSegment.id, audienceSegment.name, audienceSegment.type, audienceSegment.classCode, audienceSegment.marketplace, etc.). These are used in Amazon DSP audience-segment reporting, where audience segments are an independent dimensional axis from campaigns and ads. Validator probes confirm: audienceSegment.id and audienceSegment.name are INCOMPATIBLE with metric.sales, metric.purchases, metric.unitsSold, metric.roas, and every Halo/Promoted/FromClicks variant. They cannot be used in an SP audience report.

If you need to produce a report ONLY for audience targets (not keyword or product targets), the cleanest approach is to filter target.value downstream by audience-expression prefix. SP audience expressions typically start with views(, purchases(, lookalike(, similarToPurchasers(, or matchProduct(. The exact prefixes can vary; sample your campaign data to confirm the patterns in use.

Field list (grouped by role)

Time dimension (exactly one required)

  • date.value

Level-of-detail dimensions

  • portfolio.portfolioId
  • portfolio.name
  • campaign.id
  • campaign.name
  • campaign.currencyCode
  • country.code
  • country.name
  • target.value

Required supporting field

  • budgetCurrency.value

Delivery & conversion metrics

  • metric.impressions
  • metric.clicks
  • metric.ctr
  • metric.cpc
  • metric.totalCost
  • metric.sales
  • metric.purchases
  • metric.unitsSold
  • metric.roas

Filter (limits the report to SP)

  • adProduct.value = SPONSORED_PRODUCTS

v3 → v1 field mapping

v3 Column (Sponsored_Products_Audience)v1 field_idRoleNotes
Datedate.valueTime dimensionRequired time dimension.
Portfolio nameportfolio.nameDimensionPair with portfolio.portfolioId.
—portfolio.portfolioIdDimensionStable join key.
Currencycampaign.currencyCodeDimensionPair with budgetCurrency.value.
Campaign Namecampaign.nameDimensionPair with campaign.id.
—campaign.idDimensionStable join key.
Retailer(no v1 equivalent — drop)DimensionValidator returns retailer.* as unknown. country.code already partitions Amazon's regional marketplaces.
Countrycountry.nameDimensionPair with country.code.
—country.codeDimensionISO country code.
Audience Nametarget.value (NOT audienceSegment.name)DimensionCRITICAL MAPPING NOTE: 'Audience Name' maps to target.value, NOT audienceSegment.name. SP audiences are one of three target types (alongside keywords and products). When an audience target serves an impression, target.value carries the audience expression (e.g. views(asin=...) or purchases(asin=...) or lookalike(...) ). The audienceSegment.* family in the v1 catalog is for Amazon DSP audience-segment reports — validator-confirmed incompatible with metric.sales/purchases/unitsSold/roas (and all click-only and halo/promoted variants). Using audienceSegment.* would break the report.
—budgetCurrency.valueRequired supportv1 minimal-baseline supporting field for currency-denominated metrics.
Impressionsmetric.impressionsMetricDirect.
Clicksmetric.clicksMetricDirect.
Click-Thru Rate (CTR)metric.ctrMetricDirect.
Cost Per Click (CPC)metric.cpcMetricDirect.
ROASmetric.roasMetricDirect.
Spendmetric.totalCostMetricv1 renames 'spend' to totalCost.
Salesmetric.salesMetricAll-attribution sales. The attribution window is set on the report request.
Ordersmetric.purchasesMetricEquivalent — orders → purchases.
Units soldmetric.unitsSoldMetricDirect.

Yellow row: Retailer has no v1 equivalent. The Audience Name row is highlighted because the mapping is non-obvious and getting it wrong silently breaks the report.

Critical differences from the v3 report

ChangeWhat it means for the request
'Audience Name' maps to target.value, NOT audienceSegment.nameThis is the most important difference in this report. The v1 catalog has an audienceSegment.* dimension family, but it's intended for Amazon DSP audience-segment reports — the validator confirms incompatibility with every conversion metric (metric.sales, metric.purchases, metric.unitsSold, metric.roas, plus their FromClicks/FromViews/Halo/Promoted variants). For Sponsored Products, audiences are one of three target types alongside keywords and products. When an SP audience target serves an impression, the audience expression (e.g. views(asin=...), purchases(asin=...), lookalike(...) ) is stored in target.value — the same field that carries keyword expressions and product-target expressions. Using audienceSegment.* would silently break the report.
The v3 SP Audience report is structurally a slice of SP Targeting filtered to audience targetsThe same v1 query that produces the SP Targeting report produces the SP Audience data — there is no separate SP-audience grain in v1. Recover the audience-only slice by filtering target.value downstream to audience expression patterns (typical prefixes: views(, purchases(, lookalike(, similarToPurchasers(, etc.). If you don't filter, you'll get keyword and product targets in the same dataset; this is fine if downstream consumers don't mind the broader scope.
No 'Retailer' dimensionRetailer.* fields are unknown to the v1 catalog. country.code already partitions Amazon's regional marketplaces.
Filter on adProduct.value = SPONSORED_PRODUCTSThe v1 endpoint is shared across all ad products.
No metric.acos fieldv3 doesn't include ACOS in this particular report (it's a slimmer column set than SP Targeting), but if you extend the report, derive as totalCost / NULLIF(sales, 0).
Attribution window leaves the field nameThe window (typically 7-day for SP) is set on the report request itself; metric.sales/purchases/unitsSold are window-agnostic field names.
'Spend' → metric.totalCostRenamed across all ad products in v1.

Operational notes

  • Recovering an audience-only slice: in the warehouse, use a filter like:
WHERE target.value LIKE 'views(%'
   OR target.value LIKE 'purchases(%'
   OR target.value LIKE 'lookalike(%'
   OR target.value LIKE 'similarToPurchasers(%'

Confirm the prefix list against your campaign data — Amazon's audience expression syntax can include other variants.

  • Reusing this template: this is essentially a slimmed SP Targeting report. If you also need keyword and product targets in the same query, drop the audience-expression filter downstream. If you need separate reports per target type, run this query once and partition target.value into three groups (keyword expressions, product targets like asin=, audience expressions) in the warehouse.

skills

LICENSE.md

README.md

tile.json