Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the BİM API page →
docs / bim

BİM

Turkey's biggest discount grocer: the weekly Aktüel and İndirim leaflets with every product priced, plus the store finder.

base /bim/v16 endpoints
post/bim/v1/leafletsfree

Every leaflet BİM is publishing right now — the recent ones, the one on shelf today, and the UPCOMING ones (BİM puts the next week's sheets up days early). Each entry carries the leaflet key you pass to `leaflet/products`, its family (`aktuel` special-buy sheet or `indirim` price-cut sheet), BİM's own date label, the start and end dates, and whether it is current, upcoming or past. This is the only legitimate source of a leaflet key: BİM keeps no archive.

ParameterAllowed / rangeDescription
type = alloptionalall · aktuel · indirimWhich leaflet family to list. BİM runs both at once.
max_rotations = 3optional1–8Advanced: how many times to retry a request on a fresh exit (1-8, default 3).
Try in playground →
post/bim/v1/leaflet/products1 credit

Every product on one BİM leaflet: title, brand, campaign price in TRY, the struck price and BİM's discount percent where BİM prints them, package size, feature bullets, interest-free instalments, image and product URL. Pick the leaflet by `leaflet_key`, by `date` (future dates included), or leave both out for the sheet on shelf today. An unknown key is rejected, never answered with the wrong week.

ParameterAllowed / rangeDescription
leaflet_keyoptional1–The leaflet's own id, exactly as `leaflets` returns it. 🔴 BİM keeps no archive: only the keys `leaflets` currently lists answer — any other key silently renders the current leaflet, and this engine rejects that with NOT_FOUND rather than returning the wrong week's products.
dateoptional—Instead of `leaflet_key`: an ISO date. Returns the leaflet BİM publishes for that day — for `indirim`, the sheet whose date range covers it (BİM runs a long sheet and a weekly one at the same time, and the one starting nearest your date wins; use `leaflets` + `leaflet_key` to pick the other). Future dates work: BİM publishes upcoming leaflets days ahead.
type = aktueloptionalaktuel · indirimWhich leaflet family. Used when you give a `date`, or on its own to get that family's current leaflet. Ignored when `leaflet_key` is given.
max_rotations = 3optional1–8Advanced: how many times to retry a request on a fresh exit (1-8, default 3).
Try in playground →
post/bim/v1/product/detail1 credit

One BİM leaflet product by its URL or slug: title, price, struck price and discount where BİM prints them, package size, the feature list (the product page often carries more bullets than the leaflet tile), every image, instalments — plus which leaflet it belongs to and its brand, read from that leaflet. A product whose leaflet has expired returns NOT_FOUND rather than BİM's silent homepage.

ParameterAllowed / rangeDescription
urloptional—A BİM product URL, as `leaflet/products` returns it in `url`. ⚠️ BİM product pages live only while their leaflet does — take a fresh URL from `leaflet/products` rather than storing one.
slugoptional—Alternative to `url`: just the slug part, as `leaflet/products` returns it in `slug`.
include_brand = trueoptional—BİM's product page does not publish the brand — only the leaflet listing does. Left true, the engine also reads the product's leaflet so `brand` and the leaflet's date are filled (one extra request). Set false for the page alone; `brand` is then null because it was not read, and `brand_source` says so.
max_rotations = 3optional1–8Advanced: how many times to retry a request on a fresh exit (1-8, default 3).
Try in playground →
post/bim/v1/posters1 credit

BİM's leaflet sheets as images — the scanned Aktüel, İndirim and Kırtasiye posters, each with BİM's date label, a cover image, every page image in order and BİM's own download link. This is the printed sheet; `leaflet/products` is the same campaign as structured rows.

ParameterAllowed / rangeDescription
type = alloptionalall · aktuel · indirim · kirtasiyeWhich poster tab to return.
max_rotations = 3optional1–8Advanced: how many times to retry a request on a fresh exit (1-8, default 3).
Try in playground →
post/bim/v1/stores1 credit

BİM's public store finder. With no parameters it returns the 81 provinces; with a `city` it returns that province's districts; with both it returns the stores — branch name and street address. Works by name or by BİM's own numeric ids.

ParameterAllowed / rangeDescription
cityoptional—Province name or BİM's numeric province id. Leave it out to get the list of all 81 provinces BİM serves.
countyoptional—District name or BİM's numeric district id. Leave it out to get the districts of `city`. 🔴 BİM's store finder needs a district — a province on its own returns no stores, not all of them.
max_rotations = 3optional1–8Advanced: how many times to retry a request on a fresh exit (1-8, default 3).
Try in playground →
post/bim/v1/brandsfree

BİM's own-label brands. With no parameters it returns BİM's eleven product categories; with a `category` it returns that category's own-label brand names and logos. BİM publishes brand names and logos here only — there are no products or prices on this surface.

ParameterAllowed / rangeDescription
categoryoptional—A category slug or numeric id from this action's own `categories` list. Leave it out to get the category list itself.
max_rotations = 3optional1–8Advanced: how many times to retry a request on a fresh exit (1-8, default 3).
Try in playground →