The Feedance AI features is rolling out.
Check it out!

What is eMAG?

eMAG is the largest e-commerce marketplace in Romania, and it runs equivalent Marketplace platforms in Bulgaria (emag.bg) and Hungary (emag.hu) under the same seller program. Third-party sellers don't sell through a separate storefront — they list offers directly against eMAG's own product catalog through the eMAG Marketplace, and every offer competes on the same product page as eMAG's own retail listings and other marketplace sellers. eMAG gives sellers two ways to publish and maintain that catalog: the eMAG Marketplace API (JSON, currently documented at version 4.5.1) or a hosted XML/CSV Feed Import that eMAG fetches and reprocesses on a schedule.

Why connect your product feed to eMAG?

Manually re-entering products and re-typing stock or price changes in the eMAG seller panel does not scale once a catalog passes a few dozen SKUs, and it is the single biggest source of stale prices and overselling on a fast-moving marketplace. Feeding eMAG programmatically lets you push new offers, price changes, and stock levels from your own PIM or storefront the moment they change, rather than on whatever cadence someone remembers to log in and edit listings by hand. It also lets you reach three markets — Romania, Bulgaria, and Hungary — from the same underlying product data, since all three run on the same Marketplace API and Feed Import mechanics.

How eMAG's commission model works

eMAG does not charge a signup fee, a monthly subscription, or a per-listing fee. Sellers pay a category-based commission only on completed sales, and eMAG's own seller documentation states the commission 'varies between 7 and 25%, depending on the category' the product is listed in — the exact rate for each category is set out in the seller's Marketplace contract. Commission is deducted automatically before payout, and sellers are paid twice monthly. Sellers who opt into Fulfilled by eMAG (FBE) pay additional storage fees based on how long inventory sits in an eMAG warehouse, plus a per-order processing fee that starts at 3.99 RON and scales with package size and weight.

What feed format does eMAG require?

eMAG supports two distinct integration paths, and Feedance is built around the API path because it gives the tightest control over validation and update timing:

  1. Marketplace API (recommended for automation) — JSON payloads sent via authenticated POST requests to resource endpoints such as product_offer, category, and order (e.g. product_offer/save, product_offer/read, product_offer/count). Every response is standardized JSON containing an isError boolean and a messages array, and a single save call is capped at 50 entities (10-50 is the range eMAG recommends for reliable processing), with a hard ceiling of 4000 elements per call.
  2. Feed Import (XML/CSV) — a single hosted file URL that eMAG's Feed Import module re-fetches on a schedule you configure in the seller panel. A feed file is capped at 100 MB, a maximum of 100,000 products, and a maximum of 150 categories per feed.

Both paths ultimately populate the same underlying product/offer records, so the choice comes down to how much real-time control you need over validation responses and error handling — which is why Feedance defaults to the JSON API.

Which product attributes are required?

AttributeRequired?Format / notes
idRequiredInteger 1-16,777,215 — your own internal product ID, used as the primary key for every future update to this offer.
category_idRequiredInteger identifying the eMAG product category; sellers cannot create or modify categories, only select from eMAG's existing tree via the category resource.
nameRequiredString, 1-255 characters.
part_numberRequiredString, 1-128 characters — the manufacturer's part/model number, used by eMAG to detect duplicate products.
brandRequiredString, 1-255 characters.
sale_priceRequiredDecimal, must be greater than 0, up to 4 decimals; price without VAT.
vat_idRequiredInteger referencing the applicable VAT rate.
stockRequiredArray of warehouse_id/value objects — numeric stock per warehouse.
min_sale_price / max_sale_priceRequired on first saveDecimal bounds; every later sale_price update must fall inside this band or the offer is rejected.
eanConditionally requiredArray of barcodes, 6-14 numeric characters (EAN-8/13, UPC-A/E, GTIN-14, etc.); the category/read response tells you per-category whether EAN is mandatory or optional.
imagesOptional but effectively requiredArray of image URLs; max 6000x6000 px and 8 MB per image, JPG/JPEG/PNG only.
characteristicsOptional but effectively requiredArray of id/value pairs; each characteristic ID must be valid for the chosen category_id, or the save is rejected as a category/characteristic mismatch.
warrantyOptionalInteger, months of warranty, 0-255 (default 0).
handling_timeOptionalArray of warehouse-specific shipping/handling days.

How to connect eMAG with Feedance

  1. Get your eMAG Marketplace seller account approved and generate API credentials from the seller panel.
  2. In Feedance, add eMAG as a destination and enter those credentials so Feedance can authenticate against the Marketplace API.
  3. Map your product catalog fields to the product_offer schema — name, part_number, brand, sale_price, vat_id, stock, EAN, images, and the category-specific characteristics eMAG requires for each category_id you sell into.
  4. Set your min_sale_price / max_sale_price bounds so future price updates don't get silently rejected once the offer is live.
  5. Let Feedance validate the mapped feed, batch it into eMAG's recommended 10-50 entities per save call, and push it — while automatically pacing requests to stay under eMAG's rate limit rather than firing everything at once.
  6. Review the isError / messages responses Feedance surfaces back from each push so rejected offers (bad category-characteristic pairing, price out of band, invalid EAN, etc.) get flagged for a fix rather than silently disappearing.

How often should the feed update?

eMAG's own guidance is explicit about pacing: the Marketplace API allows a maximum of 1 request every 3 seconds and 20 requests per minute per account, and eMAG recommends against scheduling calls at round, fixed clock times (for example starting a batch at 12:04:42 rather than 12:00:00) so that many sellers' jobs don't collide on the same second. Within that ceiling, price and stock are the fields worth updating most aggressively — ideally every time they change on your side, and at minimum several times a day — since a stale stock figure on a fast marketplace directly costs you orders you can't fulfill or your ranking against competing offers on the same product page. A full catalog re-sync (new products, updated descriptions, images, characteristics) is reasonable on a daily cadence for most sellers; if you're using Feed Import instead of the API, the file is only as fresh as the last time eMAG's Feed Import module re-fetched your hosted URL, so check the refresh interval you configured in the seller panel.

Common feed errors

The most common rejections documented in eMAG's Marketplace API reference are:

  • isError: true with a messages array — eMAG's standard failure envelope; every request must be checked for this rather than assumed successful just because it returned HTTP 200.
  • Invalid price (validation status 11) — triggered when a sale_price update falls outside the min_sale_price/max_sale_price band set on the offer's first save.
  • EAN/brand/documentation validation pending or rejected (statuses 1-8) — eMAG runs new offers through Marketplace, brand, EAN, and documentation validation stages before an offer is approved (status 9); a malformed barcode (must be 6-14 numeric characters in a recognized EAN/UPC/GTIN format) is a frequent cause of stalling at the EAN stage.
  • Category/characteristic mismatch — sending a characteristics entry whose ID isn't valid for the offer's category_id causes that save to be rejected.
  • Image errors — images over 6000x6000 px or 8 MB, or in a format other than JPG/JPEG/PNG, are rejected.
  • HTTP 429 rate limit exceeded — returned once you exceed 1 request/3 seconds or 20 requests/minute, along with X-RateLimit-Limit-3second / X-RateLimit-Remaining-3second headers you can use to back off before hitting the ceiling again.

Optimization tips

  • If a product already exists in eMAG's catalog, attach your offer to it with part_number_key instead of submitting a brand-new product — this skips re-validation and gets your offer live faster.
  • Set realistic min_sale_price/max_sale_price bounds up front; too narrow a band means routine repricing gets rejected later, and eMAG only lets you set these on the first save.
  • Get the EAN right the first time — barcode validation is one of the slower approval stages, and a rejected EAN blocks the whole offer from going live, not just that field.
  • Populate every category-mandatory characteristic, not just the minimum to pass validation — eMAG's on-site filters are built from these values, and incomplete characteristics quietly reduce how findable your offer is in category browsing.
  • Batch product_offer/save calls in the 10-50 entity range eMAG recommends, and stagger your job's start time away from round clock minutes to avoid rate-limit collisions with other sellers' scheduled jobs.
  • Treat every isError: true response as actionable, not cosmetic — eMAG's own documentation notes that some failed saves still get partially processed, which can leave a listing in an inconsistent state if the error is ignored.

FAQ

Does eMAG use an XML feed or a JSON API?
Both exist. The Marketplace API is JSON over authenticated POST requests and is the path Feedance automates. eMAG also offers a separate Feed Import option that accepts a hosted XML or CSV file, capped at 100 MB, 100,000 products, and 150 categories.

Can one feed cover Romania, Bulgaria, and Hungary at once?
Each country runs its own Marketplace account and its own API/seller-panel instance (emag.ro, emag.bg, emag.hu), so you connect to each separately, though the schema and mechanics are the same across all three.

What happens if I exceed eMAG's API rate limit?
You get an HTTP 429 response with a rate-limit-exceeded message. eMAG's limit is 1 request every 3 seconds and 20 requests per minute per account.

Is there a cost to use the eMAG Marketplace API itself?
No — there's no separate fee for API access. eMAG's revenue comes from the category-based commission (roughly 7-25%) charged on completed sales, not on integration or listing activity.

How many products can I include in a single API save call?
Up to 50 entities per product_offer/save call, with 10-50 recommended for reliable processing, and an overall cap of 4000 elements per call.

Schedule your 15-minute demo now

Schedule my demo

We’ll tailor your demo to your immediate needs and answer all your questions. Get ready to see how it works!