
eMAG feed for Shopify
eMAG Marketplace sells in Romania, Bulgaria and Hungary through one Marketplace API. It does not download a feed file: products and offers arrive as product_offer data, sent to the API in batches. Feedflock prepares that data from your Shopify catalog for eMAG Romania (one offer per variant, with prices net of VAT, the VAT rate ID, the price band, stock and handling time) and regenerates it every hour for your sync to send.

Setup
Live in five steps
From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.
Set up your eMAG seller account and API access
Register on eMAG Marketplace, get an API user and whitelist the IP addresses your sync will call from. eMAG accepts API calls only from listed IPs.
Install Feedflock
Add Feedflock from the Shopify App Store. It reads your products, variants, stock and tax setup directly through the Shopify API.
Pick the eMAG template
Create a feed from the eMAG template. part_number, name, brand, ean, net sale_price, stock and handling_time are mapped per variant; the seller product ID comes from the custom.emag_id metafield.
Set the category and VAT IDs
Enter the leaf category_id from eMAG's category list, as a fixed value or from a metafield, and pin the vat_id from your account's VAT list. Prices go out without VAT; the rate travels as its ID.
Send it with your eMAG sync
Your sync takes the hourly data, wraps up to 50 offers per request in eMAG's data envelope and posts them to the Marketplace API. Feedflock prepares the content; it does not post to eMAG itself.
https://feedflock.appfleece.com/f/demo-emag/emag.json
Catch feed issues before eMAG does.
Before every generation Feedflock checks that every field the channel requires is filled, and, on templates verified against the channel's own spec, that the values fit its rules. Most problems are fixed with one click, without editing products in Shopify.
The feed
What the channel receives
[ { "id": "243409", "part_number": "SKU-2048", "part_number_key": "", "ean": "8594000123453", "category_id": "506", "brand": "Nordlin", "vendor_category_id": "", "name": "Linen shirt Sand", "description": "Relaxed linen shirt with a classic collar.", "url": "https://shop.example/products/linen-shirt-sand", "warranty": "0", "weight": "220", "images_main": "https://cdn.shop.example/img/linen-shirt-sand.jpg", "images_secondary": [ "https://cdn.shop.example/img/linen-shirt-sand-back.jpg" ], "sale_price": "214.05", "recommended_price": "", "min_sale_price": "149.835", "max_sale_price": "321.075", "vat_id": "1", "currency_type": "", "status": "1", "stock": "0", "handling_time": "1", "supply_lead_time": "14" } ]

Nordlin
Linen shirt Sand
259 lei
Feed fields
.0.id
243409
.0.part_number
SKU-2048
.0.part_number_key
.0.ean
8594000123453
.0.category_id
506
.0.brand
Nordlin
.0.vendor_category_id
.0.name
Linen shirt Sand
.0.description
Relaxed linen shirt with a classic collar.
.0.url
https://shop.example/products/linen-shirt-sand
.0.warranty
0
.0.weight
220
.0.sale_price
214.05
.0.recommended_price
.0.min_sale_price
149.835
.0.max_sale_price
321.075
.0.vat_id
1
.0.currency_type
.0.status
1
.0.stock
0
.0.handling_time
1
.0.supply_lead_time
14
The channel
Sell on products eMAG already lists
If a product is already in eMAG's catalog, your offer attaches to it by part_number_key or EAN, with no new product page and no wait for content validation.
One API, three countries
The same Marketplace API and the same product_offer structure serve eMAG Romania, Bulgaria and Hungary. Only the locale, currency and VAT IDs differ per platform.
A price band against typos
On the first save eMAG asks for a minimum and maximum price for each offer, so a mistyped price outside the band never goes live.
The feed
- The eMAG template maps every key eMAG requires: id, part_number, category_id, name, brand, sale_price, min and max price, vat_id, status, stock and handling_time
- Prices go out net of VAT as eMAG requires, divided by the rate from your own Shopify tax setup, with the rate carried as its ID
- The seller product ID is read from a metafield, because Shopify's variant IDs exceed eMAG's integer range
- The required min and max price band is prefilled at 70 % and 150 % of the net price, and adjustable
- Sale prices come from compare-at: recommended_price above sale_price shows the offer as a promotion
- Stock is clamped at zero and a sold-out variant stays active with stock 0, the way eMAG expresses sold out
Deep dive
How products reach eMAG
- eMAG does not download a feed file from a
URL: its MarketplaceAPItakes data in the request - Offers go in batches of up to 50 per request, with
HTTPBasic credentials from whitelisted IPs - Stock can be updated on its own, without resending the whole offer
- Feedflock prepares the product_offer data every hour; your sync sends it
Technical details
eMAG is not a comparison site that downloads a feed from a URL. Its Marketplace API takes product and offer data in the body of each request (up to 50 offers per request, authenticated with HTTP Basic credentials and accepted only from IP addresses you whitelist), and stock can be updated on its own.
Feedflock prepares the per-variant product_offer data, every key the API needs, and regenerates it every hour, so the sync that sends it always works from your current catalog. The sending itself is done by your sync, not by Feedflock.
Product and offer in one object
- One product_offer carries the product documentation and the sellable offer together
- Updating an offer needs only id, status, sale_price, vat_id, stock and handling_time
- A new product also needs category_id, name, part_number and brand, and enters content validation
- min_sale_price and max_sale_price are required on the first save
Technical details
One product_offer carries two halves: the product documentation (name, brand, part_number, description, images, ean and category_id) and the sellable offer (sale_price, vat_id, stock, handling_time and status). Updating an existing offer needs only the offer keys plus your id; a new product also needs category_id, name, part_number and brand, and then enters eMAG's content validation.
On the first save eMAG also asks for min_sale_price and max_sale_price. The seller product ID must be an integer up to 16 777 215, which Shopify's variant IDs far exceed, so the template reads it from a metafield you assign.
Net prices and the VAT ID
- Every price is without
VAT, up to four decimals and always above zero - The
VATrate travels separately as an ID from your account, never as a percentage - On eMAG Romania prices are in lei, and currency_type is left out
- Feedflock computes the net prices from your Shopify tax rates
Technical details
All prices are without VAT, with up to four decimals and always above zero; the VAT rate travels separately as an ID from your account's VAT list, never as a percentage inside the price. On eMAG Romania prices are in lei, the platform's own currency, so currency_type stays empty.
Feedflock computes the net prices from the VAT rate in your Shopify tax settings, so a gross price never slips into a net field. recommended_price is the compare-at price, net as well, and must be higher than sale_price to show as a promotion.
Matching to eMAG's catalog
- Attach to an existing product with its part_number_key or a single
EAN - Creating a new product is the fallback, and it enters content validation before it can sell
- category_id must be a leaf category, and the category decides whether
EANor warranty is mandatory - Sold out is stock 0, not status 0
Technical details
If the product already exists in eMAG's catalog, attach your offer with its part_number_key or a single EAN instead of creating a duplicate. Creating a new product is the fallback, and it enters content validation before it can sell.
category_id must be a leaf category from eMAG's list, and the category decides whether an EAN or a warranty is mandatory. An offer is for sale only with stock above 0 and status 1, so a sold-out variant stays active with stock 0.
The takeaway
A template that already speaks eMAG's product_offer structure, with net prices, the price band and stock regenerated every hour. Your Shopify catalog stays the single source of truth, and your eMAG sync always sends its current state.
Claude · ChatGPT
Or set up your eMAG feed in chat
Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to eMAG's own tree and tells you what is still missing. You approve every change.
Create a eMAG feed for my store and map my categories.
I'll create it as a draft and show you each change before I make it.
FAQ
Related feeds
Explore all 101 channelsGet on every marketplace that matters this afternoon.
Install free, connect your first feed in minutes, and let Feedflock keep it fresh and validated.