Takealot Price & Stock Watch (South Africa)
Pricing
from $0.56 / 1,000 product scrapeds
Takealot Price & Stock Watch (South Africa)
Search Takealot.com by keyword and get one flat row per product: price in ZAR, was-price, saving, stock status, ships-from, rating, reviews, brand, image, URL. Sort by price or rating; filter by brand and price band. For South African price and stock watching.
Pricing
from $0.56 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Superslow Sloth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Search Takealot, South Africa's largest online retailer, for one or more terms and get one flat row per product: price in South African rand, the was-price when Takealot shows one, the saving, the stock status in Takealot's own words, which distribution centres can ship it, rating, review count, brand, image and the product URL. Run it on a schedule and diff the dataset to get a Takealot price-drop and back-in-stock watch, or read a whole category for South African price comparison and market research.
No account, no API key, no login, no browser. One request returns 36 products.
Input
| Field | Notes |
|---|---|
searchTerms | One or more search terms, one per line. Required. A product found by two terms is returned once, under the first. Takealot matches loosely: a model number can still return hundreds of related products. |
maxItems | Products to read per search term (default 100, up to 10,000). 36 per page. |
sort | relevance (default), price-asc, price-desc, rating. |
brand | Only this brand, spelled and capitalised exactly as Takealot does (Hisense, Russell Hobbs). One brand. A brand that does not exist returns no results, not everything. |
minPrice, maxPrice | Price band in whole rand, inclusive, either end optional. |
proxyConfiguration | Apify proxy by default. |
About the sorts
The sorts are Takealot's own and the actor checks each one: Takealot answers a sort name it does not know with HTTP 200 and the default order, so the actor reads the sort the response says it applied and fails the term (at no charge) rather than return mis-sorted rows.
- The price sorts use Takealot's price index, which can differ from the price on the row for a stale listing. In a measured price-descending page, one out-of-stock product priced R1,389 sat among R3,500 ones.
- The rating sort is not a strict sort on the star figure. A 5.0 from a handful of reviews ranks below a 4.9 from hundreds (measured), so the head of the list is well rated and well reviewed.
About the price band and brand
The band is applied by Takealot against its own price index, not by the actor, so a few rows - mostly out-of-stock ones - can sit outside it (1 of 40 measured for R3,000 to R4,000). Brand is an exact, case-sensitive match.
Output
Prices are numbers in rand (currency is read from the record, ZAR).
| Field | Notes |
|---|---|
query | The search term that first found this product. |
product_id, url, tsin | Takealot's product id (the PLID number), the https://www.takealot.com/<slug>/PLID<id> link, and the id of the winning offer. |
title, subtitle, brand | As Takealot shows them. brand is null on products Takealot lists without one (100 of 360 in a sample over ten searches). |
price | The price Takealot shows. With several offers ("From R 549") it is the lowest. |
prices | Every offer price, lowest first. One entry normally, two or more for "From R ..." products. |
list_price | Takealot's was-price, the figure the saving is measured against. Null when Takealot sends none - 160 of 360 products in a sample over ten searches - never 0. |
saving_text | The saving as worded: 26%, Up to 42%. "Up to" means the best of several offers. |
stock_status | Takealot's availability wording, verbatim: In stock, Ships in 5 - 7 work days, Supplier out of stock. |
in_stock, lead_time | Takealot's own flags. in_stock is false for every "Ships in ..." product; lead_time is true for them. |
can_add_to_cart, is_preorder, imported | Takealot's flags. can_add_to_cart is false on multi-offer products and out-of-stock ones. |
ships_from | Distribution centres that can ship it (CPT, DBN, JHB). Empty for lead-time and out-of-stock products. |
delivery_estimate | Takealot's delivery text (Delivery 11 Oct - 13 Oct). It moves with the day the run happens, so do not diff on it. |
rating, review_count | Star rating out of 5 and the review count. Takealot sends a rating of 0.0 when there are no reviews; that is null here, with review_count 0. |
image_url, image_count | The main photo (large product-page rendition) and how many Takealot has. |
badges, promotion_id | The text of promotion badges (26% off) and the campaign id behind the badge image. |
authors, format | Books only (Paperback / Softback). Empty and null elsewhere. |
Honest nulls
A field Takealot did not send is null, never 0 or "". list_price,
saving_text, rating, brand, subtitle and delivery_estimate are null
when the source has nothing; review_count is 0 only when Takealot says so.
Pricing
Pay per event:
- $0.002 per run (
actor-start), charged only after your input is validated, so a run that fails on bad input costs nothing. - $0.00056 per product row written (
product-scraped), i.e. $0.56 per 1,000 products.
How it fetches
It calls the JSON API behind Takealot's own site
(api.takealot.com/rest/v-1-12-0/searches/products), 36 products per request.
Paging uses a cursor: each page returns next_is_after, passed back as
after=. Measured 2026-10-11: HTTP 200 from a plain connection and from an
Apify datacenter exit, no key or cookie needed, and a 162-page walk (5,826
products) with no rate limit. A 403, 429 or 5xx is treated as a refusal: the
actor rotates to a fresh address and retries. An HTTP 400 (an empty term, an
unparseable filter) is permanent and is not retried.
Things worth knowing, all measured:
- Counts.
total_num_foundis exact up to a point, then reads "5000+". A walk of a broad term kept going past that, so the actor follows the cursor to the end or tomaxItems, whichever comes first, and stops at 300 pages (10,800 products) per term. A log line names any term cut off at that limit. - Loose matching. Takealot ORs the words of a term, so
tardis mugreturns hundreds of products. Use abrandor a price band to narrow a term. - Cursors are Takealot's. A made-up or stale cursor is answered with page 1 again and HTTP 200; the actor stops a term as soon as a page brings nothing new.
- Counts move. Products are added and sold between requests, so a walk can show a product twice across a page boundary; it is returned once.
- Not offered.
rows(page size),pageandstartare ignored by the source, so there are no inputs for them.