Get in touch
Import/Export · OpenCart

Market Feeds — Rozetka / Prom for OpenCart 2.3, 3.x and 4.x

Фіди Rozetka XML і Prom.ua YML для OpenCart 2.3, 3 і 4: токен-захищені URL, потокова генерація без перевантаження памʼяті, акційні ціни, фільтри категорій і cron-кеш. Повністю безкоштовно, код відкритий на GitHub.

Version
v1.1.0 (OpenCart 4)
v1.1.1 (OpenCart 3.x)
v1.0.1 (OpenCart 2.3)
Compatibility
OpenCart 2.3.0.0 – 2.3.0.2 · 3.0.2 – 3.0.5 · 4.0.2 – 4.1.x
Platform
OpenCart
Market Feeds — Rozetka / Prom for OpenCart 2.3, 3.x and 4.x

What each licence includes

Feature Free
An XML feed for Rozetka and a YML feed for Prom.ua
Two permanent feed URLs the marketplaces pull themselves
Feeds protected by a secret token in the link
Category and product selection for the export
Up-to-date prices and stock with no manual export
Separate builds for OpenCart 4.0.2–4.1.x, 3.0.2–3.0.5.0 and 2.3.0.0–2.3.0.2
Free

Market Feeds is a feed module for OpenCart 2.3, 3.x and 4.x that exports your store’s catalogue to the two most popular Ukrainian marketplaces: Rozetka (XML) and Prom.ua (YML). Instead of manual exports or custom scripts, you get two permanent feed URLs protected by a secret token — the marketplaces themselves pull the current products, prices and stock on their own schedule. Generation is streamed, so the feed doesn’t bring the server down even on large catalogues.

The module is completely free. The code is open: github.com/catcodestudio/opencart-market-feeds. No paid versions, limits or licence keys — every feature is available right after installation.

What it looks like in the admin panel

Market Feeds module settings in the OpenCart 4 admin panel, with ready-made feed URLs
Both feed links are visible right after installation — all that’s left is to paste them into your Rozetka or Prom.ua account. The token in the link can be regenerated with one click, after which the old link stops working.
The Market Feeds 'Filters and prices' tab: a price multiplier, special price, category selection
A price multiplier and rounding, using the special price as the main price (price + price_old), an “in stock” threshold, and category selection — the list shows the full category path, so identically named subcategories aren’t confused.
A finished Market Feeds XML feed in the browser: a category tree and offers with prices and photos
A finished feed: a category tree with parentId, followed by offers with price, currency, availability, photos and attributes. Generation is streamed (XMLWriter), so a large catalogue doesn’t eat up memory.

How it works, step by step

  1. You install the module and generate a secret access token with one click — without it, the feed is inaccessible to anyone else.
  2. You configure the export: currency, language, price multiplier, filters by category and manufacturer (empty = the whole catalogue).
  3. You copy the ready-made feed URLs from the settings page — separately for Rozetka (feed.rozetka) and Prom.ua (feed.prom).
  4. You paste the links into the marketplace accounts — Rozetka and Prom.ua periodically read the feed themselves and update products, prices and stock.
  5. Special offers are picked up automatically: if a product has a special price, it becomes <price>, and the regular price becomes <price_old> (the marketplace shows a discount).
  6. For large catalogues, you can turn on file caching: the feed is rebuilt in the background by cron and served to the marketplace instantly.

Pricing

Free. The code is open on GitHub — catcodestudio/opencart-market-feeds, and the extension is also published on the official OpenCart marketplace. No Pro version, no subscriptions, no limits on the number of products.

Technical requirements

  • OpenCart 4.0.2 – 4.1.x, 3.0.2 – 3.0.5.0 or 2.3.0.0 – 2.3.0.2 — a separate build for each branch
  • PHP 8.0+ for OpenCart 4, 7.x for OpenCart 3 and 5.6+ for 2.3 — in every case with the XMLWriter extension, standard on most hosting
  • A seller account on Rozetka and/or Prom.ua — to add the feed URL in the marketplace account
  • For file caching (optional) — the ability to run cron on your hosting

Under the hood

  • Streamed generation via XMLWriter — products are fetched page by page, and images, attributes and special offers are loaded in batches. Stable memory use regardless of catalogue size.
  • Token-protected URLs — the feed is only served with the secret token parameter; a new one can be generated with one click in the admin panel.
  • Special prices via each branch’s native mechanismproduct_discount in OpenCart 4.1, a separate product_special in 4.0, 3.x and 2.3; the schema is detected automatically.
  • The right stock tags for each platform: Rozetka gets stock_quantity, Prom gets quantity_in_stock, plus a configurable “in stock” threshold.
  • A cron cache to a file — the extension/cc_feeds/cron.rebuild route rebuilds the feed on a schedule; a “Check” button in the admin panel shows how many products will go into the export.

How to install

  1. Take the build for your store version: cc_feeds.ocmod.zip (OpenCart 4.0.2–4.1.x), cc_feeds-oc3.ocmod.zip (3.0.2–3.0.5.0) or cc_feeds-oc2.ocmod.zip (2.3.0.0–2.3.0.2).
  2. On OpenCart 3 and 4, install the archive via Extensions → Installer. On 2.3, the built-in installer only works over FTP, so it’s more reliable to unpack the archive and upload the contents of the upload/ folder to the store’s root.
  3. Extensions → Modules → find Market Feeds (Rozetka / Prom) → Install → Configure.
  4. Generate a token, choose the currency, language and filters → Save.
  5. Copy the feed URLs from the “Feed links” section.
  6. Add the links to your Rozetka and Prom.ua accounts as a product import source.
  7. Optionally: enable “Cache to file” and add a cron task to rebuild the cache — a ready-made line is shown on the settings page (on OpenCart 2.3 this is the only way to refresh the cache, since there’s no scheduler in the core).

Version history

1.0.1 (OpenCart 2.3)
A feed token with a special character (&, quotes) is no longer rejected: in 2.3, Request::clean() runs htmlspecialchars over $_GET too, so Rozetka/Prom were getting a 403 on a correct token. The value is now decoded once, the same as when it’s saved in the admin panel.
1.1.1 — 9 August 2026 (OpenCart 3)
In the admin panel’s hints, the <price>, <price_old> and <param> tags were written unescaped, so the browser swallowed them and the sentence “If a product has a special offer — it becomes , and the regular price becomes .” looked cut off. The same bug had already been fixed in the OpenCart 4 build back in version 1.0.2, but it never made it into the OpenCart 3 port. Along the way, the cache hint no longer names a scheduler route, which doesn’t exist in 3.x — the page already shows a ready-made cron URL.
1.0.0 — 9 August 2026 (OpenCart 2.3)
A build for OpenCart 2.3.0.x — ported directly from 4.x, skipping the intermediate 3.x version this module went through. The same set of settings and the same feed format; the cache is refreshed via the system crontab, since 2.3 has no scheduler. Three fixes found during the port — the price matching the storefront exactly with tax and currency applied, the cache file no longer downloadable past the token, and “Check” now counting according to the availability filter — went straight into the OpenCart 3 and 4 builds of version 1.1.0 as well.
1.1.0 — 9 August 2026 (OpenCart 3 and 4)
🔴 The price in the feed didn’t match the price on the site — for two reasons at once. First, tax wasn’t being added at all: a product the storefront showed at 122 UAH went into the feed as 100. Second, the “Currency” field was just a label on the tag — a store with a base currency of USD sent dollar figures labelled UAH. The price now follows exactly the same path as on the product page: tax per the store’s rules, then the currency rate, and only then your multiplier. The default currency is now set to “store currency”.
🔴 The cached feed file could be downloaded past the token. The cache folder isn’t always outside the site’s root, and nginx serves static files without checking .htaccess — meaning a direct request for the file served the entire catalogue with no check at all. The file name now includes a digest of the token, and changing the token, disabling the feed, or removing the module cleans up the old copies.
The “Check” button no longer overstates the count: it used to ignore the availability filter and promise more products than actually made it into the feed.
1.0.2 — 5 August 2026
🔴 Special offers weren’t making it into the feed on OpenCart 4.0.x. In 4.1, special offers live in product_discount with a special flag, while in 4.0 they’re in a separate product_special table; the query was written for 4.1, so on 4.0 it failed on a non-existent column. The schema is now detected automatically.
🔴 The settings page wouldn’t open on OpenCart 4.0.x — walking the category tree via filter_parent_id, which 4.0 ignores, returned the entire catalogue at every level and exhausted memory. Categories are now fetched with a single flat query with the full path in the name.
Minor: in the admin panel’s hints, the <price>, <price_old> and <param> tags were written unescaped, so the browser swallowed them and the sentence looked cut off.
Along the way, the special price is now only taken from rows with quantity = 1 — exactly as on the storefront, so the feed’s price never drifts from the site’s.
1.0.1 — July 2026
Fixed admin AJAX: Twig was escaping & in request URLs, which broke the “Check” and “Rebuild cache” buttons on some OpenCart builds.
1.0.0 — July 2026
First public release: Rozetka XML and Prom.ua YML feeds, token-protected URLs, streamed XMLWriter generation, category and manufacturer filters, a price multiplier, special prices (price + price_old), attributes as <param>, description and photo-count settings, a file cache with cron.

Frequently asked questions

Do I need Rozetka or Prom API keys?

No. A feed is a URL the marketplace reads itself. The only "key" is the secret token the module generates to protect the feed from outsiders.

I have a large catalogue — won't the feed bring the server down?

No. Generation is streamed (XMLWriter, paginated queries, batched loading of images and attributes), and for the largest catalogues there's a file cache rebuilt by cron — the marketplace gets a ready-made file instantly.

Can I export only part of the catalogue?

Yes: filters by category and manufacturer, an "in stock" threshold, and a separate setting for whether to export out-of-stock products or not.

What about special prices?

If a product has a special offer, the feed sends the special price as <price> plus the old price as <price_old> — the marketplace will show a discount. This is switched on with a single toggle.

Does the module change the theme or checkout?

No. The module only adds a settings page in the admin panel and internal feed routes — the storefront and checkout aren't touched.

Is there one build for all OpenCart versions?

No, it's three separate ports in one package: cc_feeds.ocmod.zip for 4.0.2–4.1.x, cc_feeds-oc3.ocmod.zip for 3.0.2–3.0.5.0 and cc_feeds-oc2.ocmod.zip for 2.3.0.0–2.3.0.2. The set of settings and the feed format are the same.

Is it really free? What's the catch?

No catch: every feature is open, and the code is published on GitHub. There's no Pro version, no hidden limits and no paid "unlocks".

Questions about the module?

Message us on Telegram — we reply within the working day. We will help with setup, compatibility and key activation.

@catcode_support

Not quite what you are looking for?

We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about your task and we will prepare an estimate.

Order a custom module