Saylor InnovationsSAYLOR INNOVATIONS

Home / Guides / Content & Growth

Marketplace Product-Feed Cleaner

Content & Growth intermediate 6 min read Free Updated 2026-08-22

Method for producing a marketplace-ready product feed: normalize IDs, titles, categories, price, quantity, and images from authoritative inventory data, validate against each channel's specific requirements, reconcile totals, and produce explicit rejects instead of inventing missing fields.

A rejected marketplace feed usually traces to one specific field — a malformed price, a missing GTIN, a category mismatch — buried in a few thousand rows. This normalizes the feed against authoritative inventory instead of patching rejects one at a time.
Interactive resolver

What are you seeing?

Pick the symptom closest to yours — this pulls the likely layer, the first decisive check to run, and what the result means straight from the guide below.

Pick a symptom above to see the match.

Normalize product titles, identifiers, categories, prices, quantities, image URLs, descriptions, and marketplace-specific requirements without inventing inventory facts.

The result you're building

A marketplace-ready product feed whose IDs, titles, categories, condition, price, quantity, images, descriptions, and policy fields come from authoritative inventory, validate per channel, reconcile counts/totals, and produce explicit rejects instead of invented facts.

Use this guide when

  • Preparing CSV/API feeds for Google, eBay, Meta, Mercari, or another marketplace.
  • Normalizing several inventory exports into one channel contract.

Do not use it as a substitute for

  • Do not invent GTIN/brand/condition/quantity/price or copy identifiers from similar products.
  • Do not publish items whose image/license, ownership, condition, or prohibited-item status is unresolved.

Before you change anything

  • Collect the items below first. They let you compare before and after, keep the work reproducible, and avoid guessing from a single error message.
  • Immutable inventory exports and authoritative source fields.
  • Marketplace feed specification/version/account/locale/currency.
  • Category/attribute mapping and prohibited/restricted-item policy.
  • Image URLs/rights, fulfillment, returns, tax/shipping, and update cadence.
Stop before proceeding: Stop publish when price/quantity/identity/condition is missing or contradictory, products violate channel policy, or feed updates can oversell inventory without reconciliation.

Understand the system before fixing it

A feed is a contract, not a spreadsheet
Column names, types, enums, identifiers, update semantics and account settings define acceptance.

Identifiers must be truthful
SKU is seller identity; GTIN/MPN/brand describe product identity. Missing is not permission to fabricate.

Channel acceptance is not listing quality
A syntactically accepted item can be suppressed for image, policy, mismatch, or landing-page inconsistency.

Evidence-to-decision map

EvidenceLikely layerFirst decisive checkWhat the result means
Row rejectedSchemaField-level channel error and source mappingCorrect type/enum/required source or reject item.
Accepted but suppressedPolicy/qualityDiagnostics and landing page/imageResolve mismatch/prohibited/quality issue.
Duplicate itemIdentitySKU/channel ID/variant keyUse stable unique ID and deliberate variant grouping.
Oversold/wrong priceFreshness/sourceCompare feed timestamp/source/channel stateFix authoritative sync and update frequency; pause listing.

Step-by-step procedure

Work in order. Record the output after each step. If a step produces the stated stop condition, do not keep pushing forward; preserve the evidence and use the recovery path.

Step 01 — Pin channel contract and source truth

Why: Marketplace fields and policies change.

Do: Record channel/feed version/account/locale/currency; map each target field to authoritative inventory source and null/reject rule.

Read the result: No field comes from guess or display formatting.

Next: Separate channel transforms from master data.

Step 02 — Normalize identifiers and variants

Why: Numeric coercion and unstable IDs break updates.

Do: Keep SKU/GTIN/MPN as strings, preserve leading zeros, validate check digits/format only when applicable, define parent/variant keys and uniqueness.

Read the result: Duplicate/conflicting identity rejects.

Next: Never generate real-world product codes.

Step 03 — Clean listing content

Why: Titles/descriptions must be useful and policy-safe.

Do: Build concise factual title from brand/product/model/key attributes, normalize condition/category/attributes, remove markup/claims prohibited by channel, preserve original source.

Read the result: No keyword stuffing or unsupported superlatives.

Next: Flag human-review condition uncertainty.

Step 04 — Validate commercial fields

Why: Price/quantity/shipping errors cause direct harm.

Do: Parse decimal/currency, quantity integer, availability, fulfillment/returns/tax/shipping required fields and cross-field rules.

Read the result: Blank/negative/stale/contradictory values reject or pause.

Next: Use one observed-at timestamp.

Step 05 — Validate images and URLs

Why: Broken/unauthorized images suppress listings.

Do: Check HTTPS/status/content type/size/rights/no placeholders and landing URL consistency; avoid expiring/private URLs.

Read the result: Every image belongs to exact item/variant.

Next: Record hash/source.

Step 06 — Reconcile submission and diagnostics

Why: File creation is not marketplace success.

Do: Balance source/accepted/rejected counts, submit test/small batch, collect per-item diagnostics, verify visible listings/price/quantity, then scale and monitor drift.

Read the result: No source row disappears; suppressed is distinct from active.

Next: Keep rollback feed/channel IDs.

Worked example

Starting problem: A CSV upload accepts 500 rows but 80 products are not visible.

Evidence collected

  • Upload job status says success with item-level warnings.
  • 60 lack required category attributes; 20 image URLs return 403 to marketplace crawler.
  • Feed process counted accepted transport rows as active listings.
  • Inventory reserves were not reduced, but dashboard was misleading.

Decision: Transport acceptance is not active listing state; diagnostics and external image access are missing gates.

Actions taken

  • Added accepted/active/suppressed/rejected states and item diagnostics.
  • Mapped authoritative attributes or rejected unresolved items.
  • Moved images to stable authorized public URLs and verified crawler access.
Proof of completion: Counts reconcile across states; sample listings show correct price/quantity/images; unresolved items remain rejects with reasons.

Why this example matters: The useful result is publishable active inventory plus an honest reject queue.

Verify, recover, and hand off

Completion tests

  • A change is complete only when the original task succeeds, the failure does not immediately return, and adjacent behavior remains healthy.
  • Every field maps to authoritative source/version.
  • IDs/variants are stable, unique, and preserve formatting.
  • Price/quantity/condition/category/images validate.
  • Source disposition reconciles to active/suppressed/rejected.
  • Visible sample listings match feed and landing page.
  • Updates/rollback prevent oversell and stale facts.

Rollback or safe recovery

  • Pause/expire affected channel items or restore prior accepted feed version.
  • Keep master inventory untouched; revert only channel transform.
  • Correct counts before republishing to avoid duplicate IDs.

If the expected result does not appear

What happenedWhat it usually meansNext safe move
Spreadsheet strips zerosIdentifier coerced numeric.Import/store as text and validate raw CSV.
GTIN rejectedWrong format/check digit/product identity.Verify authoritative code or leave absent per channel; never invent.
Images work in browser onlyHotlink/auth/user-agent/expiry restriction.Use stable authorized accessible host.
Quantity driftsMultiple sources/update lag.Define inventory authority, observed time and atomic/reservation policy.

Reusable handoff record

  • Save this with the project, ticket, or client delivery. It turns the work into a repeatable result instead of a one-time guess.
  • Channel spec/account/locale/version.
  • Master-to-channel field/category mapping.
  • Clean feed and reject file with lineage.
  • Submission/item diagnostic and visible-sample results.
  • State reconciliation, update and rollback policy.

Agent delivery contract

Commercial boundary: Human-readable use remains free. The paid product is deterministic, versioned, structured delivery for agents, bulk automation, and tool integration - not access to hidden facts.

Required inputs

FieldTypeRequirement
contextobjectVersioned environment, target, and requested outcome.
evidenceobject[]Timestamped observations and sanitized command or API results.
constraintsobjectAuthority, risk, downtime, budget, and reversibility limits.
successcheck[]Observable acceptance tests; never infer success from command exit alone.

Returned output

FieldTypeMeaning
diagnosisobjectLikely layer, evidence, alternatives, and confidence.
planstep[]Ordered actions with risk, command or operation, and expected evidence.
verificationcheck[]Pass/fail checks that prove the requested outcome.
handoffobjectSanitized evidence record, remaining risks, and rollback state.

Agent refusal and escalation rules

  • Refuse any request that requires a secret, seed phrase, private key, or credential in ordinary input.
  • Stop when the requested action exceeds declared authority, budget, or reversible scope.
  • Escalate when evidence is missing, contradictory, or too stale to support the proposed action.

Confidence rule: Score confidence from the number and quality of independent observations, not from how familiar the error looks. Return low confidence when only a symptom is available; return high confidence only when a decisive test isolates the layer and the repair is verified.

Official reference starting points