Biedronka Scraper: Polish Grocery Prices
Pricing
$1.50 / 1,000 products
Biedronka Scraper: Polish Grocery Prices
Scrape zakupy.biedronka.pl product listings and pages: price in PLN, per-kg/per-litre price, pack size, bottle deposit, brand, category and images. Aisle or product URLs, pay per result.
Pricing
$1.50 / 1,000 products
Rating
0.0
(0)
Developer
Hexagone Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Biedronka Scraper — Polish Grocery Product Prices
Collect product information from zakupy.biedronka.pl, the online shop of Biedronka, Poland's largest grocery chain (Jerónimo Martins). Paste aisle URLs for full product listings with prices, or product URLs for their product-page details. Products are deduplicated within the run.
All prices are served to an anonymous visitor of the national online shop (no store selected, no loyalty card). This verified context is attached to every record.
Try it with 20 products
- Paste an aisle URL into Start URLs.
- Set Maximum number of products to
20. - Start the Actor and open its dataset (the Prices view shows product, brand, price and per-unit price).
- Read Run summary before exporting: a successful run can still contain rejected URLs or warnings.
{"startUrls": [{"url": "https://zakupy.biedronka.pl/napoje-2/"}],"maxItems": 20}
Set maxItems explicitly in API calls (0 removes the limit). Listings are read page by page — 32 products per page — until the total announced by the site or your limit.
Choose aisle or product URLs
| Input | Data |
|---|---|
Aisle …/<aisle>/ (any depth, e.g. /drogeria/papier-toaletowy-i-chusteczki/papier-toaletowy/) | Every product of the listing, paginated to the end, with id, name, brand, price, per-unit price, pack size and category |
Product …-<10 digits>.html | The product-page record: same price fields plus availability (inStock/outOfStock) |
You can mix both modes. Explicit product URLs are processed first; a product-page record takes precedence over its duplicate listing record. A URL pasted with ?page=N is read from its page 1.
Sorting (srule), filters (prefn, prefv, pmin, pmax), pid, search (q) and filtered-listing paths (containing +) are disallowed by the site's robots.txt and rejected with a reason. An invalid URL never fails the others.
Output
| Field | Meaning |
|---|---|
productId | Biedronka product id (tile data-pid), 10 digits. Deduplication key. |
name, brand, url, image | Product identity as published by the site. |
price, priceCurrency | Displayed price in PLN. Polish decimal comma converted: 7,99 zł → 7.99. The 0,00 zł cart total shown in the page header is never used as a product price. |
regularPrice, promotionLabel | Always null in the current site version: the anonymous no-store view never displays a crossed-out price or a promotion label. If the site ever serves a non-standard price block, the page is refused rather than guessed. |
pricedPer | What the displayed price buys, as shown next to it: /szt. (piece), /but. (bottle), /opak. (pack), /100g, /kg. |
unitPrice, unit | Price per kg/l/szt. as displayed under the name (e.g. 7,99 zł / l → unitPrice 7.99, unit l). |
packaging | Pack size as displayed: 1l, 0.16kg, 16szt., ok. 350 g ~ 0.35kg. |
deposit | Returnable-bottle deposit (kaucja) in PLN when displayed. |
availability | From product pages only (schema.org offer): inStock or outOfStock. Listings carry a CSS-driven template text, not a per-product state: null there. |
category | Site category path, e.g. Napoje > Soki > Soki świeże. |
priceContext | Verified no-store context (see above), with the page markers it was read from. |
position, page, sourceUrl, scrapedAt | Collection provenance; position/page are null for product pages. |
An absent field is null, never an empty string. This Actor returns observations, not a maintained price history: retain scrapedAt with your exports.
Real output example
Collected on 22 October 2026; it demonstrates the format, not today's price or stock.
{"productId": "0000007412","name": "Tymbark Sok 100 % multiwitamina 1 l","brand": "Tymbark","url": "https://zakupy.biedronka.pl/tymbark-tymbark-sok-100-multiwitamina-1-l-0000007412.html","image": "https://zakupy.biedronka.pl/dw/image/v2/BKFJ_PRD/on/demandware.static/-/Sites-PL_Master_Catalog/default/dwdd18cf55/images/hi-res/8AF1972A2C849412BBCAFCD4DB6DA82C.jpg?sw=270&sh=270&sm=fit","price": 5.95,"priceCurrency": "PLN","regularPrice": null,"pricedPer": "/szt.","unitPrice": 5.95,"unit": "l","packaging": "1l","deposit": null,"promotionLabel": null,"availability": null,"category": "Napoje > Soki > Soki owocowe 100%","priceContext": {"state": "no_store_selected", "store": null, "deliveryPostalCode": null},"position": 1,"page": 1,"sourceUrl": "https://zakupy.biedronka.pl/napoje-2/","scrapedAt": "2026-10-22T06:00:00+00:00"}
Coverage, limits and run summary
- The site serves 32 products per page and announces its total; the Actor paginates with
?page=Nuntil that total. Beyond the last page the site returns the last page again instead of an empty page — the Actor detects this and stops the URL with apartial_collectionstatus rather than looping or duplicating products. - The site has no per-category search-engine ceiling in the measured configuration, but totals above a few thousand products were not measured; prefer narrower aisles for targeted collection.
- Availability and stock: the online shop requires a store choice before checkout; listings do not publish a per-product stock state. Do not treat results as local-store inventory.
If Run summary stays blank, open the run's Storage → Key-value store tab and click the eye icon on the SUMMARY row for the HTML report; OUTPUT holds the same summary as JSON, with the per-URL statuses (done, no_products, not_found, stopped_at_limit, partial_collection, …), rejected URLs with reasons, and automatic check warnings (empty list when everything is normal).
Pricing
Pay-per-event: $1.50 per 1,000 products delivered to the dataset, prorated. A run that delivers nothing charges nothing. Your maximum charge per run is enforced by the platform: collection stops at that budget.
Troubleshooting
| Symptom | Meaning |
|---|---|
rejected URLs in the summary | Sorting/filter/search parameters or a non-catalog page: paste the plain aisle or product URL. |
no_products | An information page or an aisle empty at read time. |
not_found, http_error, blocked_by_site, network_error | The site refused or failed one URL; the others still ran. A proxy (Advanced section) helps if blocks repeat. |
partial_collection | The site served something other than the requested page during pagination. |
| No product at all, failed run | Every URL failed: check the URLs, then retry later. |