Jumia Marketplace Scraper - Products, Prices, Reviews & Sellers avatar

Jumia Marketplace Scraper - Products, Prices, Reviews & Sellers

Pricing

from $1.20 / 1,000 product results

Go to Apify Store
Jumia Marketplace Scraper - Products, Prices, Reviews & Sellers

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

Abot API

Maintained by Community

Actor 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.

FieldExample
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 / imageUrlproduct page link and image link
currency"NGN" (follows the selected market)
price / priceDisplay19999.0 / "N 19,999"
oldPrice / discountPercent29999.0 / 33
ratingAverage / ratingCount4.3 / 214
officialStore / badgestrue / ["Official Store"]
sellerId100001
shopExpress / sponsored / buyabletrue / false / true
market / marketHost"NG" / "www.jumia.com.ng"
gtin / availabilitybarcode when carried, and "in_stock" (with Read product detail pages on)
description / specificationsfull 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 / categoryPathplain-name copies of ratingAverage / ratingCount / buyable / officialStore / shopExpress / categories
seller / keyFeatures / images / breadcrumbs / enrichedseller 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
sellerPerformanceshipping speed, quality score and customer rating labels when the page shows them (with Read product detail pages on)
reviewsTotal / reviewsFetched214 / 20 (with Read customer reviews on)
reviews / reviewsHistogramstar rating, title, text, date, author, verified flag, and counts per star 1 to 5 (with Read customer reviews on)
sourceType / sourceId / sourceUrl / position / scrapedAthow 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

  1. 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.
  2. In keyword search, pick the market and enter your search terms. Optional filters: ordering, brand names, official stores only, minimum discount.
  3. Set Max records to bound the run (0 means no limit: the walk then ends when the catalogue runs out).
  4. 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>"
}

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.

ShapeExample
Searchhttps://www.jumia.com.ng/catalog/?q=phone (also with sort= and page=)
Brand landing pagehttps://www.jumia.com.ng/mlp-samsung-store/
Category, filtered, tagged, paginatedhttps://www.jumia.com.ng/mobile-phones/?sort=lowest-price&price_discount=30-100
Category with brand pathhttps://www.jumia.com.ng/mobile-phones/samsung/
Brand shop, vendor shophttps://www.jumia.com.ng/samsung/, https://www.jumia.com.ng/xiaozhao-cod/
Promo collectionhttps://www.jumia.com.ng/flash-sales/
Product pagea link ending in -<digits>.html
Reviews page by SKUhttps://www.jumia.com.ng/catalog/productratingsreviews/sku/<SKU>/ (reads the product it belongs to)
Other markets, bare domain, mobile hostjumia.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 ApifyClient
client = 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 (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is 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) with emitExpired on, 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. stateKey names 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, the source* columns, position, lastModified and the sponsored flag. 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 example ratingCount. A plain name is ignored wherever it appears inside nested lists such as specifications; a dotted path such as specifications.value ignores only that nested field. Ignored columns stay in the output and are left out of changedFields. 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.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to 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

ParameterTypeDefaultDescription
modestringsearchsearch (keyword search) or urls (your own links).
countrystringngMarket storefront: ng, eg, ke, ma, ci or sn. Only read in search mode; a pasted link is read on its own market regardless.
queriesarrayno default (prefill: ["phone"])Search terms, search mode only. One entry per search.
sortstringrelevancerelevance, newest, lowest-price, highest-price or rating.
brandsarrayno defaultBrand names, search mode only. Matched against the catalogue's own filters; an unoffered name stops the run with the list of available brands.
officialStoreOnlybooleanfalseSearch mode only. Return only official-store products.
minDiscountinteger0Search mode only. Minimum discount percent (0 to 100); 0 disables the filter.
urlsarrayone 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.
fetchDetailsbooleanfalseRead each product's own detail page and add description, specifications, seller score, stock state and barcode.
fetchReviewsbooleanfalseCollect each product's customer reviews, total and star histogram.
maxReviewsPerProductinteger10Cap on reviews collected per product (0 = every review, up to 500).
maxItemsinteger0 (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.
maxPagesinteger0 (no limit, internally capped at 500)Runaway guard on depth per search or catalogue walk.
resumeFromRunIdstringno defaultContinue one interrupted run by its run or dataset id.
incrementalModebooleanfalseReturn only new and changed records on repeat runs of the same setup.
stateKeystringno defaultName or share an incremental-mode memory.
emitUnchangedbooleanfalseAlso return, and bill, unchanged records.
emitExpiredbooleanfalseAlso return, and bill, records that were present before and are no longer found. Only produced by a run that itself scans its whole scope.
ignoreFieldsForChangesarrayemptyColumns that must not count as a change in recurring updates.
mcpConnectorsarrayno defaultOptional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstringno defaultNotion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.
proxyConfigurationobjectApify Proxy, premium residential-grade tier pinned to the selected marketConnection 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.

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...

👉 Browse all abotapi scrapers

💬 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.