# Takealot Scraper \[$0.9/1K💰] | Prices | Stock | SA Retail (`ahmed_jasarevic/takealot-scraper`) Actor

Scrape Takealot.com product listings by keyword or category — price in ZAR, rating, stock & images. No browser, no login. South Africa's largest online retailer via its mobile JSON API, from $0.9 per 1K results.

- **URL**: https://apify.com/ahmed\_jasarevic/takealot-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.87 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Takealot Scraper — Product Prices, Categories & Stock in South African Rand

Extract **Takealot.com product data** — prices in **South African Rand (ZAR)**, ratings, stock status, images and product URLs — by **keyword search or category browse**, without a browser. This Takealot price scraper calls the same mobile JSON API that powers the Takealot iOS app, so it returns clean, structured product listings at **from $0.9 per 1,000 results** — no CAPTCHAs, no login, no account.

### Main Use Cases

- **Takealot price tracking & price history** — run daily to monitor prices in ZAR and detect price drops for electronics, home goods, brands and more.
- **Competitor price analysis for South African e-commerce** — compare your own pricing against Takealot's buy-box price per product.
- **South African e-commerce market research** — SA online retail is projected to reach ~R159 billion in 2026 (World Wide Worx / TechCentral, 2026); pull structured category-level catalogs to feed analysis.
- **Stock & availability monitoring** — track `inStock`, `stockStatus` and distribution centres (JHB, CPT, DBN).
- **Building Takealot product databases** — collect PLID/TSIN IDs, titles, prices, ratings and image URLs into a structured dataset for dashboards, pricing tools and ETL pipelines.
- **Black Friday & deals analysis** — sample `price`, `listingPrice` and `saving` around seasonal sales to verify whether discounts are real.

### How It Works

The `www.takealot.com` frontend sits behind a Cloudflare challenge, so HTML scraping is unreliable and slow. This actor instead queries the **internal mobile JSON API** used by Takealot's own iOS app (`api.takealot.com`), which is fast, unauthenticated and returns clean JSON — roughly **36 products per request**.

1. You provide **search keywords** (e.g. `iphone`, `playstation 5`) and/or **category/facet filters** (e.g. `Type:13` for Computers & Tablets, or `Type:13,Brand:Logitech`).
2. The actor requests product pages from Takealot's mobile API with an iOS app User-Agent.
3. Each result is parsed into a flat record: title, brand, price, list price, saving, rating, review count, images, URL, stock status and distribution centres.
4. Pagination is handled automatically via the API's `after` cursor, capped by `maxItems` and `maxPagesPerSearch`.
5. Results are written to the dataset as JSON, ready to export as CSV, Excel, HTML or pull via API.

### Track Takealot Prices & Build Price History

As a **Takealot price tracker**, this actor gives you the raw data needed to build price history series: capture `price`, `listingPrice` and `saving` per product on a schedule, store each run in your dataset, and you have a per-product ZAR price time series — the same pattern used by South African price-tracking services like Serval, Buck Cheap and PricePulse, but with full API access to the raw rows.

- Schedule a daily task per product/brand you care about.
- Diff `price` between runs to detect drops.
- Alert on `inStock` transitions or `saving` changes.

### Scrape Product Listings By Keyword Or Category

Two input modes, combinable in a single run:

- **Search terms** — any keyword Takealot's search accepts: product names, model numbers, brand names.
- **Category / facet filters** — browse whole departments with facet syntax such as `Type:13`, `Brand:Apple` or combined `Type:13,Brand:Logitech`. Discover facet values from any search result and reuse them in `categoryFilters`.

Each search term or category filter is paginated independently up to `maxPagesPerSearch` (each page returns up to 36 products).

### Monitor Competitor Prices In South African E-Commerce

Takealot is South Africa's most-used online shopping platform — 35.3% of SA online shoppers use it (World Wide Worx / TechCentral, 2026). For brands, retailers and marketplace sellers, that makes it the single most important domestic price benchmark. Run this scraper daily across your SKUs' terms and categories to keep a current competitor price map in rand, without building or maintaining your own scraper.

### Build A Takealot Product Database For Market Research

As a **Takealot product data API**, the actor outputs stable identifiers (`plid`, `tsin`), canonical URLs and a consistent schema, so you can assemble and refresh a structured product database:

- Join historical runs on `plid` to build price and stock history tables.
- Export to JSON, CSV, Excel or HTML.
- Feed dashboards, repricing tools or downstream analytics with ZAR-priced product data.

### Takealot Scraper Input — Search Keywords, Category Filters & Limits

| Field | Type | Required | Default | Notes |
|-------|------|----------|---------|-------|
| `searchTerms` | array of strings | no | `[]` | Keywords to search, e.g. `["iphone", "playstation 5"]`. One start request per term. |
| `categoryFilters` | array of strings | no | `[]` | Facet filters to browse, e.g. `["Type:13"]` or `["Type:13,Brand:Logitech"]`. |
| `maxItems` | integer | no | `50` | Maximum products across all searches (0 = unlimited for paying users per schema; see AI notes). Range 1–100,000. |
| `maxPagesPerSearch` | integer | no | `5` | Maximum result pages per term/category (each returns up to 36 products). Range 1–100. |
| `sort` | string | no | `"Relevance"` | The Takealot mobile API currently only honors `Relevance`. |
| `proxyConfiguration` | object | no | `{"useApifyProxy": true}` | Apify proxy config; generally not needed but adds resilience against IP throttling for large crawls. |

> **Note:** At least one of `searchTerms` or `categoryFilters` must be provided, otherwise the run fails.

### Output Fields — Prices, Ratings, Stock & URLs

Each dataset item is one product listing:

| Field | Description |
|-------|-------------|
| `plid` | Takealot product line ID, e.g. `PLID102257365` |
| `tsin` | Takealot Stock Item Number |
| `title` | Product name |
| `brand` | Brand name |
| `price` | Current price in ZAR (numeric) |
| `priceZAR` | Pretty-formatted price, e.g. `R 6,999` |
| `listingPrice` | Original/list price before discount (if on sale), otherwise `null` |
| `saving` | Discount label, e.g. `12%` |
| `currency` | Always `ZAR` |
| `rating` | Average customer rating (0–5) |
| `reviewCount` | Number of customer reviews |
| `images` | Array of product image URLs |
| `image` | First product image URL |
| `url` | Canonical product page URL |
| `inStock` | Boolean stock availability |
| `stockStatus` | Human-readable stock status, e.g. `In stock` |
| `distributionCentres` | Warehouses the item ships from (CPT/DBN/JHB) |
| `searchTerm` | Keyword that produced this result (if keyword search) |
| `categoryFilter` | Facet filter that produced this result (if category browse) |
| `scrapedAt` | ISO timestamp of when the record was scraped |

### Example Input

```json
{
  "searchTerms": ["iphone", "playstation 5"],
  "categoryFilters": [],
  "maxItems": 50,
  "maxPagesPerSearch": 5,
  "sort": "Relevance",
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Example Output

```json
{
  "plid": "PLID102257365",
  "tsin": 104165916,
  "title": "Apple iPhone 13 128 GB Preowned Grade B Smartphone",
  "brand": "Apple",
  "price": 6999,
  "priceZAR": "R 6,999",
  "listingPrice": null,
  "saving": "12%",
  "currency": "ZAR",
  "rating": 4.7,
  "reviewCount": 38,
  "images": ["https://media.takealot.com/covers_images/d70e53579e2344fabef9f75b27f9706f/s-pdpxl.file"],
  "image": "https://media.takealot.com/covers_images/d70e53579e2344fabef9f75b27f9706f/s-pdpxl.file",
  "url": "https://www.takealot.com/apple-iphone-13-128-gb-preowned-grade-b-smartphone/PLID102257365",
  "inStock": true,
  "stockStatus": "In stock",
  "distributionCentres": ["CPT", "DBN", "JHB"],
  "searchTerm": "iphone",
  "categoryFilter": null,
  "scrapedAt": "2026-09-13T11:11:15.537Z"
}
```

### Integrations & Automation — Schedule Price Checks, Send Webhooks

- **Apify API / MCP** — call the actor programmatically from your own app, agent or pipeline; run it with the Apify Client for JavaScript/Python or the REST API.
- **Scheduling** — create a task and schedule it: daily at 06:00 for **price monitoring**, twice a day during **Black Friday season**, weekly for **market research snapshots**. Recurring runs grow your price-history dataset and improve Store recommendation signals.
- **Integrations** — push finished runs to Google Sheets, Airtable, Slack or your own systems via Make, Zapier or webhooks after each run.
- **Dataset exports** — download JSON, CSV, Excel, HTML or XML directly from the Storage tab.

### Pricing — Pay Only Per Result

The actor is lightweight (256 MB, no browser) and charged **pay-per-result**:

- \~$0.0009 per product result (~$0.9 per 1,000 results) on the Free tier; slightly less on higher tiers.
- One small Actor-start event per run.
- Free (non-paying) accounts get a capped preview of **10 products** per run; paying users get full runs up to `maxItems`.

A typical 50-product run finishes in seconds.

### Related Actors

- [Takealot Products Scraper 🛍️](https://apify.com/shahidirfan/Takealot-Products-Scraper) — Takealot product data by keyword or listing URL, with seller info and delivery fields.
- [Takealot Listings Scraper](https://apify.com/piotrv1001/takealot-listings-scraper) — Takealot listings with optional detail enrichment (EAN/MPN, SKU, taxonomy).
- [Takealot Product & Price Scraper](https://apify.com/juandutoit/takealot-product-scraper) — keyword, category or product-URL scraping with Buy Box and marketplace offer signals.
- [Zalando Scraper](https://apify.com/ahmed_jasarevic/zalando-scraper) — fashion product prices, availability and brands from Zalando (by the same author).
- [Amazon Bestsellers Scraper](https://apify.com/ahmed_jasarevic/amazon-bestsellers-scraper) — Amazon bestseller rankings, prices and reviews — useful for Takealot-vs-Amazon South Africa comparisons (by the same author).

### FAQ — Prices, API & Alternatives

#### Why use this actor instead of the official Takealot API?

Takealot does not expose a **public, buyer-facing product API**. The only official API, the Takealot Seller API, is restricted to marketplace sellers managing their own offers. For public product, price and stock data, this actor reads Takealot's own mobile JSON API — no login, no API key, no rate-limit registration.

#### Is scraping Takealot legal?

Scraping publicly available product data for research and price monitoring is generally acceptable practice, but you are responsible for complying with Takealot's Terms of Service and applicable law. This actor only accesses public product data through Takealot's own mobile API at a modest rate — no login bypass, no CAPTCHA solving. See the Legal & Compliance Disclaimer below.

#### How can I track Takealot price history or check if a Black Friday deal is real?

Scheduling is the key. Run a task daily (or hourly in the days before Black Friday), keep every run's dataset, and compare `price`/`priceZAR`, `listingPrice` and `saving` per `plid` over time. SA price-tracking services such as Serval, Buck Cheap and PricePulse follow exactly this pattern; this actor gives you the raw rows over the API instead of a UI.

#### What is the alternative to the Takealot mobile API — do I need one at all?

No. This actor is a ready-made Takealot data API: send a keyword or category, get clean JSON product rows back. If you were planning to build your own integration against `api.takealot.com`, note the endpoint is unauthenticated and returns ~36 products per request — but maintenance (pagination cursor, response shapes) is on you; with this actor it's handled.

#### Which is cheaper — Takealot or Amazon South Africa?

Independent SA tech publications (BusinessTech, MyBroadband, TechCentral) regularly compare a basket of products and find the winner varies: Amazon.co.za (launched May 2024) is often cheaper on international tech brands, while Takealot frequently wins on local brands, stock depth and everyday items. Rather than relying on one-off articles, run this actor alongside an Amazon scraper on a schedule for continuous, product-level ZAR price comparison.

#### Can I filter results by price or rating?

Not in this version of the input. You can narrow by category/brand using facets (e.g. `Type:13,Brand:Logitech`) in `categoryFilters`, and filter the output dataset in your own spreadsheet, database or code.

#### How does this Takealot scraper compare to other Apify Takealot scrapers?

| Capability | This actor | Takealot Products Scraper (shahidirfan) | Takealot Listings Scraper (piotrv1001) | Takealot Product & Price Scraper (juandutoit) |
|---|---|---|---|---|
| Keyword search | ✅ | ✅ | ✅ | ✅ |
| Category/facet browse | ✅ | ~ (listing URL) | ✅ | ✅ |
| Price in ZAR + saving | ✅ | ✅ | ✅ | ✅ |
| Stock status + distribution centres | ✅ | ✅ | ✅ (partly) | ✅ |
| No browser / mobile JSON API | ✅ | — | ✅ | — |
| Price per result (as listed) | ~$0.0009 | ~$0.00093 | ~$0.0015–0.005 | ~$0.003 |

> Pricing as listed on the Apify Store at the time of writing; display tiers may differ. Capability rows reflect published READMEs/input schemas only.

### SEO Keywords

takealot price tracker, takealot scraper, takealot api, takealot product data, takealot price monitoring, takealot price history, track takealot prices, takealot deals, black friday deals takealot, takealot stock availability, takealot competitor analysis, south african e-commerce data, south africa online retail prices, takealot vs amazon south africa, amazon.co.za price comparison, takealot category browse, takealot product database, takealot ratings reviews, takealot price in zar, scrape takealot without api

### For AI Agents & LLM Apps

**Purpose:** Returns one dataset item per Takealot product listing — title, price in ZAR, rating, review count, images, URL, stock status and distribution centres — for any keyword search or category/facet query. Live South African retail price data for monitoring, comparison and research tasks.

**Minimal working input JSON:**

```json
{
  "searchTerms": ["iphone"],
  "maxItems": 50
}
```

**Variant input — category/facet browse (browse a whole department instead of a keyword):**

```json
{
  "categoryFilters": ["Type:13"],
  "maxPagesPerSearch": 5,
  "maxItems": 100
}
```

**Output field names:** `plid`, `tsin`, `title`, `brand`, `price`, `priceZAR`, `listingPrice`, `saving`, `currency`, `rating`, `reviewCount`, `images`, `image`, `url`, `inStock`, `stockStatus`, `distributionCentres`, `searchTerm`, `categoryFilter`, `scrapedAt`

**Behaviors an agent should know:**

- Provide at least one `searchTerms` or `categoryFilters` entry — a run with both empty fails immediately.
- `maxItems` caps the total number of products pushed to the dataset across all searches (default 50, range 1–100,000). Note: per the input schema `0` is documented as unlimited for paying users, but the current build treats it as a zero-item cap — set an explicit number instead of relying on `0`.
- Free (non-paying) accounts are hard-capped at **10 products per run** regardless of `maxItems`.
- `sort` only supports `"Relevance"`; the Takealot mobile API ignores other values.
- Each page returns up to **36 products**; `maxPagesPerSearch` (default 5) limits pages per term/category; the API effectively caps a single query around ~5,000 results.
- Pagination is cursor-based (`after`) and handled automatically.
- `proxyConfiguration` defaults to `{"useApifyProxy": true}`; the mobile API generally works without a proxy.

**Billing:** Pay-per-result — each dataset item is one `result` event (~$0.0009 on the Free tier, ~$0.9 per 1,000 results) plus a small Actor-start event; cap `maxItems` to bound cost.

### Legal & Compliance Disclaimer

This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Takealot** (Takealot Online (Pty) Ltd) or any of its brands. It accesses only **publicly available product data** through Takealot's own mobile JSON API, using the same endpoints their iOS app uses at a modest rate — it does **not** bypass logins, solve CAPTCHAs, or access non-public data. The output contains product information only and **no personal contact data**.

Users are solely responsible for their use of the data and for compliance with Takealot's Terms of Service and applicable law, including South Africa's Protection of Personal Information Act (POPIA) where relevant. This document is not legal advice.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search on Takealot (e.g. "iphone", "playstation 5"). Each keyword is paginated through result pages up to the limits below.

## `categoryFilters` (type: `array`):

Browse by category or facet instead of a keyword. Use facet syntax like "Type:13" (Computers & Tablets) or combine facets with commas: "Type:13,Brand:Logitech". Discover facet values from any search result.

## `maxItems` (type: `integer`):

Maximum number of products to scrape across all searches (0 = unlimited for paying users).

## `maxPagesPerSearch` (type: `integer`):

Maximum result pages to crawl per search term / category (each page returns up to 36 products).

## `sort` (type: `string`):

Sort order for results. Note: the Takealot mobile API currently only honors "Relevance".

## `proxyConfiguration` (type: `object`):

Select proxies to be used by your crawler, or disable the proxy entirely. The Takealot API is generally accessible without a proxy, but the proxy adds resilience against IP blocks.

## Actor input object example

```json
{
  "searchTerms": [
    "iphone"
  ],
  "categoryFilters": [],
  "maxItems": 50,
  "maxPagesPerSearch": 5,
  "sort": "Relevance",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "iphone"
    ],
    "categoryFilters": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/takealot-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["iphone"],
    "categoryFilters": [],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/takealot-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "iphone"
  ],
  "categoryFilters": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call ahmed_jasarevic/takealot-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/takealot-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/I5ZCmfw4DYbOEMcRw/builds/w1JsqyPy85qqU196a/openapi.json
