eMAG Product Scraper avatar

eMAG Product Scraper

Pricing

from $0.50 / 1,000 results

Go to Apify Store
eMAG Product Scraper

eMAG Product Scraper

Extract product listings from eMAG - Romania, Bulgaria & Hungary. Scrape prices, stock status, ratings, seller info, and category paths from emag.ro, emag.bg, and emag.hu. No proxy required.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

Extractify Labs

Extractify Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Last updated: 2026-05-05 | Version: 1.0 | Status: Active

Extract product listings and individual product details from eMAG — the leading e-commerce marketplace in Romania, Bulgaria, and Hungary. Scrape prices, stock status, ratings, seller information, category paths, images, and optional customer review texts across emag.ro, emag.bg, and emag.hu in a single actor run. No proxy subscription required.

Overview

The eMAG Product Scraper accepts category URLs, search page URLs, individual product page URLs, or plain search terms, and returns structured product data for every matching item. It uses the official eMAG search API for category and search inputs — which is fast and reliable with no rate-limiting issues — and falls back to HTML JSON-LD parsing for direct product page URLs. All three eMAG country domains (Romania, Bulgaria, Hungary) are supported automatically: the country is detected from the URL hostname, so a single run can collect products across all three markets simultaneously.

Who is this for? E-commerce analysts and competitive intelligence teams that need current pricing, availability, and seller data from Eastern European markets. Dropshipping researchers who source products from eMAG for resale. Price monitoring pipelines that need to track promotional discounts across multiple country domains. Developers integrating eMAG product data into inventory systems, comparison engines, or dashboards.

What makes it different? A single actor handles all three eMAG country sites without needing separate configurations per domain. The actor also combines two scraping strategies in one: fast API-based extraction for search and category pages (720×720 images, full pricing metadata), and HTML JSON-LD parsing for direct product page URLs. No proxy subscription is required — eMAG does not block direct API requests.

Key Features

  • Category and search page scraping — Pass eMAG category URLs (/c suffix), subcategory URLs (/sd suffix), or search result URLs to extract all listed products with automatic pagination.
  • Direct product page support — Pass individual eMAG product page URLs (/pd/CODE/) to extract a specific product by its detail page.
  • Keyword search — Supply one or more search terms via searchTerms; each term runs as a separate search and results are combined into a single dataset.
  • Multi-domain in one run — Mix emag.ro, emag.bg, and emag.hu URLs in a single startUrls array. Country is auto-detected per URL; the country input parameter sets the default for keyword searches.
  • 23 output fields per product — Includes price, original price, discount percentage, brand, category path (department → sub-department → category), stock status, rating, review count, seller name, offer ID, recommendation rate, fulfilled-by-eMAG flag, badges, images, and scrape timestamp.
  • Optional customer review texts — Set includeReviewTexts: true to fetch the full text of each product's customer reviews (one extra API request per product). Star rating and review count are always included regardless of this setting.
  • Global item cap — Set maxItems to limit the total number of products collected across all URLs and search terms combined.
  • No proxy required — The sapi.emag.ro API accepts direct requests. You pay only for Apify compute — no residential or datacenter proxy subscription needed.

Supported Sites

DomainCountryCurrency
emag.roRomaniaRON
emag.bgBulgariaBGN
emag.huHungaryHUF

The actor detects the country from each URL's hostname and returns the corresponding currency code in every output item. When using searchTerms without startUrls, the country parameter controls which domain is searched (default: "ro").

Quick Start

Scrape the top laptops from emag.ro (category page)

Input:

{
"startUrls": [
{ "url": "https://www.emag.ro/laptopuri/c" }
],
"maxItems": 10
}

Search for a product by keyword

Input:

{
"searchTerms": ["laptop lenovo"],
"country": "ro",
"maxItems": 5
}

Extract a specific product by its page URL

Input:

{
"startUrls": [
{ "url": "https://www.emag.ro/laptop-lenovo/pd/DBLL5H3BM/" }
]
}

Multi-domain run: compare prices across Romania and Bulgaria

Input:

{
"startUrls": [
{ "url": "https://www.emag.ro/laptopuri/c" },
{ "url": "https://www.emag.bg/laptopi/c" }
],
"maxItems": 20
}

Input Parameters

ParameterTypeDefaultDescription
startUrlsarrayrequired*List of eMAG URLs to scrape, each as a { "url": "…" } object. Accepts category pages (/c, /sd), search result pages (/search/…), or individual product pages (/pd/CODE/). The URL's hostname auto-detects the country (emag.ro, emag.bg, emag.hu) and overrides the country parameter for that request. At least one of startUrls or searchTerms must be provided.
searchTermsarray of stringsrequired*Keywords to search on eMAG. Each term runs as a separate search. Results from all terms are combined in the output. The country parameter controls which domain is searched. At least one of startUrls or searchTerms must be provided.
countrystring ("ro", "bg", "hu")"ro"Default country site used for searchTerms runs. Overridden per-URL by the URL's hostname when startUrls are provided.
maxItemsintegerunlimitedTotal products to collect across all URLs and search terms combined. Leave unset to collect all available products.
includeReviewTextsbooleanfalseFetch the full text of customer reviews for each product. When true, one extra API request is made per product. Star ratings and review counts are always included regardless of this setting.

* Required: At least one of startUrls or searchTerms must be provided. If neither is given, the actor stops immediately with an error message.

How to find an eMAG category URL

  1. Go to emag.ro, emag.bg, or emag.hu.
  2. Browse to the category you want to scrape.
  3. The URL will end in /c (top-level category) or /sd (subcategory). Copy this URL directly into startUrls.

Examples:

  • Laptops Romania: https://www.emag.ro/laptopuri/c
  • Laptops Bulgaria: https://www.emag.bg/laptopi/c
  • Phones Romania: https://www.emag.ro/telefoane-mobile/c

How to find a product page URL

Navigate to any product on eMAG. The URL contains /pd/ followed by the product code (e.g. https://www.emag.ro/…/pd/DBLL5H3BM/). Copy this URL directly into startUrls.

Output Data Schema

Every output item is a JSON object with the following fields. All fields are always present in the output — fields with no value are null (or [] for array fields) rather than absent.

FieldTypeExampleNotes
productIdstring"DBLL5H3BM"eMAG internal product code (part number key)
titlestring"Laptop Lenovo Thinkbook 16 G7…"Full product title
urlstring"https://www.emag.ro/…/pd/DBLL5H3BM/"eMAG product page URL. Note: the eMAG API always returns emag.ro canonical URLs even for products scraped from emag.bg or emag.hu — see the country field and Limitations for details.
pricefloat4815.92Current selling price
originalPricefloat or null2549.99Pre-discount price. null when there is no active discount, and always null for product page URLs (HTML path).
currencystring"RON"Currency code: RON, BGN, or HUF
discountPercentageinteger or null14Discount as a percentage. null when no discount is active, and always null for product page URLs (HTML path).
brandstring or null"Lenovo"Brand name
categorystring or null"Laptop / Notebook"Leaf-level category name
categoryPatharray of strings["Laptop, Tablete & Telefoane", "Laptopuri si accesorii", "Laptop / Notebook"]Full category breadcrumb from department to leaf
imageUrlstring or null"https://s13emagst.akamaized.net/…?width=720&height=720&…"Primary product image URL. 720×720 for category/search results; 80×80 for product page URLs (JSON-LD limit).
imagesarray of strings["https://…?width=200…", "https://…?width=720…"]All available image URLs (multiple sizes)
ratingfloat or null4.93Average star rating (0–5). Returns 0.0 for products with no ratings yet (not null).
reviewCountinteger or null103Total number of customer ratings
inStockbooleantrueWhether the product is currently available to order
fulfilledByEmagboolean or nulltrueWhether the product is sold and shipped by eMAG directly. Always null for product page URLs (HTML path).
sellerNamestring or null"INFLOO"Third-party seller name, or null when sold directly by eMAG
badgesarray of strings["has_image", "has_offer"]Internal API flags returned by the eMAG search API. These are system-level tags, not commercial badges such as "Genius eligible". Always [] for product page URLs (HTML path).
recommendationRateinteger or null88Percentage of buyers who recommend this product. Always null for product page URLs (HTML path).
offerIdinteger or null304315905eMAG internal offer ID. Always null for product page URLs (HTML path).
countrystring"ro"Country domain used for this product ("ro", "bg", or "hu")
scrapedAtstring (ISO 8601)"2026-05-05T20:26:04.877422+00:00"UTC timestamp of when the item was scraped
reviewsarray of objects or null[{"author": "Ion P.", "rating": 5, "title": "Great product", "text": "…", "date": "2026-04-20", "hasImages": false}]Customer review texts. null when includeReviewTexts is false. Each review has author, rating (1–5), title (headline, or null if not provided), text, date, and hasImages (whether the reviewer attached photos) fields.

Sample output item (from category/search path)

{
"productId": "DBLL5H3BM",
"title": "Laptop Lenovo Thinkbook 16 G7, Procesor Amd Ryzen 5 7533Hs, 16Gb Ddr5, 1Tb Ssd M.2, 16\" 1920x1200, Arctic Grey",
"url": "https://www.emag.ro/laptop-lenovo-thinkbook-16-g7/pd/DBLL5H3BM/",
"price": 4815.92,
"originalPrice": null,
"currency": "RON",
"discountPercentage": null,
"brand": "Lenovo",
"category": "Laptop / Notebook",
"categoryPath": ["Laptop, Tablete & Telefoane", "Laptopuri si accesorii", "Laptop / Notebook"],
"imageUrl": "https://s13emagst.akamaized.net/products/112493/112492367/images/res_acfa2d.jpg?width=720&height=720",
"images": [
"https://s13emagst.akamaized.net/products/112493/112492367/images/res_acfa2d.jpg?width=200&height=200",
"https://s13emagst.akamaized.net/products/112493/112492367/images/res_acfa2d.jpg?width=720&height=720"
],
"rating": 0.0,
"reviewCount": null,
"inStock": true,
"fulfilledByEmag": false,
"sellerName": "INFLOO",
"badges": ["has_image", "has_offer", "has_profiling_widgets", "may_be_compared", "allow_favorites", "allow_feedback"],
"recommendationRate": null,
"offerId": 304315905,
"country": "ro",
"scrapedAt": "2026-05-05T20:26:04.877422+00:00",
"reviews": null
}

Use Cases

eMAG Price Monitoring

Track price changes on specific products or categories over time. Run the actor on a daily schedule using Apify Scheduler, passing the category URLs for the product segments you monitor. Compare each run's price and originalPrice fields to detect promotions, flash sales, and price changes. The scrapedAt timestamp on every item makes it straightforward to join datasets across runs by date.

Competitor Pricing Intelligence

Compare eMAG pricing against your own pricing or competitor prices on other platforms. Combine the actor with a search or category URL covering your product segment, then use the sellerName field to filter for specific merchants or for eMAG's own listings (fulfilledByEmag: true). Export results as CSV from the Apify console and load directly into a spreadsheet or BI tool.

Multi-Market Product Sourcing

Source products from eMAG's three country domains to identify cross-border arbitrage opportunities. Run a single actor job with category URLs from emag.ro, emag.bg, and emag.hu simultaneously. Use the country and currency fields to group and compare prices across markets — products priced lower in BGN (Bulgaria) or HUF (Hungary) after currency conversion can represent resale opportunities in other markets.

Inventory and Stock Monitoring

Monitor which products are in or out of stock for a given category. Set maxItems to a reasonable limit, schedule the actor to run hourly or daily, and filter items by inStock: false to detect stockouts. Combine with Apify Webhooks to trigger a Slack or email notification when a target product goes out of stock or comes back in.

Market Research and Catalogue Building

Build a product catalogue for a specific category by running the actor on all relevant category URLs. The structured categoryPath, brand, rating, reviewCount, and price fields provide enough context for category analysis, brand coverage studies, and market sizing without additional enrichment. Use searchTerms to quickly gather products matching a keyword across all results pages.

Customer Sentiment Analysis

When building a review analysis pipeline, set includeReviewTexts: true to retrieve the full text of each product's customer reviews alongside the product metadata. The reviews field on each item contains the author name, star rating (1–5), review text, and date — ready for sentiment classification, keyword extraction, or summarisation.

Limitations and Known Issues

Fields not available for product page URLs (/pd/CODE/). When a product is scraped via its direct product page URL (HTML JSON-LD path), the following fields are always null or []: originalPrice, discountPercentage, recommendationRate, offerId, fulfilledByEmag, and badges. These fields are only populated when products are scraped via category or search pages (API path). If these fields are important to your use case, use category or search URLs rather than direct product URLs.

Lower-resolution imageUrl for product page URLs. When scraped via a product page URL, the imageUrl field contains an 80×80 thumbnail (JSON-LD limit). Category and search page scraping returns 720×720 images. The images array is also limited to a single 80×80 thumbnail on the HTML path. If full-resolution images are required, use a category or search URL to reach the product instead.

reviews field requires includeReviewTexts: true. Customer review texts are not fetched by default. With the default includeReviewTexts: false, the reviews field is null on every item. Enable includeReviewTexts: true to fetch full review texts — note that this makes one extra API request per product.

rating is 0.0 for unrated products. Products with no customer ratings return rating: 0.0 rather than null. This is the value returned by the eMAG API for products with no ratings. Check reviewCount: null or reviewCount: 0 to distinguish unrated products from products with an actual zero-star average.

badges field contains internal API flags. The badges array contains internal system tags returned by the eMAG API (e.g. "has_image", "has_offer", "allow_favorites"). These are not commercial marketing badges (e.g. "Genius eligible", "Free delivery"). Commercial badge data is tracked separately in GitHub issue #7 for a future release.

url field uses emag.ro canonical URLs for all domains. The eMAG search API returns canonical product URLs on the emag.ro domain regardless of which country domain was queried. Products scraped from emag.bg or emag.hu may have url values pointing to emag.ro. The country field correctly reflects which domain was scraped. This is tracked in GitHub issue #9.

No proxy required. The actor uses the sapi.emag.ro REST API for category and search inputs, which accepts direct requests reliably. No proxy subscription is needed. If you encounter connectivity issues from a specific region, contact support.

maxItems cap is approximate. The global maxItems limit may allow one or two items beyond the configured value due to Scrapy's async pipeline. For strict limits, filter the output dataset downstream.

No product specifications or description. The actor does not extract long-form product descriptions, specification tables, or attribute lists. It returns the 23 structured fields listed in the output schema above.

FAQ

Does this actor work with all three eMAG domains?

Yes. The actor supports emag.ro (Romania), emag.bg (Bulgaria), and emag.hu (Hungary). Pass URLs from any domain in startUrls, and the country is detected automatically from the hostname. You can mix URLs from all three domains in a single run — each output item includes a country field indicating which domain it came from.

What is the difference between startUrls and searchTerms?

startUrls accepts direct eMAG URLs — category pages, search pages, or individual product pages. searchTerms accepts plain text keywords; each keyword is run as a search on the eMAG domain specified by country. Both inputs can be used together in a single run. At least one must be provided.

Can I scrape a specific product by its product code?

Yes. Find the product on eMAG and copy its URL (it will contain /pd/ followed by the product code, e.g. https://www.emag.ro/…/pd/DBLL5H3BM/). Paste this URL into startUrls. Note that several fields (originalPrice, discountPercentage, recommendationRate, offerId, fulfilledByEmag, badges) are not available on the HTML path used for product pages — see the Limitations section above.

How do I get customer review texts?

Set includeReviewTexts: true in the input. The actor will make one additional API request per product to fetch the review texts. Each item's reviews field will contain an array of objects with author, rating (1–5), title (review headline, or null), text, date, and hasImages (whether the reviewer attached photos). With the default includeReviewTexts: false, the reviews field is null.

Does this actor require a proxy?

No. The eMAG search API (sapi.emag.ro) accepts direct requests. No residential or datacenter proxy subscription is needed.

What export formats are supported?

The actor outputs structured JSON to Apify's dataset. From the Apify console or via the API, you can export the dataset as JSON, CSV, Excel (XLSX), or XML. The dataset also integrates directly with Google Sheets via the Apify Google Sheets integration, and can be connected to Zapier, Make, or any HTTP-based integration via the Apify API.

How fast is the scraper?

The actor uses the eMAG REST API for category and search inputs, which returns 48 products per page. Pagination is fully automatic. Speed depends on the Apify compute tier selected and the number of URLs in the run. Enabling includeReviewTexts: true adds one extra API request per product and will reduce overall throughput proportionally.

The actor scrapes only publicly accessible product data — the same data visible to any browser visitor. Scraping publicly available web data has legal precedent (see hiQ Labs v. LinkedIn). Review eMAG's current Terms of Service and ensure your use case complies with applicable data protection laws, including GDPR for EU domains (Romania, Bulgaria, Hungary).