# Jumia Scraper (`badr_xba/jumia-scraper`) Actor

Extrait les produits de Jumia (Maroc, Côte d'Ivoire, Sénégal, Nigeria, Kenya, Égypte, Ghana, Ouganda) : prix, promotions, notes, images, vendeur et fiche technique.

- **URL**: https://apify.com/badr\_xba/jumia-scraper.md
- **Developed by:** [Badr Bouargan](https://apify.com/badr_xba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00005 / actor start

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Jumia Scraper – Products, Prices & Reviews

Scrape **Jumia categories, keyword pages and product pages** in 8 African countries — prices, discounts, ratings, sellers, stock, specifications and **customer reviews** — with **filters, price tracking and e-mail alerts**.

Countries: 🇲🇦 Morocco · 🇨🇮 Côte d'Ivoire · 🇸🇳 Senegal · 🇳🇬 Nigeria · 🇰🇪 Kenya · 🇪🇬 Egypt · 🇬🇭 Ghana · 🇺🇬 Uganda

> Need the **whole catalog** of a country? Use **Jumia All Products Scraper** instead.

### ✨ What you get

- **Category URLs** (recommended): e.g. `https://www.jumia.ma/telephone-tablette/`, with pagination (up to 50 pages / ~2,000 products per category).
- **Keywords**: e.g. `casque bluetooth` — uses Jumia's official keyword pages (`/slp/…`), up to 40 products per keyword and country.
- **Product URLs**: any Jumia product page.
- **Product details** (optional): SKU, seller and score, stock, all images, description, specifications, breadcrumbs.
- **Customer reviews** (optional): rating, title, text, date, verified purchase — no customer names.
- **Filters**: price range, minimum discount, in stock only, category keywords, name keywords, excluded words.
- **Price tracking & alerts**: previous price, change %, new products, stock changes, e-mail alerts to your Apify account.
- **Compliant**: follows Jumia's robots.txt (identified bot, < 200 requests/minute, no fake browser, no proxy). Search (`/catalog/?q=`) and sort URLs are forbidden to bots by Jumia and are skipped.

### 🚀 How to use

1. Choose **countries** (for keywords).
2. Add **keywords** and/or **category URLs**.
3. Set **Max products per country**, optionally enable **product details**, **reviews**, **filters**.
4. Click **Start** and export as Excel, CSV or JSON.

### 📦 Output example

```json
{
    "productId": "67917496",
    "sku": "AP009MP15D0X4NAFAMZ",
    "name": "Apple iPhone 17 Pro 256GB Silver",
    "url": "https://www.jumia.ma/apple-iphone-17-pro-256gb-silver-neuf-2-ans-garantie-67917496.html",
    "price": 15499,
    "oldPrice": 19999,
    "discountPercent": 23,
    "currency": "MAD",
    "rating": 4.6,
    "reviewsCount": 12,
    "categories": ["Phones & Tablets", "Mobile Phones", "Smartphones", "iOS Phones"],
    "isJumiaExpress": true,
    "seller": { "name": "Jumia", "score": "100%" },
    "inStock": true,
    "country": "ma",
    "source": "https://www.jumia.ma/telephone-tablette/",
    "priceChangePercent": -8.8,
    "reviews": [{ "rating": 5, "title": "Top", "text": "Very good phone", "date": "2026-08-17", "verifiedPurchase": true }]
}
```

### 💰 Cost

Very low: no proxy is needed. Listing pages return ~40 products per request; product details and reviews add one request each.

### ❓ FAQ

**Why only 40 products for a keyword?** Jumia forbids bots from using its search engine. Keywords use Jumia's public keyword pages, which list up to 40 products. For more results, use a category URL and the *Name contains* filter.

**Who receives the e-mail alerts?** The e-mail address of the Apify account running the Actor.

***

### 🇫🇷 En français

Récupère les produits Jumia (8 pays) depuis des **URLs de catégories** (recommandé), des **mots-clés** (pages mots-clés officielles, 40 produits max) ou des **fiches produit** : prix, remises, notes, vendeurs, stock, caractéristiques et **avis clients**. **Filtres**, **suivi des prix** et **alertes e-mail**. Conforme au robots.txt de Jumia, sans proxy, donc très peu coûteux.

# Actor input Schema

## `countries` (type: `array`):

Sites Jumia où lancer les recherches par mot-clé. Sélectionnez-en un, plusieurs ou tous. Les URLs de départ utilisent leur propre domaine.

## `searchQueries` (type: `array`):

Mots-clés (ex. casque bluetooth, iphone 15). Ils passent par les pages mots-clés officielles de Jumia (/slp/…, autorisées aux robots) : jusqu'à 40 produits par mot-clé et par pays. Pour plus de résultats, utilisez des URLs de catégories.

## `startUrls` (type: `array`):

URLs Jumia de catégories (recommandé, ex. https://www.jumia.ma/telephone-tablette/ — jusqu'à 50 pages) ou de fiches produit. Les URLs de recherche (/catalog/?q=) et de tri sont ignorées car interdites aux robots par Jumia.

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

Limite appliquée à chaque pays séparément (tous mots-clés et URLs confondus). Avec 8 pays et 100 produits, vous obtenez jusqu'à 800 produits.

## `maxPagesPerQuery` (type: `integer`):

Nombre de pages parcourues pour chaque URL de catégorie (environ 40 produits par page, 50 pages maximum chez Jumia).

## `scrapeProductDetails` (type: `boolean`):

Ouvre chaque fiche produit pour récupérer la description, toutes les images, le vendeur, le stock, le SKU et les caractéristiques.

## `minPrice` (type: `integer`):

Ne garder que les produits à ce prix ou plus (dans la devise du site).

## `maxPrice` (type: `integer`):

Ne garder que les produits à ce prix ou moins.

## `minDiscountPercent` (type: `integer`):

Ne garder que les produits en promotion d'au moins ce pourcentage (ex. 30).

## `onlyInStock` (type: `boolean`):

Exclure les produits en rupture de stock.

## `categoryKeywords` (type: `array`):

Garder les produits dont une catégorie contient un de ces mots (ex. téléphone, électroménager). Accents et majuscules ignorés.

## `nameKeywords` (type: `array`):

Garder les produits dont le nom contient un de ces mots (ex. samsung, iphone).

## `excludeKeywords` (type: `array`):

Exclure les produits dont le nom contient un de ces mots (ex. coque, reconditionné).

## `trackPriceChanges` (type: `boolean`):

Mémorise le prix et le stock de chaque produit pour les comparer au run suivant : ancien prix, variation, nouveaux produits, changement de stock.

## `onlyChangedProducts` (type: `boolean`):

N'enregistrer que les nouveaux produits et ceux dont le prix ou le stock a changé depuis le dernier run. Idéal avec un run programmé chaque jour.

## `sendEmailAlerts` (type: `boolean`):

À la fin du run, envoie un récapitulatif des baisses de prix et retours en stock à l'adresse e-mail de votre compte Apify (seule adresse autorisée par Apify). Nécessite le suivi des prix.

## `alertMinPriceDropPercent` (type: `integer`):

Signaler les produits dont le prix a baissé d'au moins ce pourcentage depuis le dernier run.

## `alertBackInStock` (type: `boolean`):

Signaler les produits qui étaient en rupture et sont de nouveau disponibles.

## `alertNewProducts` (type: `boolean`):

Signaler aussi les produits jamais vus. Attention : au premier run, tous les produits sont nouveaux.

## `includeReviews` (type: `boolean`):

Ajoute les avis de chaque produit (note, titre, texte, date, achat vérifié — sans le nom des clients). Page autorisée par robots.txt de Jumia. Ajoute 1 requête par page de 10 avis.

## `maxReviewsPerProduct` (type: `integer`):

Les avis les plus récents d'abord.

## `botContact` (type: `string`):

E-mail ou URL permettant à Jumia de vous contacter (recommandé), ajouté au User-Agent comme l'exige robots.txt. Vide = adresse de l'Actor sur Apify.

## `maxRequestsPerMinute` (type: `integer`):

Vitesse maximale, tous pays confondus. Jumia autorise au plus 200 requêtes par minute.

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

Par défaut aucun proxy : Jumia autorise les robots identifiés et demande de ne pas multiplier les adresses IP. N'en activez un que si le robot est bloqué.

## Actor input object example

```json
{
  "countries": [
    "ma"
  ],
  "searchQueries": [
    "iphone"
  ],
  "startUrls": [
    {
      "url": "https://www.jumia.ma/telephone-tablette/"
    }
  ],
  "maxItems": 100,
  "maxPagesPerQuery": 5,
  "scrapeProductDetails": false,
  "onlyInStock": false,
  "trackPriceChanges": true,
  "onlyChangedProducts": false,
  "sendEmailAlerts": false,
  "alertMinPriceDropPercent": 10,
  "alertBackInStock": true,
  "alertNewProducts": false,
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "maxRequestsPerMinute": 120,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Tableau des produits avec image, prix, remise, note et lien.

## `allFields` (type: `string`):

Données complètes de chaque produit (avec les détails si « Scraper les fiches produit » est activé).

# 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 = {
    "countries": [
        "ma"
    ],
    "searchQueries": [
        "iphone"
    ],
    "startUrls": [
        {
            "url": "https://www.jumia.ma/telephone-tablette/"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("badr_xba/jumia-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 = {
    "countries": ["ma"],
    "searchQueries": ["iphone"],
    "startUrls": [{ "url": "https://www.jumia.ma/telephone-tablette/" }],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("badr_xba/jumia-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 '{
  "countries": [
    "ma"
  ],
  "searchQueries": [
    "iphone"
  ],
  "startUrls": [
    {
      "url": "https://www.jumia.ma/telephone-tablette/"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call badr_xba/jumia-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,badr_xba/jumia-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/YL0CxybxYR6k5V4sS/builds/gxVQOF4FswfapmsGZ/openapi.json
