South Africa's biggest marketplace as JSON, with every seller's offer
The takealot API turns South Africa's largest online marketplace into clean JSON, in eight actions: search, category/products, product/detail, product/offers, product/reviews, deals, deals/products and search/suggest.
8 active endpoints. Every call is 1 credit.
- POST/takealot/v1/search
- POST/takealot/v1/category/products
- POST/takealot/v1/product/detail
- POST/takealot/v1/product/offers
- POST/takealot/v1/product/reviews
- POST/takealot/v1/deals
- POST/takealot/v1/deals/products
- +1 more
What takealot endpoints does ReefAPI ship?
8 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
takealot API
4 of 8 endpoints, ready to run
takealot's product grid for a keyword: product id, title, brand, image, the price in rand or the price range for products with variants, takealot's list price kept apart, rating and review count, stock with the Cape Town, Johannesburg and Durban warehouses, and the delivery estimate.
{ "ok": true, "meta": { "api": "takealot", "endpoint": "search", "mode": "live", "latency_ms": 734.4, "record_count": 36, "cache_hit": false }, "data": { "results": [ { "plid": "PLID91084548", "product_id": 91084548, "tsin": 91216993, "offer_sku": 241392181, "title": "Air Fryer Disposable Paper Liner by Silver Kitchen", "subtitle": "50 Pieces - Food Grade – Biodegradable – Non-Stick - The Perfect Solution", "brand": null, "authors": null, "url": "https://www.takealot.com/air-fryer-disposable-paper-liner-by-silver-kitchen/PLID91084548", "image": "https://media.takealot.com/covers_images/9d7011d47ca643d8a47d192b4d82be70/s-zoom.file", "image_count": 5, "price": 56, "price_max": null, "price_is_range": false, "currency": "ZAR", "list_price": 290, "list_price_discount_percent": 80.7, "saving_text": "80%", "saving_badge": "80% off", "promotion_id": null, "rating": 4.6, "review_count": 29, "rating_scale": 5, "rating_distribution": { "1": 0, "2": 1, "3": 4, "4": 2, "5": 22 }, "in_stock": true, "availability": "in_stock", "stock_status": "In stock", "is_leadtime": false, "is_imported": false, "warehouses": [ "CPT", "JHB" ], "delivery_estimate": "Get it Tomorrow, 7am - 7pm", "delivery_type": "next_day", "is_preorder": false, "variant_selection_required": false, "has_more_colours": false, "free_delivery_with_takealotmore": true }, { "plid": "PLID95144708", "product_id": 95144708, "tsin": 96000530, "offer_sku": 215080788, "title": "Air Fryer Muffin Cups - Set of 6", "subtitle": null, "brand": "Microgarden", "authors": null, "url": "https://www.takealot.com/air-fryer-muffin-cups-set-of-6/PLID95144708", "image": "https://media.takealot.com/covers_images/88c73cb5eb334107942328fb2db236f4/s-zoom.file", "image_count": 5, "price": 149, "price_max": null, "price_is_range": false, "currency": "ZAR", "list_price": 269, "list_price_discount_percent": 44.6, "saving_text": "44%", "saving_badge": "44% off", "promotion_id": 124732, "rating": 4.8, "review_count": 4, "rating_scale": 5, "rating_distribution": { "1": 0, "2": 0, "3": 0, "4": 1, "5": 3 }, "in_stock": true, "availability": "in_stock", "stock_status": "In stock", "is_leadtime": false, "is_imported": false, "warehouses": [ "CPT", "JHB" ], "delivery_estimate": "Get it Tomorrow, 7am - 7pm", "delivery_type": "next_day", "is_preorder": false, "variant_selection_required": false, "has_more_colours": false, "free_delivery_with_takealotmore": true }, { "plid": "PLID95144706", "product_id": 95144706, "tsin": 96000526, "offer_sku": 215080757, "title": "Air Fryer Mini Pie Dish-Set of 4", "subtitle": null, "brand": "Microgarden", "authors": null, "url": "https://www.takealot.com/air-fryer-mini-pie-dish-set-of-4/PLID95144706", "image": "https://media.takealot.com/covers_images/2b3b35ca85da47e29ebfcf6523856c85/s-zoom.file", "image_count": 5, "price": 169, "price_max": null, "price_is_range": false, "currency": "ZAR", "list_price": 269, "list_price_discount_percent": 37.2, "saving_text": "37%", "saving_badge": "37% off", "promotion_id": null, "rating": 3, "review_count": 2, "rating_scale": 5, "rating_distribution": { "1": 1, "2": 0, "3": 0, "4": 0, "5": 1 }, "in_stock": false, "availability": "ships_in_days", "stock_status": "Ships in 4 - 6 work days", "is_leadtime": true, "is_imported": false, "warehouses": null, "delivery_estimate": "Delivery 23 Sep - 27 Sep", "delivery_type": "standard", "is_preorder": false, "variant_selection_required": false, "has_more_colours": false, "free_delivery_with_takealotmore": true } ], "count": 36, "total_results": 778, "total_is_approximate": false, "total_results_capped": false, "next_cursor": "WzUxMC4wLDEwMjIyODQyMV0", "sort_applied": "Price Ascending", "filters_applied": null, "currency": "ZAR", "country": "za", "duplicate_rows_dropped": 0, "fallback_results_dropped": 0, "keyword_matches_on_page": 36, "query": "air fryer", "has_more": true } }
How the takealot API works
takealot 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 252 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.
Find a product, see who sells it, and read what buyers say
One search gives you the takealot product id. The same id opens the full offer list and the review feed, each in one call.
{"query": "kettle", "in_stock": true, "sort": "price_asc"}36 in-stock kettles, cheapest first, with price, list price, rating and warehouses. Take results[].plid.
{"product_id": "PLID72799722"}Every offer on that kettle, cheapest first: both buy-box offers and each other seller, with stock and seller rating.
{"product_id": "PLID72799722", "sort": "newest"}The newest reviews first, with star rating, date and the variant each reviewer bought.
A product's real market on takealot - the preselected price, the cheapest offer, who sells it and how buyers rate it - without mixing a list price or reward points into the price.
curl -X POST https://api.reefapi.com/takealot/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"air fryer"}'{
"ok": true,
"data": { … },
"meta": {
"api": "takealot",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}takealot shows two offers in the buy box, and a 'List price' that is not a sale
A takealot product page preselects one offer, usually the fastest delivery, and places a second 'Best Price' offer beside it that is often cheaper. The page also prints a List price above the selling price, which reads like a discount but is takealot's reference figure, not a price the item recently sold for. This engine returns the preselected offer as price, the cheapest offer as price_min, and the list price separately as list_price.
| Product | price (preselected offer) | price_min (cheapest offer) | list_price (reference) |
|---|---|---|---|
| 6L Digital Roaster Air Fryer | R 480 | R 465 | R 1,399 |
| 2L Cordless Stainless Steel Kettle | R 189 | R 169 (ships in days) | null - same as price |
| Apple AirPods 4 (sold by takealot) | R 2,299 | R 2,299 | R 2,799 |
| Apple iPhone 12 Mini 64GB (Pristine Like New) | R 4,299 | R 4,299 | R 8,999 |
In the 12-product check, 10 products printed a list price. The kettle row shows why the cheapest offer is its own field: the cheaper offer was not in stock and would ship in several days, while the preselected one was in stock. eBucks and Discovery Miles figures are the same price in points and are returned as reward_prices, never as a discount.
Which price, which seller, which stock, and what takealot leaves out
One storefront, eight actions, prices in rand. Measured on 2026-09-15 with 86 live calls across every action and a 12-product check across six categories. Two of these lines go against us.
takealot has one storefront. Every row, product and offer carries ZAR, and country accepts za only.
price is the offer takealot preselects, price_min the cheapest offer on the page, list_price takealot's reference figure shown above the price. On 12 checked products price matched takealot's own recorded selling price 12 of 12 times, and list_price 12 of 12.
Every offer says whether takealot sells from its own stock or a marketplace seller does, with the seller's name and rating where takealot publishes them. This matched takealot's own record on 11 of 11 products.
Only takealot's 'In stock' counts as in_stock. Items that ship in several days are marked ships_in_days, and the Cape Town, Johannesburg and Durban warehouses are listed per offer. Matched 11 of 11.
Products that need a variant choice say so and list the variants with availability; pass colour or size for that variant's price, seller and stock. Search rows for them print a price range.
takealot does not publish stock counts. The second buy-box offer comes without a seller name (its seller id is returned). A valid barcode was present on 7 of 12 verified products and a brand on 5 of 12; the rest are null, never guessed.
What people build with takealot
The jobs this data is most often used for.
endpoints
credit per call
South African price-monitoring teams track the preselected price, the cheapest offer and the list price per product id every day.
Marketplace sellers call product/offers to see every competing offer on a product, whether takealot itself sells it, and which warehouses hold stock.
Brands and agencies pull product/reviews sorted by newest or filtered by star rating to follow what South African shoppers say.
Deal sites list takealot's running promotions with deals and fetch the products in each one with deals/products.
What takealot data costs
The cheapest call here is 1 credit, 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 252 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/takealot/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"air fryer"}'import requests
r = requests.post(
"https://api.reefapi.com/takealot/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "air fryer"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up takealot.
Get a free key →Which country and currency does the takealot API cover?▾
South Africa only, because takealot has one storefront. Every price comes back in rand (ZAR) as a number. country accepts za; any other value returns INVALID_PARAM rather than silently falling back.
Is the price the price a shopper pays?▾
price is the offer takealot preselects on the product page. takealot often shows a second, cheaper 'Best Price' offer beside it, so price_min carries the cheapest offer on the page and buybox_is_cheapest says whether they are the same. On 12 products checked on 2026-09-15, price matched takealot's own recorded selling price 12 of 12 times.
What is list_price, and is it a discount?▾
It is the 'List price' takealot prints above the selling price. It is a reference figure, not proof the item recently sold for that amount, so it is kept apart from price and returned only when it is higher. list_price_discount_percent is computed from the two for convenience. 10 of 12 verified products carried one.
Does the API tell me whether takealot or a marketplace seller sells the item?▾
Yes. seller.seller_type is takealot or marketplace, and sold_by_takealot is true when takealot sells from its own stock. Marketplace sellers come with their store name and rating where takealot publishes them. Every offer in offers[] carries the same fields, so you can see who else sells the product and for how much.
How are colours and sizes handled?▾
Some takealot products need a colour or size choice before they have a price and stock. For those, product/detail returns variant_selection_required true, availability select_variant and takealot's 'from' price, plus the list of variants with which ones are available. Pass colour or size to get that variant's offer, seller and stock. On search rows such products print a price range: price is the lowest and price_max the highest.
What does in stock mean here?▾
in_stock is true only when takealot says In stock. Items that ship later ('Ships in 5 - 7 work days') come back as availability ships_in_days with the status text kept, and warehouses lists which of Cape Town (CPT), Johannesburg (JHB) and Durban (DBN) hold the stock. takealot does not publish stock quantities.
How do I page through search results?▾
takealot pages with a cursor. Each response returns next_cursor; pass it as cursor to get the next 36 products. has_more is false when there is nothing after the page.
What does takealot NOT publish?▾
Stock quantities. The seller name of the second buy-box offer (its seller id is returned). A barcode on many products (7 of 12 verified had a valid one). A brand on many marketplace listings and on books (5 of 12). Sponsored results are not part of takealot's search results in this API, so there is nothing to flag.
What is the takealot API?▾
takealot API is a ReefAPI endpoint group for south africa's biggest marketplace: products, rand prices, every seller's offer and reviews. It returns live JSON through POST requests under /takealot/v1.
Is the takealot API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. takealot calls use the same shared credit balance as every other ReefAPI engine.
Do I need a takealot login or account?▾
No login to takealot 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 takealot 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 takealot API use?▾
takealot actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call takealot from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call takealot actions with the same key, credit pool and JSON envelope used by normal REST requests.
91 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling takealot, 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 251 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-15.