Product Feed Errors: 14 Common Problems and How to Fix Them

Most product feed errors are small: an unescaped ampersand, a price written as 1,299.00, ids that change on every export. Here is how to find them and fix them before customers see wrong answers.

8 min read

Product feed errors are rarely dramatic. A feed usually does not vanish; it just carries one bad price, a missing stock flag or a category that points nowhere. A marketplace may reject those products. An AI assistant that answers from your feed will repeat whatever the feed says. This article lists the problems we see most often, grouped by how they show up, with a fix for each.

If you are new to feeds, start with what a YML product feed is and come back.

Why feed quality matters more than it used to

A feed used to be read by a marketplace and a price comparison site. Mistakes were caught by their validators and ended up as a rejected product in a report you checked once a week.

Now more systems read the same file. Google Merchant Center, for example, crawls your product pages and compares them with the feed; if the price does not match, products can be disapproved, as Google explains in its help article on mismatched product prices. And an assistant that talks to your customers uses the feed directly. Vendigit fills in prices on product cards straight from your feed, and the assistant is instructed not to state a price it didn't find there. That is exactly why the feed has to be right. The assistant is told not to invent a price, but it cannot correct one you published.

Product feed errors that stop the feed from loading

These are the loud ones. The sync fails, and the dashboard shows the reason.

Vendigit only reads a feed from the shop's own verified domain or its subdomains. A link to a file-sharing service, a staging site or a different domain is refused.

Fix: publish the feed on your shop's domain. If your platform puts the export link on another host, download the file and upload it instead (up to 20 MB).

The feed URL answers with HTTP 403 or 404, redirects to a login form, or returns an empty response. Common causes: the export is password-protected, a security plugin blocks unknown visitors, the export link was regenerated and the old one stopped working, or the export is only available on a paid tariff.

Fix: open the link in a private browser window. If you do not see XML (or CSV, or JSON), neither does anyone else. On Horoshop, for instance, changing the feed's link alias makes the old link stop working, according to Horoshop's help.

3. The XML is not well-formed

One unescaped character breaks the whole file. Typical culprits:

  • A raw & in a name: Salt & Pepper instead of Salt & Pepper.
  • < or > inside a description without CDATA.
  • Invisible control characters copied from a supplier's spreadsheet.
  • A file that claims UTF-8 but is saved in Windows-1251.

Rozetka's YML requirements list the same rules: UTF-8, no control characters, special characters escaped, HTML in descriptions wrapped in <![CDATA[ ]]>.

Fix: run the file through any XML validator and fix the line it points to. If the bad text comes from one product, fix that product in your admin, not in the file, or the next export will bring the error back.

4. The file has no product records

The XML is valid but contains no repeating product elements: no <offer>, no <item>, no <entry>. Usually the export returned a settings page, a single summary record or an empty catalog because a filter excluded everything. For CSV, the equivalent is a file with a header and no rows.

Fix: check the export's filters and product selection. In some platforms products have to be explicitly included in a feed.

5. The CSV cannot be read

A CSV needs a header row and at least one product row. Very old spreadsheet formats that end lines with a lone carriage return (the "CSV (Macintosh)" option in some versions of Excel) are not supported.

Fix: save as "CSV UTF-8", with a header row.

6. The file is too big

A feed fetched by URL can be up to 128 MB (24 MB for JSON); an uploaded file up to 20 MB.

Fix: drop what you do not need, such as long HTML descriptions with inline styles, or serve the feed by URL instead of uploading it.

Errors that load fine but give wrong answers

These are quieter, and worse. The sync succeeds, but customers get incomplete or misleading answers.

7. Products without an id or a name

A product needs at least an identifier and a name. Records without them are skipped. If a third of your catalog has no name in the main language, a third of your catalog is invisible.

Fix: fill names in the feed's main language. If you sell in Ukrainian and Russian, make sure the main name field is not empty for either version.

8. Ids that change between exports

The id is how any reader recognises "the same product as yesterday". If your export numbers products by position, or builds ids from names, then every edit produces a new id. The reader sees a product disappear and a new one appear, and loses everything attached to the old one.

Fix: use the database id or the article number (SKU) as the offer id. Rozetka's rules say the same: the id must not change once the product is listed.

9. Duplicate ids

Two variants exported with the same id. Only one of them survives; the other is ignored.

Fix: give each variant its own id (for example DX450-25 and DX450-5) and keep the shared model code in a separate field.

10. Prices in the wrong format

1299 and 1299.00 are fine. So is 1 299,00. But 1,299.00 mixes a thousands separator with a decimal point and cannot be read reliably, and price on request is not a number at all. A product without a readable price still appears, but the assistant is instructed not to name a price it does not have.

Fix: export prices as plain numbers and the currency in its own field (<currencyId>UAH</currencyId>).

11. Missing or unusual stock values

Availability is read from available="true", in stock, out of stock, preorder and their common variants, including Ukrainian в наявності and немає в наявності. Anything else, such as 3-5 days or call us, is stored as unknown. If there is no availability field but there is a quantity, a positive quantity means in stock.

Fix: always export an explicit availability flag. Put delivery times in a separate field or in your delivery policy page.

12. Categories that point nowhere

In YML, each offer's <categoryId> must match a <category id="…"> in the <categories> block. If the export skips the block, or a category was deleted, products lose their place in the tree. The assistant then cannot answer "what do you have in wood paints?" well.

Fix: export the full category tree, with parentId for subcategories.

13. Thin attributes

The feed has names and prices but no param tags, or one long description with everything inside. The Vendigit dashboard flags this ("This feed does not describe its products with attributes"). Customers ask about size, volume, material and compatibility; without attributes, the assistant has less to work with.

Fix: turn on attribute export. In Horoshop's Prom export, for example, you choose which features go into the feed in each category's settings (Horoshop guide).

Errors that come from the export, not the file

14. A truncated or stale export

Two related problems:

  • Truncated. The export timed out or a paginated endpoint returned only page one, so the feed suddenly has 400 products instead of 4,000. Vendigit protects you here: a scheduled sync that would cut a catalog of 100+ products to less than half keeps everything, saves what it read, and fails with both counts. If the catalog really did shrink, press Sync now in the dashboard to accept it.
  • Stale. The file exists but is not rebuilt. Some platforms regenerate feeds only on a button press or once a day, and an uploaded file never changes until you replace it. How to keep freshness under control is covered in how often to update a product feed.

How Vendigit shows a feed problem

Every feed has a status: Pending, Syncing, Synced, Failed or Cancelled. When a sync fails, the dashboard shows the reason, and:

  • products from the last good sync stay in place, so the assistant keeps answering;
  • a failed URL feed is retried automatically after about an hour;
  • you can cancel a slow sync, and products already read are kept;
  • a sync stuck for 30 minutes counts as lost and can be restarted.

Plan limits are not an error, but they look like one if you miss them: Starter indexes up to 10,000 products per shop, Growth 15,000, Business 50,000. Over the limit, the dashboard says how many of your products are searchable, and you get an email.

A five-minute feed check

Check How
Opens without login Private browser window
Valid XML Any XML validator
Ids stable Compare two exports a day apart
Prices are numbers Search the file for , inside <price>
Stock set Every offer has available
Categories linked Every categoryId exists
Attributes present Count <param> tags per offer
Complete Product count matches your admin

FAQ

Will the assistant tell a customer a wrong price if my feed is wrong?

It will repeat the price your feed has: product cards take it straight from the feed, and the assistant is instructed not to state a price it didn't find. Fix the price in your store, and it reaches the assistant on the next sync.

My sync failed. Is the assistant down?

No. Products from the last successful sync stay, and the assistant keeps answering from them. Vendigit retries a failed URL feed after about an hour, and you can press Sync now after fixing the cause.

Do I need to fix the mapping by hand?

Usually not. Fields are matched by an AI model, with a fallback table of known field names in English, Ukrainian and Russian. Check the mapping once after the first sync. If you change the feed's structure, replace the feed so it is detected again.

How do I know which products were skipped?

Compare the product count in the Vendigit dashboard with your admin. A gap usually means missing names or ids, duplicates, or your plan's product limit.