This week's ŞOK deals, with both prices and the store they belong to
The ŞOK Market API turns sokmarket.com.tr, the online shop of Turkey's ŞOK discount grocery chain, into clean JSON in seven actions.
7 active endpoints, on 0, 1 and 2 credit tiers.
- POST/sok/v1/search
- POST/sok/v1/category/products
- POST/sok/v1/categories
- POST/sok/v1/product/detail
- POST/sok/v1/campaigns
- POST/sok/v1/campaigns/list
- POST/sok/v1/suggest
What ŞOK Market endpoints does ReefAPI ship?
7 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
ŞOK Market API
4 of 7 endpoints, ready to run
Haftanın Fırsatları: every product ŞOK is currently selling below its own struck price, with price, struck price and discount, plus ŞOK's badge campaigns and any single campaign with its conditions.
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
How the ŞOK Market API works
ŞOK Market is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 294 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
This week's deals, then the full record of one of them
Two calls take you from ŞOK's deal page to a product's origin, net quantity, ingredients and nutrition table. The store the prices belong to is on every row of both.
{"campaign": "weekly_deals"}2 credits. Every marked-down product in the default store, each with price, price_before_discount and discount_percent. Reconstructed from the whole store rather than sampled: 228 rows against ŞOK's own announced 226 the same hour.
{"product_id": "<a row's product_id>"}1 credit. The same prices plus description, country of origin, net quantity, ingredients, allergen warning, storage condition, the nutrition table and package dimensions.
{"channel": "market"}Free. The whole tree, so category_id on search and category/products is looked up rather than guessed.
A dated deal list with both prices and the store they belong to, and a full product record for anything on it.
curl -X POST https://api.reefapi.com/sok/v1/campaigns \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"campaign":"weekly_deals"}'{
"ok": true,
"data": { … },
"meta": {
"api": "sok",
"endpoint": "campaigns",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}What ŞOK publishes, and what it does not
ŞOK prints one shelf price and, on about one product in twelve, a struck-through was-price. It prints no unit price at all and no campaign dates. The API returns what ŞOK publishes and leaves the rest null rather than calculating it. Census taken on 2026-09-24 over the whole default store, 2,722 offers.
| Field | Coverage on 2,722 offers | What comes back |
|---|---|---|
| price | 2,722 of 2,722 | The price at the store named in store_id, in TRY. |
| price_before_discount | 228 of 2,722 | ŞOK's own struck price. Null on the rest, because ŞOK repeats the shelf price there and a repeated price is not a discount. |
| discount_percent | 228 of 2,722 | Computed only from two prices ŞOK published. Never estimated, never zero. |
| campaigns / badges | 167 and 158 of 2,722 | ŞOK's campaign badges, such as buy-one-get-one and basket thresholds. Most carry no struck price because the benefit lands at the basket. |
| unit_price | 0 of 2,722 | Always null. ŞOK shows no price per litre or kilo anywhere, and no figure is derived from the pack size in the title. |
| campaign starts_on / ends_on | 0 campaigns | Always null. ŞOK's only dates are sentences inside the campaign conditions, which come back as terms. |
| store_sku_code | 2,722 of 2,722 | ŞOK's internal article number. It is not a barcode and is not returned as one. |
Prices are per store. Compared against five other real ŞOK stores on 489 shared products, the price differed on two of them, but only 70 to 141 of every 500 products were stocked by both. Which products a store carries varies far more than what they cost, so the store is never averaged away and never hidden.
Two shops, one store id, and the fields ŞOK does not publish
Measured 2026-09-24: 102 live calls across all seven actions, a census of the whole default store at 2,722 offers, 19 product details and a five-store price comparison. Three of these lines go against us.
Every offer id encodes its store, and store_id is on every row, in every listing envelope and in meta. The default is ŞOK's own default online store, the one a logged-out shopper sees. Pass store_id to read another. An unknown store id returns zero rows rather than another store's prices.
market is the grocery shelf, delivered from a store and priced at that store. ekstra is ŞOK Ekstra: electronics, white goods, furniture, fashion and pet supplies, shipped. Separate catalogues, separate trees, separate stores. The category tree was 250 categories for market and 123 for ekstra, so a washing-machine search in market finds nothing.
228 of 2,722 offers carried one. ŞOK repeats the shelf price in its own was-price field on the other 2,494, and publishing that would have put a zero per cent discount on the whole catalogue. price_before_discount and discount_percent are null there instead, never zero and never estimated.
0 of 2,722 offers carry a price per litre or kilo, and no such string appears on the rendered page either. unit_price is always null and is not computed from the pack size in the title, because a computed figure would be ours rather than ŞOK's.
No date field exists on ŞOK's campaign surfaces. The only dates that exist are sentences inside the campaign conditions, which come back as terms with the HTML converted to text. They are not parsed out of it.
Compared against five other real ŞOK stores on 489 shared products, the price differed on 2 and the struck price on 7, with zero stock-flag differences. But only 70 to 141 of every 500 products were stocked by both stores, and the same keyword returned 183 to 206 results depending on the store. Which products a store carries is the real difference, so the store is never merged or averaged away.
The flag was true on 2,722 of 2,722 offers, because ŞOK's listing only publishes offers it has. Out-of-stock products are absent rather than flagged, so the real availability signal is whether a product appears for a given store at all.
page starts at 0 and page_size defaults to 100, up to 500. Past the last page ŞOK reports a total of zero, which is shaped exactly like no such product. The two are distinguished in page_notice, which tells you to read page 0 for the real count.
categories and campaigns/list are free. search, category/products, product/detail and suggest are 1 credit. campaigns is 2, because the weekly deal set is reconstructed from the whole store rather than from a sampled page.
What people build with ŞOK Market
The jobs this data is most often used for.
endpoints
credits per call
Grocery price trackers store a daily row per product per store and follow ŞOK's marked-down set, which is its own struck price rather than an estimate.
Deal and discount sites publish Haftanın Fırsatları the morning it changes, with both prices and the discount ŞOK itself printed.
Turkish retail analysts compare ŞOK against A101, BİM and Migros on the same keyword and category, week over week.
Product-data teams enrich a catalogue with country of origin, net quantity, ingredients, allergens, storage conditions and the nutrition table.
What ŞOK Market data costs
The cheapest call here is 0 credits, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 294 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/sok/v1/campaigns \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"campaign":"weekly_deals"}'import requests
r = requests.post(
"https://api.reefapi.com/sok/v1/campaigns",
headers={"x-api-key": REEF_KEY},
json={
"campaign": "weekly_deals"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up ŞOK Market.
Get a free key →Where is Aldın Aldın?▾
That is A101's weekly campaign, not ŞOK's. ŞOK's weekly deal page is Haftanın Fırsatları, and you get it from campaigns with campaign set to weekly_deals: every product ŞOK is currently selling below its own struck price, with both prices and the discount. Use the a101 API if you want Aldın Aldın.
What is the difference between market and ekstra?▾
They are ŞOK's two online shops. market is the grocery shelf: food, drinks, cleaning and personal care, delivered from a store and priced at that store. ekstra is ŞOK Ekstra: electronics, white goods, furniture, fashion and pet supplies, shipped. They have separate catalogues, separate category trees and separate stores, so a washing-machine search in market finds nothing. The channel parameter is on every action.
Which store do the prices belong to?▾
ŞOK's default online store, the one a logged-out shopper sees. Its number is on every row as store_id and in meta. Pass store_id if you know another ŞOK store number and you read that store instead. An unknown store id returns zero rows, so a wrong number cannot silently hand you another store's prices.
Why is in_stock true on everything?▾
Because ŞOK's listing only publishes offers it has. It was true on 2,722 of 2,722 offers. Out-of-stock products are absent from the listing rather than flagged, so the real availability signal is whether a product appears for a given store at all, not the flag.
Does ŞOK search tolerate typos?▾
No. ŞOK matches words literally: sutt, cikolatta and samsng all return nothing, and ŞOK never pads an unmatched query with unrelated products the way some retailers do. So an empty result is a real statement about ŞOK's shelf, and the response says so in page_notice rather than leaving you to guess.
How do the pages work?▾
Page numbering is ŞOK's own and starts at zero. page_size defaults to 100 and goes up to 500. Past the last page ŞOK reports a total of zero, which looks exactly like no such product, so the response distinguishes the two in page_notice and tells you to read page 0 for the real count.
What is the ŞOK Market API?▾
ŞOK Market API is a ReefAPI endpoint group for turkish discount grocery online: şok market and şok ekstra, this week's haftanın fırsatları deals, prices in lira per store. It returns live JSON through POST requests under /sok/v1.
Is the ŞOK Market API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. ŞOK Market calls use the same shared credit balance as every other ReefAPI engine.
Do I need a ŞOK Market login or account?▾
No login to ŞOK Market is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the ŞOK Market data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the ŞOK Market API use?▾
ŞOK Market actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call ŞOK Market from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call sok actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the ŞOK Market API a ŞOK Market scraper?▾
It is the managed alternative to a DIY ŞOK Market scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same turkish discount grocery online: şok market and şok ekstra, this week's haftanın fırsatları deals, prices in lira per store back as clean JSON.
Why does my ŞOK Market scraper keep getting blocked?▾
Most ŞOK Market scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.
122 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling ŞOK Market, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 293 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-24.