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
93%
Does it follow best practices?
Impact
66%
1.65xAverage score across 22 eval scenarios
Medium
Suggest reviewing before use
Use this file for reports produced by allv1_AdsApiv1CreateReport and downloaded via MCP. CSV headers are exactly the v1 field IDs from mcp-workflow.md (e.g. searchTerm.value, metric.totalCost). Do not use legacy Advertising Console column names (Customer Search Term, 7 Day Total Sales, …) — those are a different export.
import csv
with open(csv_path, encoding="utf-8") as f:
reader = csv.DictReader(f)
rows = list(reader)
REQUIRED_V1 = {
"date.value",
"searchTerm.value",
"metric.totalCost",
"metric.sales",
"metric.clicks",
"metric.impressions",
"metric.purchases",
"budgetCurrency.value",
}
if not rows:
raise ValueError("Empty CSV")
missing = REQUIRED_V1 - set(rows[0].keys())
if missing:
raise ValueError(f"Missing v1 columns: {missing}")searchTerm.value)import re
ASIN = re.compile(r"^B0[A-Z0-9]{8}$")
def is_asin_shaped(v: str) -> bool:
return bool(ASIN.match(str(v).strip().upper()))
customer_rows = [r for r in rows if not is_asin_shaped(r["searchTerm.value"])]
asin_rows = [r for r in rows if is_asin_shaped(r["searchTerm.value"])]Run gold / rising / keyword negatives on customer_rows only. Summarize asin_rows under product-targeting / PAT (not keyword negatives).
v1 search-term reports are typically multi-row per searchTerm.value (date × campaign × ad group). Always aggregate before segment rules.
from collections import defaultdict
agg = defaultdict(
lambda: {
"metric.totalCost": 0.0,
"metric.sales": 0.0,
"metric.clicks": 0,
"metric.impressions": 0,
"metric.purchases": 0,
}
)
for r in customer_rows:
t = r["searchTerm.value"]
agg[t]["metric.totalCost"] += float(r["metric.totalCost"] or 0)
agg[t]["metric.sales"] += float(r["metric.sales"] or 0)
agg[t]["metric.clicks"] += int(float(r["metric.clicks"] or 0))
agg[t]["metric.impressions"] += int(float(r["metric.impressions"] or 0))
agg[t]["metric.purchases"] += int(float(r["metric.purchases"] or 0))
# Derived (after aggregation):
# acos = cost / sales if sales > 0 else None
# cvr = orders / clicks if clicks > 0 else NoneFor brand/generic regex and threshold application, use the sibling references in this skill (agent-codegen-patterns.md Patterns 3–4, segment-rules.md, threshold-elicitation.md) — those are format-agnostic; only the column keys here are v1-specific.
metric.cost, metric.spend, metric.spendAmount as cost — rejected by the v1 endpoint; use metric.totalCost.metric.sales7d, metric.purchases7d, or other suffixed attribution fields on this CreateReport path — not supported here; use metric.sales / metric.purchases and disclose default attribution.keyword.text, keyword.value, keyword.matchType in the export — not available as v1 output fields in current catalog for this pattern..tessl-plugin
skills
amazon-ads-accounts
amazon-ads-budget-pacing
amazon-ads-create-dsp-campaign
amazon-ads-creative-assets
amazon-ads-marketing-cloud
amazon-ads-reporting
assets
templates
sb
references
tests
amazon-ads-sb-performance-review
amazon-ads-sp-campaign-auditor
amazon-ads-sp-search-term-explorer
amazon-product-image
amazon-profitability-calculator
amazon-sp-fba-inbound
amazon-sp-listing-compliance
amazon-sp-listing-optimizer
amazon-sp-messaging-api
amazon-sp-refund-return-monitor
amazon-sp-repricing
amazon-sp-sales-traffic-analyzer
amazon-sp-sqp-asin-ngram
amazon-sp-stockout-prevention
connect-to-kuudo
using-kuudo