Multi-supplier catalog import for Magento 2
Import and keep in sync huge supplier catalogs — products, prices, stock, images — from any feed, on a schedule, without touching your hand-made products. Built for catalogs with tens or hundreds of thousands of items.
✓ License active immediately after payment, sent by email
✓ Instant installation via Composer
✓ First domain change included and instant (handy for staging → production)
✓ Compatible with Magento 2.4.x (tested on 2.4.9) and with the Hyvä theme
The whole admin interface — every label, tooltip and guide — is available in:
Magento automatically shows the module in whichever language each admin user has configured — no setup needed.
These are real measurements from a production deployment, not lab estimates — a live store syncing a genuine large supplier catalog (hundreds of thousands of SKUs, hundreds of thousands of images) on ordinary, non-exotic server hardware.
| Test | Volume | Result |
|---|---|---|
| Full catalog sync (products, prices, stock, categories) | 339,707 feed rows | 2m 01s, 0 errors |
| Stock & price-only sync | 340,467 feed rows | 7.2s, 0 errors |
| Direct-write throughput (SQL strategy, batched) | 500 products/batch | ~600 products/second |
| Parallel image downloads vs sequential | same image set | 3.9x faster |
| Catalog scale handled in production | up to 708,000 images | compressed & queued without blocking catalog sync |
Test server: 12-core Intel Xeon E5-2690 @ 2.90GHz, 10GB RAM, PHP 8.5, with the database on a separate dedicated server — a standard mid-range setup, not high-end hardware. The 600 products/second figure compares to roughly 1 product/second with Magento's native import mechanism on the same data.
Full installation steps and a complete field-by-field user guide (mapping, formulas, configurable and grouped products, categories, images, scheduling, CLI) live on their own reference page:
Not satisfied within 30 days of purchase? Request a refund yourself from your account area (codingrow.com/login), no questions asked. The refund is processed instantly, automatically, and the license is deactivated upon confirmation.
Current version: v3.9.0
Allowed feed categories can now be selected at any level of the feed tree, not just the top level: pick a deep branch (or a single leaf) — e.g. Furniture › Cabinets & storage — to import only that subtree instead of a whole root category. It only filters which products are imported; the Magento category tree is not changed (products keep their full path).
Mapping formulas now support integer rounding functions ceil() (up), floor() (down) and round() (nearest): e.g. ceil({B2B price} * 1.30) applies the markup and rounds the final sale price up to the next whole number (23.40 → 24).
Refinement of the sitemap alignment from 3.3.9: on the 301 category-path redirects the module now writes the same metadata Magento natively assigns to category-context URLs, so the sitemap generator correctly lists only the flat canonical URL instead of the one that 301-redirects. Products imported or updated after the upgrade are already fine; to realign existing rows in one pass on upgraded installations the mmis:fix-redirect-metadata command is available (then regenerate the sitemap).
Product URLs now honour Magento's Catalog SEO setting 'Use Categories Path for Product URLs'. When it is off (Magento's default), the flat product URL is the only canonical one and the category-path URL is served as a 301 redirect to it, so the sitemap and the canonical tag agree and Google consolidates on a single URL. When it is on, the category-path URL stays active, as native Magento produces it.
Now accepts the One-for-All subscription license key: a single Codingrow subscription activates this module together with all the others.
New «Strip HTML tags» mapping transformation: removes HTML tags and decodes entities from the feed's text values, useful when the supplier sends descriptions already formatted in HTML.
New "Strip HTML tags" transform for mapping rows: removes HTML markup and decodes entities from a source column's value, for text attributes (e.g. a supplier description feed that comes wrapped in <p>/<b> tags). Also available as a template function (striphtml{ColumnName}).
Fixed an installation bug: setting up the module for the first time on a brand-new store could fail during Magento's setup with a database error, because a required file was missing from the release package.
Products whose supplier feed left the image column normally used for the storefront thumbnail (Base/Small/Thumbnail) empty — while still having other image columns filled in — no longer end up with no thumbnail on category/listing pages. The module now promotes the first available image automatically (can be turned off per profile).
The "updated" count in sync results no longer includes rows where price/stock stayed exactly the same as before — only real changes are now counted and written, which also makes syncs with few or no real changes noticeably faster.
All batch sync log messages (main_sync/offer_sync) now follow the language of the admin who's reading them, instead of the language of the server process that ran the cron.
The image queue's "Last runs" now reports the count and outcome for that specific run instead of a running total, with an accurate average; fixed two email notification labels that were never translated.
The image sync queue is dramatically faster on large catalogs (a query rewrite removed a bottleneck that scaled with queue size), batch size now adapts automatically to the real processing rate, and MMIS cron jobs run in their own isolated group so they no longer compete with reindex/email/sitemap crons. The estimated time remaining for a running queue is now based on the actually measured rate instead of a simple linear extrapolation.
The time the module waits before re-downloading a supplier's feed (to avoid wasting a supplier's daily download quota during repeated tests) is now a configurable setting under Stores > Configuration, instead of a fixed, undocumented 30 minutes — default 15 minutes.
An empty SKU prefix on a profile is now always a safe, fully supported choice: fixed the one place where it could unintentionally affect another profile's cached files, and removed the safety check that used to block rollback for that reason.
The image queue's log messages in "Ultime esecuzioni" now display in the language of the admin viewing the page, instead of always the store's default language.
Fixed a translation edge case that could leave the image queue's progress message in English on non-English stores, and fixed the related time-to-completion estimate to work regardless of the admin's language.
All sync log messages (progress, errors, email notifications) now follow the store view's language instead of always being in Italian. The estimated image storage size correctly distinguishes profiles with compression disabled, instead of showing a misleading "0% reduction".
Downloaded image compression is now a per-profile setting (Mapping tab), no longer shared across all profiles — useful when one supplier needs to save disk space and another doesn't.
New per-profile option (Advanced tab) to notify M2E Pro at the end of a sync, for anyone who also syncs the same products to marketplaces through that extension.
Language polish: all remaining Italian text (CLI commands, log messages, configuration tooltips, error messages) was translated to English as the base for the other supported languages.
First public release, renamed to MMIS (Massive Multifeed Import&Sync), with CLI commands under the mmis: prefix. Main changes:
Internal development phase: introduced the Import Profiles architecture, per-profile feed and category discovery, and a dedicated sync log tab.
Initial internal milestones: multi-format feed reading (CSV/XML/JSON) and the first field-mapping engine.