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
10
Total users
4
Monthly active users
11 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, Morocco, Ivory Coast and Senegal 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.
- Six African markets, one actor. Nigeria, Egypt, Kenya, Morocco, Ivory Coast and Senegal, 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 six 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 Product 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 / availability | barcode when carried, and "in_stock" (with Read product detail pages on) |
description / specifications | full text and the spec table (with Read product detail pages on) |
sellerName / sellerUrl / sellerScore / sellerFollowers | "Sample Official Store", shop link, 98, 3450 (with Read product detail pages on) |
country / countryCode / priceText / oldPriceText | "Nigeria" / "NG", and the price and was-price exactly as the storefront prints them |
rating / reviewsCount / inStock / isOfficialStore / isExpress / categoryPath | plain-name copies of ratingAverage / ratingCount / buyable / officialStore / shopExpress / categories |
seller / keyFeatures / images / breadcrumbs / enriched | seller name, the Key Features list, the full image gallery and the category trail (with Read product detail pages on); enriched says whether the detail page was read |
sellerPerformance | shipping speed, quality score and customer rating labels when the page shows them (with Read product detail pages on) |
reviewsTotal / reviewsFetched | 214 / 20 (with Read customer reviews on) |
reviews / reviewsHistogram | star rating, title, text, date, author, verified flag, and counts per star 1 to 5 (with Read customer reviews on) |
sourceType / sourceId / sourceUrl / position / scrapedAt | how the record was reached (for example "search" / your search term / null), its position in that 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>"}
Link shapes in "My own links" mode
If you leave the links field untouched, links mode now reads one example per shape below. Replace it with your own links to scope the run. Filters in a pasted link (search words, sort, tag, price range) and a pasted page number are kept.
| Shape | Example |
|---|---|
| Search | https://www.jumia.com.ng/catalog/?q=phone (also with sort= and page=) |
| Brand landing page | https://www.jumia.com.ng/mlp-samsung-store/ |
| Category, filtered, tagged, paginated | https://www.jumia.com.ng/mobile-phones/?sort=lowest-price&price_discount=30-100 |
| Category with brand path | https://www.jumia.com.ng/mobile-phones/samsung/ |
| Brand shop, vendor shop | https://www.jumia.com.ng/samsung/, https://www.jumia.com.ng/xiaozhao-cod/ |
| Promo collection | https://www.jumia.com.ng/flash-sales/ |
| Product page | a link ending in -<digits>.html |
| Reviews page by SKU | https://www.jumia.com.ng/catalog/productratingsreviews/sku/<SKU>/ (reads the product it belongs to) |
| Other markets, bare domain, mobile host | jumia.com.eg, jumia.co.ke, jumia.ma, jumia.com.ng without www, m. hosts (read on the main host) |
A first catalogue page that arrives empty is read again before the link is treated as empty, and a link that yields nothing logs a warning.
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.
Reviews and detail enrichment
Read customer reviews collects up to Max reviews per product (default 10, 0 means every review, up to 500) and adds the star histogram and total. Every full 5 reviews delivered on a product add one detail-enrichment event on top of the base one (see the FAQ), so only reviews actually returned are charged.
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. - What counts as a change. Compared: price, was-price, discount, rating average and count, stock and availability, seller, badges, categories, specifications, and the description and review content (the order of lists is ignored, and a whole-number price compares equal however it was stored). Excluded from the comparison but still returned in every row:
scrapedAt, thesource*columns,position,lastModifiedand thesponsoredflag. A run that only adds new output columns does not mark existing records UPDATED. - Ignore fields when detecting changes (
ignoreFieldsForChanges, incremental mode only) lists extra columns that must not count as a change, for exampleratingCount. A plain name is ignored wherever it appears inside nested lists such asspecifications; a dotted path such asspecifications.valueignores only that nested field. Ignored columns stay in the output and are left out ofchangedFields. Changing the list never triggers a one-time wave of UPDATED rows. The review list and the description can only be ignored as a whole column (reviews,description), not field by field, because the stored baseline keeps only a digest of them.
Output views
The dataset has five views in the Console: Results (product listing rows), Product details (description, specifications, seller), Reviews (one row per review, unwound from reviews), Vendors (vendor shop header rows) and Changes (changeType, changedFields, firstSeenAt, lastSeenAt for Recurring updates). Every completed run (one that read its sources, even if it found nothing) also stores a short run summary under the OUTPUT key of the key-value store.
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, ma, ci or sn. 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 | one sample link per supported shape (see the link-shape table) | Links mode only. Product pages, reviews-by-SKU links, vendor shops, or catalogue links. Left untouched, links mode scrapes one example per shape. |
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, up to 500). |
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. |
ignoreFieldsForChanges | array | empty | Columns that must not count as a change in recurring updates. |
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 Product Earbuds Pro - Black","displayName": "Sample Product 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": 20,"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 uses the residential tier, starting with an exit in the market you select and rotating to other African exits unless you pin a country yourself. 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. A datacenter or direct connection is refused by the site (HTTP 403), so the actor needs residential access. On a plan without residential proxies (Apify free plans do not include them) the run logs "The selected connection is unavailable to this run" and continues on a backup connection where some pages may still be unavailable; pages served this way log "Served over the backup connection (the default connection was unavailable)". If nothing can be read the run fails with one of three messages: "The proxy connection was refused for this account, so no page could be read" (a paid plan is required, or check your own proxy URLs); "No results: residential proxies are unavailable on this run ... and the backup connection could not load the requested Jumia pages"; or "Could not load any results page (the requests failed) ... This is a connection problem, not an empty search." 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. With reviews on, every full 5 reviews delivered on a product add one more detail-enrichment event (a remainder under 5 adds nothing), so the default of 10 reviews adds 2 events per product on top of the base one; Max reviews per product caps this. 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... |
| 🛒 Trendyol Scraper Scrape Trendyol products, prices, ratings, badges, sellers, full reviews and Q&A. Search... | 🛒 Tokopedia Scraper Extract product data from Tokopedia, Indonesia’s largest marketplace. Search by keyword... |
| 🧩 TikTok Shop Scraper Scrape TikTok Shop by keyword, category or product URL. Extract prices, discounts, sales... | 🧩 Joom Scraper Scrape Joom products by keyword or URL. Extract product names, prices, discounts... |
💬 Support
- 🐞 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.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.