What Is a YML Product Feed and How to Export One From Your Store

A YML product feed is one XML file that describes your whole catalog: products, prices, stock and attributes. Here is how it is built, how each platform exports it, and what an AI assistant needs from it.

8 min read

A YML product feed is a single file that lists every product in your store: its name, price, stock status, photos, category and attributes. Marketplaces, price comparison sites and ad platforms read it to show your products. An AI shopping assistant can read it too, and answer your customers from it. If you sell in Ukraine, your platform almost certainly produces one already. This guide explains what is inside a YML file, how to get its link out of the common platforms, and what to check before you hand it to anyone.

What a product feed is

A product feed is a machine-readable copy of your catalog. Your storefront is built for people: pages, menus, photos. A feed is built for software: one product after another, each with the same set of fields.

Your store generates the feed from its own database, usually at a fixed web address. Whoever needs your catalog (Rozetka, Prom, Hotline, Google Merchant Center, an AI assistant) downloads that address on a schedule. You change a price in the admin, the feed changes, and every consumer picks it up on its next download.

What YML is

YML stands for Yandex Market Language. The format was created years ago for a price comparison service, and it stuck: today it is the common catalog format of Ukrainian e-commerce. Rozetka publishes its own YML requirements for sellers, Prom exports and imports it, and most Ukrainian platforms can generate it.

Technically, YML is ordinary XML with an agreed set of tags. As Prom's support pages put it, YML is based on the XML standard. Anything that reads XML can read YML.

The structure of a YML product feed

Here is a short, valid example:

<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2026-11-03 09:00">
  <shop>
    <name>Paint Corner</name>
    <url>https://paintcorner.com.ua</url>
    <currencies>
      <currency id="UAH" rate="1"/>
    </currencies>
    <categories>
      <category id="10">Paints</category>
      <category id="11" parentId="10">Wood paints</category>
    </categories>
    <offers>
      <offer id="DX450" available="true">
        <name>Wood paint DX-450, 2.5 l, walnut</name>
        <url>https://paintcorner.com.ua/dx-450-walnut</url>
        <price>1299</price>
        <oldprice>1450</oldprice>
        <currencyId>UAH</currencyId>
        <categoryId>11</categoryId>
        <picture>https://paintcorner.com.ua/img/dx450.jpg</picture>
        <vendor>Arbor</vendor>
        <vendorCode>DX-450-W</vendorCode>
        <description><![CDATA[Water-based paint for outdoor wood.]]></description>
        <param name="Volume">2.5 l</param>
        <param name="Colour">Walnut</param>
        <param name="Use">Outdoor</param>
      </offer>
    </offers>
  </shop>
</yml_catalog>

The parts that matter:

Element What it holds Why it matters
<yml_catalog date="…"> The root, with the time the file was built Tells you how fresh the file is
<shop> Store name, URL, currencies Context for everything below
<categories> Your category tree; parentId links a subcategory to its parent Lets a reader rebuild "Paints > Wood paints"
<offers> / <offer> One <offer> per product or variant The products themselves
id attribute A stable unique code How a reader recognises the same product next time
available attribute true or false In stock or not
<price>, <oldprice>, <currencyId> Current price, the crossed-out price, currency The numbers customers ask about most
<categoryId> Which category the offer belongs to Links the offer to the tree above
<picture>, <url> Photo and product page What a card or link shows
<vendor>, <vendorCode> Brand and article number Brand questions, exact matches
<param name="…"> One attribute per tag: volume, colour, size, material The answers to "is it for outdoor use?"

Rozetka's spec adds practical rules worth following for any consumer: UTF-8 encoding, offer ids made of Latin letters and digits that never change, and special characters such as & and < escaped in text. Bilingual stores often add name_ua and description_ua next to the main fields.

param deserves a second look. Most customer questions are about attributes, not names: "do you have it in 5 litres?", "is this one waterproof?". A feed with rich param tags can answer those. A feed with only name and price cannot.

Other feed formats you will meet

YML is not the only option. The same catalog can also be described as:

  • Google Merchant XML. An RSS or Atom file where fields carry a g: prefix: g:id, g:title, g:price, g:availability, g:image_link. It is described in Google's product data specification. If you advertise on Google Shopping, you already have one.
  • CSV or TSV. A table: one row per product, one column per field. Most platforms can export one.
  • JSON. A list of product objects, common in custom builds and headless stores.

Vendigit accepts all of these: XML (YML, Google Merchant RSS/Atom, or generic XML with repeating product records), CSV/TSV/TXT and JSON.

How to export a YML feed from your platform

Menus change, so each step below links to the platform's own help page. If your screen looks different, follow the official page.

Horoshop

Horoshop has two routes. Marketplace feeds (Rozetka, Hotline, Google Shopping, Facebook) live under Marketing → Marketplaces: you enable a feed, mark which products go into it, press generate, and open the link from the XML button. The link sits on your own domain. See Horoshop's article on marketplace feeds for tariff limits.

The second route is the Prom export: Products → Export → XML (Prom, main language), then Generate. Horoshop's Prom feed guide explains how to pick which attributes go into it per category and how to switch on auto-generation. Setup with Vendigit is covered step by step in our Horoshop guide.

Prom.ua

In the Prom seller cabinet, product export lets you choose a YML file and generate a link to it. According to Prom's support pages, export is available on paid packages, and the file is built at the moment the link is requested, so it is always current. See Prom's help article on exporting products and groups. More in our Prom.ua guide.

WooCommerce

WooCommerce itself exports products as CSV: Products → All Products → Export → Generate CSV, as described in the official CSV importer and exporter docs. That gives you a file, not a living link. For a feed URL that updates on its own, stores usually install a product feed plugin that publishes YML or Google Merchant XML on the store's domain. Details in our WooCommerce guide.

OpenCart

Current OpenCart versions have no built-in YML export. Feeds come from extensions in the OpenCart Marketplace: there are YML exporters for Ukrainian marketplaces and Google Merchant feed generators. Check that the extension supports your OpenCart version. See our OpenCart guide.

Shopify and Magento

Neither uses YML natively. Shopify exports a CSV from Products → Export (Shopify help); larger exports arrive by email. Magento (Adobe Commerce) exports a CSV from System → Data Transfer → Export with the entity type set to Products (Adobe docs). Both platforms commonly publish a Google Merchant XML feed through a feed app or extension, and that works just as well. More in our Shopify and Magento guide.

What an AI assistant takes from your feed

When you connect a feed to Vendigit, the feed becomes the assistant's only source of truth about products. Here is what happens with it:

  1. It must live on your domain. You verify your domain with one DNS record first; the feed URL then has to be on that domain or one of its subdomains. If your feed link sits elsewhere, upload the file instead (up to 20 MB).
  2. Fields are matched automatically. An AI model reads a few sample products and maps your fields to Vendigit's: id, name, price, old price, currency, availability, category, brand, article, photos, link. If that is unavailable, a table of known field names in English, Ukrainian and Russian (назва, ціна, наявність, vendorCode, g:price…) does the job. You can review the mapping in the dashboard.
  3. Categories and attributes are rebuilt. The <categories> tree becomes a browsable catalog, and every param becomes a product attribute the assistant can search and compare by.
  4. Prices come from the feed, not from the AI. When the assistant recommends a product, Vendigit fills in its name, price and link on the product card straight from your feed. The model is instructed not to state a price or stock level it didn't find.
  5. The feed is re-read every 6 hours. URL feeds re-sync automatically. Uploaded files do not; you replace them when the catalog changes.

How often the data really stays fresh depends on your platform as well; we cover that in how often to update a product feed.

A quick check before you share your feed

Open the feed URL in a browser and look for:

  • Every product has an id and a name. Products without them get skipped.
  • Ids are stable. If ids change on every export, every reader sees a brand new catalog each time.
  • Prices are plain numbers, like 1299 or 1299.00, without thousands separators or currency words.
  • Availability is set for every offer.
  • Categories are linked: each categoryId exists in <categories>.
  • Attributes are filled in param tags for the things customers ask about.
  • The file is complete. A feed that suddenly has half its usual products is usually a broken export, not a sale.

The most common problems and their fixes are in product feed errors and how to fix them.

FAQ

Is YML the same as XML?

YML is XML with a fixed set of tags for shops: shop, categories, offers, offer, price, param and so on. Every YML file is an XML file, but not every XML file is YML.

Do I need a YML feed specifically to use Vendigit?

No. Vendigit reads YML, Google Merchant XML (RSS or Atom), other XML with repeating product records, CSV/TSV and JSON. Use whatever your platform exports most completely.

My feed is in Ukrainian and Russian. Is that a problem?

No. Vendigit records the feed's main language and reads extra language versions of names, descriptions and attributes when the feed carries them. Customers get answers in the language they write in.

Yes, up to 20 MB in .xml, .yml, .csv, .txt or .json. A file is never re-synced, though, so a link on your domain is better for anything that changes often.

How big can a feed be?

A feed fetched by URL can be up to 128 MB (24 MB for JSON). How many products are searchable depends on your plan: 10,000 on Starter, 15,000 on Growth, 50,000 on Business.