Turkish Discount Market Scraper - A101, BİM, ŞOK Deals
Pricing
$4.00 / 1,000 product-scrapeds
Turkish Discount Market Scraper - A101, BİM, ŞOK Deals
Scrape weekly promotional catalogs (aktuel) from Turkey's three largest discount grocery chains in one run. Unified schema, historical BIM archive, no personal data.
Pricing
$4.00 / 1,000 product-scrapeds
Rating
0.0
(0)
Developer
Fatih Şahinbaş
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Turkish Discount Market Scraper — A101, BİM, ŞOK Aktüel Deals
Scrape the weekly promotional catalogs ("aktüel" campaigns) of Turkey's three largest hard-discount grocery chains — A101, BİM and ŞOK — in a single run, into a single unified dataset.
These catalogs drive a huge share of Turkish household spending and rotate every week. Until now there was no self-serve way to collect them. This Actor gives you one clean schema across all three chains, so you can compare them directly instead of stitching three different site structures together.
What you get
| Field | Description |
|---|---|
chain | A101, BIM or SOK |
campaign | Campaign or catalog date, e.g. Aldın Aldın, 25-31 Temmuz, Haftanın Fırsatları |
productId | Stable identifier within the chain |
brand | Manufacturer brand where the chain publishes it |
name | Product name |
price | Current selling price as a number (TRY) |
originalPrice | Struck-through price — null when there is no markdown |
discountRate | Discount percentage |
currency | Always TRY |
inStock | Stock flag where the chain exposes it |
unit | Weight, volume or pack size (e.g. 500 g) |
url | Product page URL |
image | Product image URL |
categoryPath | Category breadcrumb where available |
promotions | Promotion badges, e.g. multi-buy offers |
features | Bullet-point specs (BİM non-food items) |
scrapedAt | UTC timestamp of the run |
Prices are parsed into real numbers, not strings. Turkish decimal formatting
(34.750,00) and split price markup are handled, and a struck-through price that
is not actually higher than the selling price is discarded rather than saved as a
fake discount.
The dataset ships with two views: Aktuel products (everything) and Discounted only (rows that carry a real markdown).
Why this Actor
Three chains, one schema. A101 serves JSON inside its page payload, BİM serves classic server-rendered HTML with prices split across separate elements, ŞOK serves a Next.js storefront. All three are normalised into identical rows.
BİM historical archive. BİM keeps a separate catalog per promotion date, newest
first. Raise bimMaxDates and the Actor walks those dated catalogs, so you can
build a price history instead of only capturing this week.
ŞOK campaign IDs are auto-discovered and ranked. ŞOK rotates its collection IDs every week. Rather than hardcoding a URL that breaks every Monday, the Actor reads the homepage, then ranks what it finds so weekly-deal and campaign pages are scraped before brand showcases.
Fair quotas. When you cap the run with maxItems, every selected chain and
every campaign page gets a reserved share. A small fast-loading brand page cannot
consume the budget and leave the weekly deals empty.
Failure isolation. Each chain is scraped independently. If one site changes its layout, the others still return data.
No personal data. Only product catalog information is collected — no seller names, no reviewer profiles, no contact details.
Use cases
- FMCG and CPG price intelligence in the Turkish market
- Retail media and news coverage of weekly discount catalogs
- Brand monitoring: where and at what price your SKUs appear
- Building a longitudinal Turkish grocery price index
- Feeding LLM, BI or dashboard pipelines with structured retail pricing data
Input
{"chains": ["A101", "BIM", "SOK"],"a101Campaigns": ["aldin-aldin"],"bimMaxDates": 2,"sokAutoDiscover": true,"sokMaxCollections": 4,"sokMaxPages": 3,"maxItems": 300,"onlyDiscounted": false}
| Input | Meaning |
|---|---|
chains | Which chains to include |
a101Campaigns | A101 campaign slugs. aldin-aldin = weekly deals, ekstra = marketplace catalog, kapida = grocery delivery |
bimMaxDates | How many dated BİM catalogs to pull beyond the current one, newest first. 0 = current only |
sokAutoDiscover | Follow live ŞOK collection links from the homepage |
sokUrls | Explicit ŞOK collection URLs, if you prefer to pin them |
sokMaxCollections | How many discovered ŞOK collections to scrape, highest relevance first |
sokMaxPages | Pages to follow per ŞOK collection (~20 products each) |
maxItems | Cap across all chains, shared out fairly. 0 = unlimited |
onlyDiscounted | Keep only products that show a struck-through original price |
Output sample
{"chain": "BIM","campaign": "25-31 Temmuz","productId": "makarna-cesitleri-25-7","brand": "NUH'UN ANKARA","name": "MAKARNA ÇEŞİTLERİ","price": 24.5,"originalPrice": 33.5,"discountRate": 26,"currency": "TRY","unit": "500 g","url": "https://www.bim.com.tr/aktuel-urunler/makarna-cesitleri-25-7/aktuel.aspx","image": "https://cdn1.bim.com.tr/uploads/aktuel-urunler/1627_kucuk.jpg","scrapedAt": "2026-07-25T09:00:00+00:00"}
Pricing
Pay per event: you are charged only for products actually written to the dataset. Runs that return nothing cost nothing.
Tips
- Start with
maxItems: 300to see the shape of the data before scaling up. - For a weekly price archive, schedule the Actor every Monday morning and keep appending to the same dataset.
onlyDiscounted: trueis the fastest way to answer "what is actually marked down this week".- Set
maxItems: 0when you want the full catalogs; quotas only apply when a cap is set. - Turkish residential proxies are the default and give the most reliable results, though these sites are usually reachable without one. If your plan has no proxy access the Actor logs a warning and continues on a direct connection.
Notes
Catalogs change weekly, and occasionally a chain restructures its pages. If you see a drop in results, open an issue on the Actor page and it will be fixed. Only publicly available product catalog data is collected.