Jumia Marketplace Scraper - Products, Prices, Reviews & Sellers
Pricing
from $1.20 / 1,000 product results
Jumia Marketplace Scraper - Products, Prices, Reviews & Sellers
Scrape Jumia, Africa's largest marketplace: products with local prices, discounts, ratings, official-store badges and customer reviews across the Nigeria, Egypt, Kenya and Morocco storefronts. Search keywords or paste links, and monitor price changes with recurring updates.
Pricing
from $1.20 / 1,000 product results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
7
Total users
5
Monthly active users
9 days ago
Last modified
Categories
Share
Jumia Scraper: Products, Prices, Sellers & Reviews
Jumia Scraper turns Jumia, Africa's largest online marketplace, into a clean product data feed. Get product titles, prices, discounts, ratings, official-store badges and seller details across the Nigeria, Egypt, Kenya and Morocco storefronts. Search by keyword or paste product, vendor and catalogue links, switch on product detail pages and full customer reviews when you need depth, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- Two ways to collect. Keyword search walks one market's catalogue for your terms; My own links reads exactly the product, vendor or catalogue links you paste.
- Four African markets, one actor. Nigeria, Egypt, Kenya and Morocco, each its own catalogue with its own currency and connection exit.
- Prices, discounts, ratings and badges on every listing. Official-store and campaign badges, seller id, express and sponsored flags, all without any extra toggle, on every search, catalogue and vendor-shop listing (a pasted single product URL has no badges, since that data lives only on search and catalogue cards).
- Product detail depth on demand. Switch on the description, specification table, barcode, stock state and seller profile per run, and pay the surcharge only for what you read.
- Full customer reviews, not just a snippet. The reviews reader walks every page of a product's reviews and returns the star histogram and total count alongside the text.
- Vendor shops in one paste. A vendor shop link returns the shop's own profile row followed by its products.
- Built for monitoring. Recurring updates returns only new and changed listings on repeat runs, and a run the site genuinely refuses fails loudly instead of returning an empty dataset.
Use Cases
- Price monitoring and repricing: track price, discount and stock changes on competitor listings with Recurring updates.
- Marketplace research: compare official-store versus marketplace-seller pricing and ratings across four African storefronts.
- Review mining: collect full customer review text and star histograms for product quality analysis.
- Vendor intelligence: pull a shop's seller score, follower count and full product catalogue from one shop link.
- Catalogue enrichment: feed titles, images, prices and specifications into your own store or comparison site.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
recordType | "product" (also "vendor" for a vendor shop header row) |
id / sku | "SA0123XXFAKE1" (same value) |
name / displayName | "Sample Wireless Earbuds Pro - Black" |
brand | "SAMPLEBRAND" |
categories | ["Electronics", "Audio", "Earbuds"] |
url / imageUrl | product page link and image link |
currency | "NGN" (follows the selected market) |
price / priceDisplay | 19999.0 / "N 19,999" |
oldPrice / discountPercent | 29999.0 / 33 |
ratingAverage / ratingCount | 4.3 / 214 |
officialStore / badges | true / ["Official Store"] |
sellerId | 100001 |
shopExpress / sponsored / buyable | true / false / true |
market / marketHost | "NG" / "www.jumia.com.ng" |
gtin | barcode, when the listing or the detail page carries one |
availability | "in_stock" (with Read product detail pages on) |
description / specifications | full text and the spec table (with Read product detail pages on) |
sellerName / sellerUrl | "Sample Official Store" / the seller's shop link (with Read product detail pages on) |
sellerScore / sellerFollowers | 98 / 3450 (with Read product detail pages on) |
reviewsTotal / reviewsFetched | 214 / 10 (with Read customer reviews on) |
reviews | star rating, title, text, date, author, verified-purchase flag (with Read customer reviews on) |
reviewsHistogram | counts for each star, 1 to 5 (with Read customer reviews on) |
sourceType / sourceId / sourceUrl | how the record was reached, for example "search" / your search term / null |
position / scrapedAt | position within its source, and when it was read |
changeType / changedFields | "NEW", "UPDATED", "UNCHANGED", "REAPPEARED" or "EXPIRED" (with Recurring updates on) |
A vendor shop link returns one vendor row ahead of its products, carrying name, url, sellerScore, followers, currency, market, marketHost and productsListed instead of the product fields above, plus the same sourceType / sourceId / sourceUrl / scrapedAt. Recurring-updates rows also carry firstSeenAt and lastSeenAt. A product's own lastModified timestamp is passed through as-is but is not used to detect changes. When the marketplace's page includes seller performance labels, a detail-enriched product also carries a sellerPerformance object (shipping speed, quality score, customer rating).
How to Use
- Pick a mode. Keyword search walks one market's catalogue for your search terms. My own links reads exactly the product pages, vendor shops or catalogue links you paste.
- In keyword search, pick the market and enter your search terms. Optional filters: ordering, brand names, official stores only, minimum discount.
- Set Max records to bound the run (0 means no limit: the walk then ends when the catalogue runs out).
- Turn on Read product detail pages and Read customer reviews when you need depth; both add a small per-product surcharge.
Keyword search with filters:
{"mode": "search","country": "ng","queries": ["wireless earbuds"],"sort": "lowest-price","officialStoreOnly": true,"minDiscount": 15,"maxItems": 50}
Paste a product link and a vendor shop link, enriched:
{"mode": "urls","urls": ["https://www.jumia.com.ng/sample-wireless-earbuds-pro-black-000000001.html","https://www.jumia.com.ng/sample-official-store/"],"fetchDetails": true,"fetchReviews": true,"maxReviewsPerProduct": 20}
Recurring updates, watching a search for gone listings:
{"mode": "search","country": "ke","queries": ["blender"],"incrementalMode": true,"stateKey": "ke-blender-watch","emitExpired": true,"maxItems": 0}
Continue an interrupted run:
{"mode": "search","country": "ma","queries": ["telephone"],"maxItems": 500,"resumeFromRunId": "<PREVIOUS_RUN_OR_DATASET_ID>"}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/jumia-marketplace-scraper").call(run_input={"mode": "search", "country": "ng", "queries": ["wireless earbuds"], "maxItems": 50})for product in client.dataset(run["defaultDatasetId"]).iterate_items():print(product["name"], product["price"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/jumia-marketplace-scraper').call({ mode: 'search', country: 'ng', queries: ['wireless earbuds'], maxItems: 50 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Max records and Max pages
Max records (maxItems) is the single limit that stops a run; 0 means no limit, and the walk then ends naturally when the catalogue, search or vendor shop runs out. Product rows and vendor header rows both count against it. Max pages per source (maxPages) is a runaway guard bounding how deep any one search or catalogue walk goes; leave it at 0 to go as deep as the source serves.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset id and the actor skips every record that run already collected, so an interrupted large collection can finish without paying twice. It cannot be combined with Recurring updates on the same state key. - Recurring updates (
incrementalMode) is for running the same search or links again and again, for example daily, and getting only what changed. The first run returns everything as NEW. Later runs label each record NEW, UPDATED (withchangedFields), UNCHANGED (suppressed and not billed unlessemitUnchangedis on), REAPPEARED or EXPIRED. EXPIRED is produced by a run that itself scans its whole scope (not capped, not resumed, no source left unfinished, at least one record seen) withemitExpiredon, for records the stored memory held as present that this run no longer found; a capped, resumed or partially failed run never marks anything gone. REAPPEARED only ever appears for a record that a previous such run had already marked gone.stateKeynames or shares the stored memory; leaving it empty keys the memory to the exact run setup automatically.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (keyword search) or urls (your own links). |
country | string | ng | Market storefront: ng, eg, ke or ma. Only read in search mode; a pasted link is read on its own market regardless. |
queries | array | no default (prefill: ["phone"]) | Search terms, search mode only. One entry per search. |
sort | string | relevance | relevance, newest, lowest-price, highest-price or rating. |
brands | array | no default | Brand names, search mode only. Matched against the catalogue's own filters; an unoffered name stops the run with the list of available brands. |
officialStoreOnly | boolean | false | Search mode only. Return only official-store products. |
minDiscount | integer | 0 | Search mode only. Minimum discount percent (0 to 100); 0 disables the filter. |
urls | array | no default (prefill: a sample catalogue search link) | Links mode only. Product pages, a vendor shop link, or catalogue links (search results, categories). |
fetchDetails | boolean | false | Read each product's own detail page and add description, specifications, seller score, stock state and barcode. |
fetchReviews | boolean | false | Collect each product's customer reviews, total and star histogram. |
maxReviewsPerProduct | integer | 10 | Cap on reviews collected per product (0 = every review). |
maxItems | integer | 0 (no limit; the console's own prefill is 20) | Stop after this many records across the whole run. Products and vendor header rows both count. |
maxPages | integer | 0 (no limit, internally capped at 500) | Runaway guard on depth per search or catalogue walk. |
resumeFromRunId | string | no default | Continue one interrupted run by its run or dataset id. |
incrementalMode | boolean | false | Return only new and changed records on repeat runs of the same setup. |
stateKey | string | no default | Name or share an incremental-mode memory. |
emitUnchanged | boolean | false | Also return, and bill, unchanged records. |
emitExpired | boolean | false | Also return, and bill, records that were present before and are no longer found. Only produced by a run that itself scans its whole scope. |
mcpConnectors | array | no default | Optional: send a summary of each record to apps you authorized under Integrations. |
notionParentPageUrl | string | no default | Notion connector only: page under which item pages are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
proxyConfiguration | object | Apify Proxy, premium residential-grade tier pinned to the selected market | Connection used for every request. This marketplace refuses ordinary datacenter connections. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"recordType": "product","id": "SA0123XXFAKE1","sku": "SA0123XXFAKE1","name": "Sample Wireless Earbuds Pro - Black","displayName": "Sample Wireless Earbuds Pro - Black","brand": "SAMPLEBRAND","categories": ["Electronics", "Audio", "Earbuds"],"url": "https://www.jumia.com.ng/sample-wireless-earbuds-pro-black-000000001.html","imageUrl": "https://example.img/sample-earbuds.jpg","currency": "NGN","price": 19999.0,"priceDisplay": "N 19,999","oldPrice": 29999.0,"discountPercent": 33,"ratingAverage": 4.3,"ratingCount": 214,"officialStore": true,"badges": ["Official Store"],"sellerId": 100001,"shopExpress": true,"sponsored": false,"buyable": true,"market": "NG","marketHost": "www.jumia.com.ng","lastModified": 1700000000,"gtin": "0000000000000","availability": "in_stock","description": "Sample product description text.","specifications": [{ "name": "Color", "value": "Black" }],"sellerName": "Sample Official Store","sellerUrl": "https://www.jumia.com.ng/sample-official-store/","sellerScore": 98,"sellerFollowers": 3450,"reviewsTotal": 214,"reviewsFetched": 10,"reviews": [{"rating": 5,"title": "Sample headline","text": "Sample review text.","date": "01-01-2026","author": "by Jane Doe","verified": true}],"reviewsHistogram": { "5": 120, "4": 60, "3": 20, "2": 8, "1": 6 },"sourceType": "search","sourceId": "wireless earbuds","sourceUrl": null,"position": 1,"scrapedAt": "2026-09-29T00:00:00Z"}
Plan Requirement
This marketplace's own protection refuses ordinary datacenter and direct connections, so the default connection setting requests a premium residential-grade proxy tier pinned to the market you select. Running it needs a paid Apify plan that includes that tier; you can also paste your own connection links in the Connection section to use your own instead. The Pricing tab shows the current per-record and detail-enrichment rates.
FAQ
How much does it cost?
You pay per product or vendor record returned, plus a detail-enrichment surcharge only for records whose detail page or reviews were read. The Pricing tab shows the current rates for this actor. Use Max records to cap the cost of any run.
Is it legal to scrape Jumia?
This actor collects only publicly available marketplace data: prices, descriptions, ratings and reviews shown on the public site. You are responsible for how you use it: follow Jumia's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Seller names, photos and review text may carry their own rights or personal-data considerations.
Can I get only new or changed listings on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Recurring updates. Each run then returns only new and updated records, and unchanged ones are not billed unless you turn that on too.
Why did my brand filter stop the run instead of just returning nothing?
Brand names are matched against the filters the marketplace itself offers for your exact search, not against a fixed list. A name it does not offer stops the run with the list of available brands, so a typo can never silently return an unfiltered catalogue.
Why did my run fail instead of returning an empty dataset?
If the marketplace refuses every request the run makes, that is a connection problem, not an empty search, so the run fails loudly with a clear message instead of returning zero rows silently. A genuine empty search, where the catalogue was read successfully and holds nothing for your terms, succeeds with zero rows and a visible verdict on the run page.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
🔗 More scrapers you might like
Pair this actor with these related scrapers from the same team:
| 🧩 Falabella Scraper Scrape Falabella, Latin America's leading retail marketplace: products with local prices... | 🧩 Digitec Galaxus Scraper Scrape Digitec Galaxus, Switzerland's largest online retailer: products with local... |
| 🧩 Walmart Scraper Scrape Walmart.com by keyword, URL, or item ID. Extract prices, was-prices, sellers... | 🛒 Depop Scraper From $1/1K. Scrape Depop search results, listings, shops, and reviews to JSON, CSV, or... |
| 🧩 Mercado Livre Brazil Scrape Mercado Livre Brazil by keyword or URL. Filter by category, brand, price... | 🏨 Trendyol Scraper From $0.80/1K. Scrape Trendyol products, prices, ratings, badges, sellers, full reviews... |
💬 Support & custom scrapers
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.