Scrape eMAG.bg listings, offers and seller prices

eMAG.bg Scraper
Solutions

Formats, delivery and schedule

We run the crawlers, you receive files. Output ships as CSV, JSON, JSONL, XLSX or straight into Google Sheets, and larger projects can be pushed to S3 or a database you control, or read through an API endpoint on our side. Schedules are set per project: hourly for a watchlist of PNKs, daily for price and stock monitoring, weekly or monthly for full catalogue refreshes.

Field list, category scope, brand or vendor filters and file layout are agreed before the first run and stay fixed afterwards, so downstream imports do not break. When eMAG.bg changes its markup we repair the crawler; that maintenance is part of the service, not a change request.

Fields we pull from eMAG.bg pages

Every record is keyed on part_number_key, so rows stay joinable across runs, across categories and across eMAG country sites. A typical extract carries:

  • Identity - part_number_key (PNK), product_id, offer_id, vendor_id, category_id, department_id, the full category_trail and the canonical /pd/ URL.
  • Product - Име на продукта (product name) from data-name, Марка (brand) and brand id, the Характеристики (specifications) table, and image URLs on s13emagst.akamaized.net.
  • Price - price.current, price.net without ДДС (VAT), price.initial, discount.absolute and discount.percent, ПЦД (препоръчителна цена на дребно, recommended retail price) as recommended_retail_price, and lowest_price_30_days, the Omnibus най-ниска цена за последните 30 дни (lowest price in the last 30 days).
  • Availability - availability.code and availability.text, values such as in_stock or limited_stock_qty, and available_delivery_methods.
  • Sellers - offers_count and the EM.multiple_offers array behind the Офертите на eMAG (eMAG offers) panel, each entry carrying vendor id, name, sef_name and storefront path /[sef_name]/[vendor_id]/v.
  • Offer flags - is_fulfilment_by_emag for Fulfilment by eMAG (FBE), is_genius_eligible for eMAG Genius, has_free_delivery, has_pickup for easybox and Sameday collection, is_used, is_open_package for resealed units, and is_bf during Черен петък (Black Friday).
  • Reviews - aggregateRating and reviewCount, plus отзиви (reviews) with rating, anonymised author and datePublished; review comments are served separately by the internal host sapi.emag.bg.

Category crawls alone already yield usable rows. Listing cards expose data-product-id, data-offer-id, data-category-id, data-department-id, data-category-trail, data-name, data-position, data-availability-id and data-url, with an embedded JSON blob carrying pnk, price and currency, so product pages are opened only where specifications, the full offer list or reviews are required.

Fields we pull from eMAG.bg pages
What scheduled crawling adds

What scheduled crawling adds

A single snapshot of eMAG.bg is a price list. Repeated runs turn it into a record of behaviour.

Delisting here is not a 404. A product that stops being sold keeps its permanent /pd/[PNK]/ URL and migrates from the offers-available sitemap into offers-unavailable, so a long-running dataset has to track availability state rather than HTTP status. Scheduled crawls capture that transition directly: when an offer went out of stock, how long it stayed there, whether it returned and at what price. Resealed units under Разопаковани продукти behave the same way, appearing with returns volume and vanishing once sold, so that branch only means anything when it is sampled on a schedule.

Offer-level history is where most of the value sits. Vendors appear and disappear on a PNK, the cheapest seller changes hands, an offer moves in or out of Fulfilment by eMAG, Genius eligibility flips, free delivery is switched on for a season. None of that survives in a one-off export.

Price series also let you read the promotional calendar instead of trusting the badge. Comparing observed prices against lowest_price_30_days through a Black Friday window separates real reductions from movements in the reference price. Every row carries a run timestamp, so the dataset stays a time series rather than being overwritten.

What eMAG.bg looks like as a data source

eMAG.bg is the Bulgarian storefront of the eMAG group, and it runs as a marketplace: eMAG sells through its own first-party vendor, id 1, while third-party vendors list against the same catalogue entries. The detail that matters for extraction is the identifier. A product page sits at emag.bg/[latin-slug]/pd/[PNK]/, and the trailing nine-character uppercase part_number_key is the stable key. The slug is a transliteration of the Bulgarian title and can be rewritten; the PNK does not move. It repeats as the JSON-LD sku and as EM.pnk in page JavaScript.

That key is group-wide. Product pages carry rel=alternate hreflang links for ro, bg and hu pointing at emag.ro, emag.bg and emag.hu, different slugs and an identical PNK, so comparing the same item across the three markets is a join on one column instead of fuzzy title matching.

Listing grammar is stable and scriptable: categories end in /c, pagination inserts /pN/, sorting uses paths such as sort-priceasc, sort-pricedesc and sort-discountdesc, brands sit under /brand/, attribute facets under /filter/[name]-f[id],[value]-v[id]/, departments end in /d and /sd, and resealed stock has its own /razopakovani-produkti/c branch for Разопаковани продукти (resealed products). Product HTML is server-rendered rather than a JavaScript shell, so the JSON-LD Product and BreadcrumbList blocks and the EM globals arrive in the first response.

Get a Quote
dev_w
25

Developers

customers
500+

Customers worldwide

pages
1 500 000 000+

Pages extracted

stime
15000+

Hours saved for our clients

Plans

Airplane

€199 / one-time

setup fee - included

Data limits100,000
Frequencyone-time
Run timeup to 5 days
Data storing7 days

Helicopter

€169 / mo

setup fee €499

Data limits250,000
Frequencymonthly
Run timeup to 5 days
Data storing14 days

Glasses

€229 / mo

setup fee €499

Data limits1,000,000
Frequencyweekly
Run timeup to 5 days
Data storing30 days

DNA

€549 / mo

setup fee €799

Data limits3,000,000
Frequency3 times daily
Run timesame day
Data storing90 days

What buyers do with eMAG.bg data

Vendors selling on eMAG Marketplace need to see the offer block the way a shopper sees it. The multiple_offers array returns every competing price on a PNK together with the vendor behind it, so repricing is decided against named sellers rather than an anonymous lowest figure. Brands use the same rows for ПЦД and MAP checks, because recommended_retail_price sits next to the live price in a single record and breaches are visible per seller.

Retailers and distributors outside the marketplace use category and brand crawls for assortment work: which items a category actually carries, which brands hold shelf space, where a sub-category is thin. Since the PNK is shared with emag.ro and emag.hu, the same extract supports cross-border pricing - one item, three markets, one join key - which matters when a Bulgarian launch is planned off Romanian demand.

Merchandising and marketing teams pull discount fields and lowest_price_30_days around Черен петък and Fashion Days to see how discount depth actually moved, and reviews (отзиви) with ratings feed product research, warranty analysis and quality tracking.

Related Case Studies

The Entire Iherb Supplements Catalog, Captured End-to-End in 3 Days

The Entire Iherb Supplements Catalog, Captured End-to-End in 3 Days

Scraping supplement products from iHerb.com with full details, including descriptions and packaging variations.

Learn More about The Entire Iherb Supplements Catalog, Captured End-to-End in 3 Days
The Lowest Allegro Prices from 150K Eans Collected

The Lowest Allegro Prices from 150K Eans Collected

Daily scraping of lowest prices for 150K products on Allegro.pl to support marketplace pricing and margin optimization.

Learn More about The Lowest Allegro Prices from 150K Eans Collected
Ralph Lauren Monitoring on Amazon, 8 Markets Scanned Into One Clean Dataset

Ralph Lauren Monitoring on Amazon, 8 Markets Scanned Into One Clean Dataset

Regular monitoring of Ralph Lauren clothing, footwear, and accessories sold across Amazon subdomains: AE, DE, ES, FR, IT, NL, PL, UK.

Learn More about Ralph Lauren Monitoring on Amazon, 8 Markets Scanned Into One Clean Dataset
Our Blog

Reads Our Latest News & Blog

Learn how to use web scraping to solve data problems for your organization

6 E-Commerce Sites Like eBay to Scrape in 2026

6 E-Commerce Sites Like eBay to Scrape in 2026

If you sell online, run a marketplace, or advise e-commerce clients, you already know why eBay matters: it’s one of the few places where big retailers compete side by side with thousands of small merchants and private sellers.

Top 8 E-commerce Websites to Scrape in 2026 (From Amazon to 1688)

Top 8 E-commerce Websites to Scrape in 2026 (From Amazon to 1688)

E-commerce teams do not just need “some” competitor data anymore. They need a continuous stream of real prices, discounts, stock levels, reviews, and seller behavior from the platforms that actually shape their markets.

How to Scrape Amazon Data: Benefits, Challenges & Best Practices

How to Scrape Amazon Data: Benefits, Challenges & Best Practices

Amazon provides valuable information gathered in one place: products, reviews, ratings, exclusive offers, news, etc. So scraping data from Amazon will help solve the problems of the time-consuming process of extracting data from e-commerce.

scrapeit logo

Why run this with ScrapeIt

ScrapeIt is a managed scraping agency. We build the crawlers, run them on our own infrastructure, monitor them, repair them when a site changes, and hand over clean data on the schedule you set. Nothing to install, no proxy pool to babysit on your side.

Marketplace work is our routine load, eMAG group sites included, so the awkward parts - PNK-level joins, offer arrays, availability states, EUR reconciliation - are handled by people who have done them before.

FAQ

Is it legal to scrape eMAG.bg product data?

We collect only publicly visible pages - the product, category and vendor pages any visitor can open - without logging in or creating accounts, and we honour the disallow rules in emag.bg/robots.txt, which blocks /user/, /cart/, /checkout, /favorites/ and /search/listall while explicitly allowing review paths. Price, availability, seller name and specifications are factual trade data rather than creative content. We are not lawyers, though: if the use case is sensitive, have counsel review it, and we can exclude specific fields such as review text from delivery.

eMAG.bg stops at 100 pages per category. How do you get the full catalogue?

Listings return 60 products per page and pagination is hard-capped at page 100. Requests for /p101/c and beyond still answer HTTP 200, but with no product cards, so any single category, filter or search query exposes at most about 6,000 products. Full coverage comes from splitting the space: sub-departments and sub-categories, brand paths, attribute filters, price bands and sort order, then de-duplicating on part_number_key. We also seed from the sitemap sets - the offers-available index and its child files, plus categories, vendors, brands and resealed sitemaps - which enumerate offer URLs without paging through listings at all.

How do you deal with the CAPTCHA and HTTP 511 responses on emag.bg?

eMAG.bg sits behind AWS WAF. Once a single address exceeds a modest request rate, every URL including /sitemaps/*.xml answers HTTP 511 Network Authentication Required with a Bulgarian interstitial about unusual traffic and an aws-waf-token challenge. We do not sell a way around protection. We engineer around the constraint: low concurrency per address, distributed egress, honest pacing between requests, back-off and retry when a 511 appears, and monitoring that pauses a job instead of hammering the site. Throughput is therefore planned around a sustainable rate, which is why scope and schedule are agreed before the build.

Are prices delivered in EUR or in BGN after the euro changeover?

Since the 1 January 2026 changeover, eMAG.bg structured data and offer JSON carry EUR only: priceCurrency EUR, currency id 4, the euro symbol and a comma decimal separator. The dual BGN figure shown to consumers is not present in the server-rendered price fields. We deliver EUR as scraped and add a BGN column on request, converted at the fixed irrevocable rate of 1 EUR = 1.95583 BGN. Series collected before the changeover are reconciled at the same rate, so one continuous price history is possible.

Do I need an eMAG seller account or the Marketplace API for this?

No account is needed, and one would not help. The official eMAG Marketplace API at marketplace-api.emag.bg/api-3 is seller-only: HTTP Basic Auth, API rights granted by eMAG, IP whitelisting and tight rate limits, and it returns your own offers, orders and stock. It never returns a competitor's catalogue, prices or availability, and it says nothing about vendors you do not control. Market-wide data on eMAG.bg exists only on the public pages, which is why page extraction is the route to it.

How does it Work?

Step 1 - Make a Request

You share your needs, expectations, and desired timeframe. We’ll suggest the best solution based on your request and budget.

Step 2 - Configuring Custom Web Crawlers

Our specialists configure the crawlers and extract a sample dataset for your review before proceeding with the full-scale extraction.

Step 3 - Collect and Deliver

Once you approve the sample, we launch the project and start full data collection. We gather, filter, and structure the data for easy use, delivering it on time in your preferred format.

Step 4 - Maintain and Support

Our team manages ongoing processes, monitors website changes, and supports all data extraction cycles. We can also help integrate data into your systems or create dashboards to simplify analysis.

Request a Quote

Tell us more about you and your project information.
Which sites, which fields, how often. A couple of lines is enough.

We reply within 1 business day. No obligation.

scrapiet

Scrapeit Sp. z o.o.
10/208 Legionowa str., 15-099, Bialystok, Poland
NIP: 5423457175
REGON: 523384582