merchant-feed — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited merchant-feed (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You build a feed-as-product-data discipline. In 2026, feed management is less about producing "a feed" and more about running a data product: continuously modifying attributes, enriching missing fields, validating quality, and tying changes to performance.
============================================================ === PRE-FLIGHT === ============================================================
subscription_cost).Recovery:
identifier_exists=false (Google allows this for niche brands) but expect lower performance.============================================================ === PHASE 1: CANONICAL PRODUCT SCHEMA === ============================================================
Build the single source of truth. Every channel feed projects from this:
{
"id": "SKU-12345",
"title": "...", // primary attribute for Google match
"description": "...",
"link": "https://...",
"mobile_link": "https://...", // optional but recommended
"image_link": "https://.../primary.jpg", // ≥ 500×500 (2026 requirement)
"additional_image_link": ["...", "..."], // up to 10
"availability": "in_stock|out_of_stock|preorder|backorder",
"availability_date": "2026-08-15", // if preorder
"price": "29.99 USD",
"sale_price": "24.99 USD",
"sale_price_effective_date": "2026-05-23T00:00-07:00/2026-06-30T23:59-07:00",
"brand": "...",
"gtin": "00012345678905",
"mpn": "...",
"identifier_exists": true,
"condition": "new|refurbished|used",
"google_product_category": "Apparel & Accessories > Clothing > Shirts & Tops",
"product_type": "Mens > Shirts > T-Shirts",
"color": "navy",
"size": "L",
"material": "100% cotton",
"gender": "male|female|unisex",
"age_group": "adult|kids|toddler|infant|newborn",
"item_group_id": "TSHIRT-001", // for variant grouping
"shipping": [{ "country": "US", "service": "Standard", "price": "4.99 USD" }],
"tax": [{ "country": "US", "region": "CA", "rate": 9.0, "tax_ship": true }],
"custom_label_0": "high_margin", // for ad bidding strategy
"custom_label_1": "summer_collection",
"custom_label_2": "best_seller",
"custom_label_3": "new_arrival",
"custom_label_4": "low_inventory",
"video": "https://.../product.mp4" // critical for TikTok Shop
}Persist as products.json with versioning (so feed history is auditable).
VALIDATION: 100% of products have id, title, description, link, image_link, availability, price, brand. ≥ 90% have GTIN.
============================================================ === PHASE 2: TITLE OPTIMIZATION === ============================================================
Title is the highest-leverage attribute for Google matching. Use this structure:
[Brand] [Product Type] [Key Attribute] [Variant] [Size/Quantity]
Examples:
Title cap: 150 chars (Google), 65 chars displayed in shopping results. Front-load the most important info.
Maintain a per-product title A/B test queue: rotate one new variant per category per month, measure CTR + ROAS at the keyword level via Search Terms Report.
VALIDATION: Median title length 60-120 chars. No "AAA-promo" stuffing or all-caps.
============================================================ === PHASE 3: PER-CHANNEL FEED PROJECTION === ============================================================
Project the canonical product into each channel's format:
Google Merchant Center (XML or TSV):
sale_price_effective_date to qualify as a deal.Meta Catalog (CSV or Catalog Batch API):
availability (lowercase: in stock / out of stock).inventory (numeric count) for ads with low-stock urgency.applinks for app-deep-link, rich_text_description for Shops.home_listing for real estate variant, flight for travel variant.TikTok Shop (TSV or Commerce API):
tiktok_video_url field.Pinterest Catalogs:
additional_image_link (5+) outperforms single-image listings.Bing Shopping (close to GMC format):
Snap Catalogs:
age_group, gender) for AR try-on eligibility.Generate per-channel projection in feeds/{channel}/{date}.{ext}.
VALIDATION: Each channel feed validates against the platform's spec (use vendor schema validators / spec linters).
============================================================ === PHASE 4: VALIDATION & DISAPPROVAL PREVENTION === ============================================================
Before submission, run pre-flight checks:
| Check | Failure mode | Fix |
|---|---|---|
| Image ≥ 500×500 (Google 2026) | Disapproval warning Apr→reject Jan 2027 | Auto-upscale via CDN transform |
| Title length 30-150 | Truncation in SERP | Tighten to 60-90 chars |
| Description ≥ 30 words | Low relevance score | Auto-augment with attribute join |
| Price > 0 and matches landing page | Price mismatch disapproval | Verify scrape of landing page price |
| GTIN valid checksum | Invalid GTIN disapproval | Validate UPC/EAN/ISBN checksum |
| Availability matches landing | "Out of stock" mismatch | Scrape landing inventory status |
| Brand present | Limited performance | Default to store brand if missing |
| Required GPC category for restricted | Disapproval (apparel needs color+size+age_group+gender) | Enforce per category rules |
| Restricted content | Disapproval (e.g., drug-related claims) | Run vocab filter |
| Landing page returns 200 | Broken landing disapproval | Crawl + verify before submit |
Output feed_validation_{date}.md with per-SKU issues.
VALIDATION: Pre-submission validation catches > 95% of issues that would otherwise be caught downstream.
============================================================ === PHASE 5: WEEKLY FEED AUDIT CRON === ============================================================
Schedule a weekly task (Mondays, post-weekend sales data):
Generate weekly_audit_{date}.md digest.
VALIDATION: SLA met for ≥ 95% of disapprovals.
============================================================ === PHASE 6: PERFORMANCE FEEDBACK LOOP === ============================================================
Tie feed changes back to performance:
impressions, clicks, conversions, cost, revenue per SKU per channel.VALIDATION: Performance attribution joins canonical product ID to channel SKU ID without drift.
============================================================ === PHASE 7: OUTPUT PACKAGE === ============================================================
merchant-feed/
├── README.md
├── products.json # canonical
├── feeds/
│ ├── google/products.xml
│ ├── meta/products.csv
│ ├── tiktok/products.tsv
│ ├── pinterest/products.csv
│ ├── bing/products.xml
│ └── snap/products.csv
├── validation/
│ └── feed_validation_{date}.md
├── audit/
│ └── weekly_audit_{date}.md
├── tests/
│ └── title_ab_tests.csv # active title variants per SKU
└── perf/
└── sku_performance_{date}.csvVALIDATION: Every channel feed validates and submits without disapproval.
============================================================ === SELF-REVIEW === ============================================================
Common gap: image upscale missing → silent quality degradation. Verify CDN transform pipeline.
============================================================ === LEARNINGS CAPTURE === ============================================================
~/.claude/skills/merchant-feed/LEARNINGS.md.
============================================================ === STRICT RULES === ============================================================
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.