Biedronka Scraper: Polish Grocery Prices avatar

Biedronka Scraper: Polish Grocery Prices

Pricing

$1.50 / 1,000 products

Go to Apify Store
Biedronka Scraper: Polish Grocery Prices

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

Hexagone Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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

  1. Paste an aisle URL into Start URLs.
  2. Set Maximum number of products to 20.
  3. Start the Actor and open its dataset (the Prices view shows product, brand, price and per-unit price).
  4. 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

InputData
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>.htmlThe 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

FieldMeaning
productIdBiedronka product id (tile data-pid), 10 digits. Deduplication key.
name, brand, url, imageProduct identity as published by the site.
price, priceCurrencyDisplayed 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, promotionLabelAlways 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.
pricedPerWhat the displayed price buys, as shown next to it: /szt. (piece), /but. (bottle), /opak. (pack), /100g, /kg.
unitPrice, unitPrice per kg/l/szt. as displayed under the name (e.g. 7,99 zł / l → unitPrice 7.99, unit l).
packagingPack size as displayed: 1l, 0.16kg, 16szt., ok. 350 g ~ 0.35kg.
depositReturnable-bottle deposit (kaucja) in PLN when displayed.
availabilityFrom product pages only (schema.org offer): inStock or outOfStock. Listings carry a CSS-driven template text, not a per-product state: null there.
categorySite category path, e.g. Napoje > Soki > Soki świeże.
priceContextVerified no-store context (see above), with the page markers it was read from.
position, page, sourceUrl, scrapedAtCollection 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=N until 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 a partial_collection status 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

SymptomMeaning
rejected URLs in the summarySorting/filter/search parameters or a non-catalog page: paste the plain aisle or product URL.
no_productsAn information page or an aisle empty at read time.
not_found, http_error, blocked_by_site, network_errorThe site refused or failed one URL; the others still ran. A proxy (Advanced section) helps if blocks repeat.
partial_collectionThe site served something other than the requested page during pagination.
No product at all, failed runEvery URL failed: check the URLs, then retry later.