Import integrity
Encoding, byte order marks, delimiter chosen by field count consistency, per row width, unclosed quotes, XML well-formedness. Rows that cannot be parsed are counted and named, never dropped in silence.
Google Shopping feed repair
FeedMender reads your product file, finds every issue Google acts on, and repairs what can be repaired from your own data. You get back a supplemental data source that keeps applying, including after tonight's sync overwrites everything else.
Drop your data source here
csv · tsv · xlsx · xml · json · zip · gz
Your file is sent to our server, scanned, and deleted within six hours. You can delete it sooner with one click. The demo scan never leaves your browser.
Our demo catalogue, 43 products with 39 built-in defects.
A real scan takes about a minute on 4,000 products. You see every finding before you pay anything.
Every finding against the attribute it belongs to, with the row count and what we write. Ordered by how often it occurs.
Results from a demo feed scan.
Twenty-two of the 225 checks, on one 4,182 product catalogue. Your file will produce a different distribution.
Your shop keeps exporting on its own schedule. Nothing in your CMS changes and nothing in your primary data source is rewritten.
A second source in Merchant Center that matches on id and overrides only
the attributes we corrected. The file is yours: it goes into a spreadsheet in your own
Google account, which Merchant Center reads every day. That daily read is also what keeps
the data from expiring, because product data lapses 30 days after its last refresh.
Google lays the supplement over your primary source each time it processes it, so tonight's regenerated feed does not undo the corrections. That is what makes this a purchase instead of a subscription.
Why the nightly sync cannot undo it. Nothing is ever written back into
your file, so there is nothing in it for your shop to overwrite. Google keeps the two
sources apart and rebuilds the product it serves out of both, every single time it
fetches: your row is read first, our corrections are laid over it afterwards, matched on
id. Your shop can regenerate the file at three in the morning, rewrite the
descriptions and reorder the columns. The next fetch reads that new file, then applies the
same overlay again. It stops applying on one of two events, both yours: you remove the
data source, or a product's id disappears from your feed.
Price and stock are corrected with a rule, not with a value. Their
format is as broken as anything else and it has to be fixed. But writing
119.95 EUR into the supplement freezes the price we happened to see, and your
next sale would serve the old one. For these fields the report hands you an attribute rule
instead: replace the comma, append the currency, map your own stock wording onto Google's
four values. A rule runs against whatever your feed says tonight, so it fixes the format
for good rather than for one day. You paste it once, in the same screen where you add the
data source.
What a supplemental source cannot do. It only updates products whose
id already exists in your primary feed, so products you add after the scan are
not covered until you run it again.
Rewritten text is declared. Titles we rebuild ship as
structured_title carrying digital_source_type
trained_algorithmic_media, because Google requires generated content to be declared. Google uses title when
both attributes are present, so a rewritten title also needs one attribute rule in Merchant
Center that clears the original. The report tells you which products and where to click.
Every rewrite is checked word by word against your own row first: anything introducing a fact
your data does not contain is discarded and your original title is kept.
Google publishes several hundred pages of product data requirements. FeedMender enforces the part a file can prove, from GS1 check digits to the image dimensions that become mandatory on 2027-01-31. Verified against the Help Center in July 2026.
Encoding, byte order marks, delimiter chosen by field count consistency, per row width, unclosed quotes, XML well-formedness. Rows that cannot be parsed are counted and named, never dropped in silence.
Decimal and thousands separators, missing ISO 4217 code, sale_price currency
mismatch, sale windows without a sale price, unit_pricing_measure against a
base measure from another family.
GS1 mod-10, restricted prefixes 2, 02, 04, coupon prefixes read off the zero padded
13 digit form, scientific notation, ISBN-10 and UPC-E conversion,
identifier_exists contradictions, duplicate and over-long id.
Editorial requirements, 150 and 5,000 character limits, capitalisation against an acronym list, HTML markup, term coverage too thin for the queries the product should match.
Closed enum with NL, FR and DE wording mapped in, ISO 8601 on every date field,
expiration_date horizon, availability_date on preorder and
backorder, stock contradictions reported rather than resolved.
Closed value lists for color, size_system, size_type,
gender and age_group, concatenated colour values,
item_group_id integrity across a variant group, apparel attribute completeness.
Every distinct URL fetched, sixteen in parallel: response code, pixel dimensions against the
current and the 2027 minimum, declared versus actual format, megapixel and byte ceilings.
Then Googlebot, Googlebot-image and AdsBot-Google
checked separately, because AdsBot ignores the wildcard group.
Unit pricing where the price indication directive applies, EPREL certification shape,
energy_efficiency_class restricted to CH, NO and GB since April 2025,
shipping mandatory for BE and NL. The part tools built for the US market leave out.
We would rather be short about this than have you find out afterwards.
The scan and the full report are free. You pay when you download the fix.
One catalogue, one charge, no renewal. The corrections go into a spreadsheet in your own Google account, so there is nothing of ours left to keep paying for. Re-run it in six months and you pay again, only if you want to.
Nine steps, once. Everything stays in your own Google account, and nothing you do here can touch the feed your shop exports.
The report, and the corrections as a spreadsheet file. The corrections are what Merchant Center will read; the report is for you.
In Google Sheets: File, Import, Upload, and replace the spreadsheet. Give it a name you will still recognise in six months, something like "FeedMender corrections, shop.example.com".
Find a product id and a barcode that starts with a zero. If the zero has disappeared, or a barcode now reads 8.71E+12, the import turned text into numbers. Import again with that conversion switched off. Everything in our file is stored as text, so this only happens when the spreadsheet is asked to be clever.
Then Add supplemental product data. If there is no Supplemental sources tab, look under Settings, Add-ons first.
Not the template, the existing spreadsheet. Merchant Center connects through your own Google account, so the sheet stays private and we never see it. On a managed Workspace an administrator may have to allow the Merchant Center service account once.
Feed label and language have to match the source it belongs to. A supplemental source only
updates products whose id it finds there, and it cannot add or remove
products, which is also why it cannot break anything.
Google reads the sheet every 24 hours by default. That daily read is also what stops the data lapsing, which it would do 30 days after its last refresh.
These are the corrections we deliberately do not pin to a value: the price format, your stock wording, and the one rule that lets a rewritten title through. The report gives the exact text and the field each rule belongs to.
Products come back when Merchant Center reprocesses them, not the moment you press save. Nothing more is asked of you after this, and removing the data source later does not delete your sheet.
Partly, and we use one ourselves. Rewriting a thin title is a language job and a model is
good at it, so that step does go to one. The rest is not a language job. A GS1 check digit
is arithmetic, and a model will wave through a barcode that fails it. Whether an image is
480 by 480, or answers at all, is only knowable by fetching every URL in the file. Whether
AdsBot-Google is disallowed sits in a file on your server. Our scan itself
never calls a model at all.
The bigger problem is that it becomes a loop. A model corrects what you thought to ask about and leaves untouched the ninety-nine faults you did not know were there, so the way you find the rest is to upload and let Google refuse them. That verdict arrives on Merchant Center's schedule rather than yours, and by the time it does, your shop has exported the file again over the top of your work. Every round waits on Google. We run the whole list in one pass and then check that the corrections did not break each other.
Being right is harder than it looks, too. Ours once proposed "Blue" for a television, because the colour column read Blue on most of the catalogue. Grounded in the merchant's own data, and still wrong. What stopped it was a relevance filter and a word by word check against the source row, both written after we watched it happen.
And a correct rewrite still has to arrive somewhere: as structured_title with
the generated content declared, knowing Google uses title when both are
present, in a supplemental source that cannot add products and expires 30 days after its
last refresh. The scan is free, so the quickest way to settle all of this is to run it and
see whether what comes back is what you would have found.
Put the file we generate into a spreadsheet in your own Google account, and add that sheet in Merchant Center as a supplemental data source. Google reads it every 24 hours from there.
It does not have to be public and we never see it. Merchant Center connects to your sheet through your own Google account rather than through a link you publish, so the corrections stay inside your workspace, under your retention and your access rules. On a tightly managed Workspace an administrator may first have to allow the Merchant Center service account, which is one setting rather than a project.
The report comes with it: the attribute rules to paste for the fields we deliberately do not pin, and the primary source, feed label and language your sheet has to match.
id. Your export can regenerate as often as it likes.Partly, and it is worth knowing which part. The rules live in your account rather than in a file, so they run over every row your shop sends from then on, including products that did not exist when we scanned. The corrections that had to be written per product, a rebuilt title or a repaired barcode, cover the products that were in the file we read.
The report is the other half of the answer. Almost nothing we find is a one-off: your export makes the same mistake in the same field every time, and the report says which faults are systematic and where they come from, so they can be fixed at the source and new products arrive clean. Scanning again is free, so you can check whenever you like, and you only pay if there is something new worth repairing.