eMAG APIemag.ro ↗
Access eMAG.ro product listings, prices, reviews, and seller data via 5 structured endpoints. Search by keyword, browse categories, and retrieve full product details.
What is the eMAG API?
The eMAG.ro API provides structured access to Romania's largest online retailer across 5 endpoints, covering product search, category browsing, product details, customer reviews, and seller profiles. The search_products endpoint returns paginated results with pricing in RON, availability status, vendor name, and aggregate ratings — giving you machine-readable access to the catalog without manual browsing.
curl -X GET 'https://api.parse.bot/scraper/959f4c13-0fd1-441a-b210-6ca44ba4acd3/search_products?page=1&sort=popularity_v_opt&limit=10&query=laptop&direction=asc' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace emag-ro-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
eMAG Romania Product API - Usage Example
Get your API key from: https://parse.bot/settings
"""
from parse_apis.emag_romania_product_api import Emag, Sort, Direction
emag = Emag()
# Search for products sorted by popularity
for product in emag.products.search(query="laptop", sort=Sort.POPULARITY, direction=Direction.DESC, limit=5):
print(product.name, product.price, product.currency, product.reviews_count)
# Browse a category
tv_category = emag.category("televizoare")
for tv in tv_category.products(sort=Sort.PRICE, direction=Direction.ASC, limit=3):
print(tv.name, tv.price, tv.vendor)
# Get product reviews via sub-resource navigation
macbook = emag.product("DGZPVY3BM")
for review in macbook.reviews.list(limit=5):
print(review.title, review.rating, review.created)
# Retrieve seller information
seller = emag.sellers.get(seller_id="1", seller_sef_name="emag")
print(seller.name, seller.rating, seller.positive_share)
Full-text search over eMAG product catalog. Returns paginated product listings with pricing, availability, vendor, and ratings. Supports sorting by popularity, review count, or price. Each item includes a PNK code usable with get_product_details and get_product_reviews.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (starts at 1) |
| sort | string | Sort field |
| limit | integer | Max results per page |
| queryrequired | string | Search keyword |
| direction | string | Sort direction |
{
"type": "object",
"fields": {
"page": "integer current page number",
"items": "array of product objects with id, pnk, name, url, image, price, currency, availability, vendor, rating, reviews_count",
"limit": "integer results per page",
"total": "integer total number of matching products"
},
"sample": {
"data": {
"page": 1,
"items": [
{
"id": 104244210,
"pnk": "D9Z7643BM",
"url": "https://www.emag.ro/laptop-gaming-asus-tuf-a16/pd/D9Z7643BM/",
"name": "Laptop Gaming ASUS TUF A16",
"image": "https://s13emagst.akamaized.net/products/104245/104244210/images/res_ba18149aeebe74af7b1b743b8769186b.png",
"price": 4099.99,
"rating": 5,
"vendor": "eMAG",
"currency": "RON",
"availability": "În stoc",
"reviews_count": 2
}
],
"limit": 60,
"total": 13623
},
"status": "success"
}
}About the eMAG API
Product Search and Category Browsing
The search_products endpoint accepts a query string and returns an array of product objects, each containing id, pnk (part number key), name, url, image, price, currency, availability, vendor, rating, and reviews_count. Pagination is controlled via page and limit parameters. Results can be sorted by popularity_v_opt, review_count, or sale_price_int in either asc or desc direction. The get_category_products endpoint works identically but accepts a category_slug such as laptopuri, televizoare, or telefoane-mobile instead of a free-text query, and returns a total count of all products in that category.
Product Details and Reviews
get_product_details accepts either a full product URL (e.g., https://www.emag.ro/product-name/pd/ABC123/) or a bare pnk code and returns an expanded record with brand, sku, images (an array of URLs), rating, and the canonical url. The get_product_reviews endpoint accepts the same dual-format identifier and returns a reviews object containing a count, a rating_distribution, and an items array where each review includes id, title, content, rating, user, and created timestamp. Both endpoints support page and limit for pagination through large review sets.
Seller Information
The get_seller_info endpoint takes a numeric seller_id and a seller_sef_name slug (for example, 1 and emag for the first-party retailer) and returns the seller's name, company_name, rating score, positive_share percentage, and a url pointing to the seller's profile page on eMAG.ro. This makes it straightforward to cross-reference vendor identity against product listings returned by search or category endpoints.
The eMAG API is a managed, monitored endpoint for emag.ro — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when emag.ro changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official emag.ro API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track price changes on specific products over time using
priceandpnkfromget_product_details. - Build a category-level price comparison tool using
sale_price_intsorting inget_category_products. - Aggregate customer sentiment by pulling review
ratingandcontentfields viaget_product_reviews. - Monitor product availability across the eMAG catalog using the
availabilityfield in search results. - Enrich seller vetting workflows with
positive_shareandcompany_namefromget_seller_info. - Identify top-reviewed products in a category by sorting
get_category_productsbyreview_countdescending. - Build a product feed for a Romanian price comparison site using search results with
url,price, andimage.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does eMAG have an official public developer API?+
What does `get_product_details` return beyond what appears in search results?+
get_product_details adds brand, sku, and a full images array (multiple image URLs) to the base fields you see in search or category listings. It accepts either a full product URL or a bare pnk code, so you can feed it identifiers from any of the listing endpoints without reformatting.Does the API return product specifications or technical attributes?+
Does the API cover eMAG's other country storefronts (Bulgaria, Hungary)?+
How does pagination work across the listing endpoints?+
search_products and get_category_products return a total count alongside the current page and limit values. Divide total by limit to calculate how many pages exist, then increment page to walk through them. The default page is 1; if limit is not specified, eMAG's default page size is applied.