Alibaba Category Scraper avatar

Alibaba Category Scraper

Pricing

from $2.99 / 1,000 category products

Go to Apify Store
Alibaba Category Scraper

Alibaba Category Scraper

Extract comprehensive product data from Alibaba's marketplace using keyword searches. This Apify Actor scrapes details like prices, supplier ratings, images, and certifications, delivering structured JSON output for easy analysis....

Pricing

from $2.99 / 1,000 category products

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Alibaba Category Scraper

Browser-first extraction for public Alibaba.com category, search, catalog, and product-detail pages. The Actor collects publicly exposed product and supplier facts from the rendered page, embedded offer data, SSR cards, and Product/ItemList JSON-LD. It supports multiple sources, bounded pagination, deduplication, filters, sorting, standard Apify Proxy routing, and fail-closed operational diagnostics.

The Actor is not affiliated with Alibaba Group. It requests only public pages, does not sign in, solve CAPTCHAs, evade WAFs, rotate identities to bypass access controls, or call private APIs. When a public response is challenged or unavailable, it stops at that boundary and reports bounded operational diagnostics in logs and OUTPUT_SUMMARY; it does not fabricate a product or write error-shaped dataset rows. Availability can vary by region, session, and Cloud transport.

Why use this Actor

Use it to turn public Alibaba category or search pages into analysis-ready product rows for supplier discovery, preliminary sourcing research, price/MOQ comparisons, catalog monitoring, and market reconnaissance. Multiple input URLs can be crawled in one bounded run, and filters can narrow the result set before the global maxItems limit is applied.

What is extracted

When the public response exposes the value, product rows can include:

  • identity: url, productUrl, productId, productName, title
  • pricing: price, priceCurrency, priceFormatted, priceMin, priceMax, priceUnit, discount, promotionPrice
  • order terms: minOrder, minOrderUnit, minOrderFormatted
  • supplier: supplierName, supplierProfileUrl, supplierCountry, supplierLocation, supplierYears, supplierRating, supplierRatingValue, supplierId
  • engagement: ratingsCount, ratingsCountValue, soldCount, soldCountValue, transactionCount, transactionCountValue
  • catalog facts: category, brand, availability, productScore, supplierServiceScore, shippingScore
  • media and merchandising: images, thumbnail, imageCount, badges, certifications, sellingPoints, isAd, isCertified
  • provenance: sourceUrl, pageNumber, position, scrapedAt

Missing values are omitted rather than fabricated. thumbnail is the first URL in images when media is enabled. Image output is restricted to public Alibaba CDN assets, with obvious logo, icon, avatar, placeholder, and loading assets removed. Operational counts are written to OUTPUT_SUMMARY; failure details stay in the run logs.

Input

The simplest input creates a public Alibaba search URL:

{
"keyword": "wireless earbuds",
"maxItems": 25,
"maxPages": 3,
"sortBy": "best_match"
}

Multiple category or search sources

Use explicit public URLs when you already have them. All sources share one global maxItems limit:

{
"startUrls": [
"https://www.alibaba.com/trade/search?SearchText=wireless+earbuds&has4Tab=true&tab=all",
"https://www.alibaba.com/trade/search?SearchText=bluetooth+speakers&has4Tab=true&tab=all"
],
"maxItems": 50,
"maxPages": 0,
"deduplicate": true,
"includeMedia": true
}

maxPages: 0 means automatic pagination with a hard 100-page safety cap. Pages within one source are sequential; maxConcurrency controls how many source URLs can run at once.

Filters and sorting

{
"keyword": "led work light",
"maxItems": 100,
"maxPages": 5,
"sortBy": "price_asc",
"minPrice": 5,
"maxPrice": 40,
"minOrderQuantity": 10,
"minSupplierRating": 4.5,
"minReviewCount": 20,
"minSoldCount": 100,
"supplierCountry": "CN",
"certifiedOnly": true,
"requiredBadges": ["CE"],
"excludeAds": true
}

Supported sortBy values are best_match, price_asc, price_desc, rating_desc, reviews_desc, sold_desc, and supplier_years_desc.

Developer and proxy options

{
"keyword": "wireless earbuds",
"requestDelayMs": 1200,
"maxConcurrency": 2,
"maxRequestRetries": 3,
"requestTimeoutSecs": 60,
"requestHandlerTimeoutSecs": 300,
"selectorTimeoutSecs": 30,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Proxy configuration changes only the network route and does not bypass a challenge or access control. Operational diagnostics stay in logs and OUTPUT_SUMMARY, never in the dataset.

Complete input reference

The supported canonical fields are:

  • keyword: search phrase; defaults to wireless earbuds when no source URL is supplied.
  • startUrls: up to 20 public HTTPS Alibaba URLs.
  • categoryUrl and categoryUrls: convenience fields appended after startUrls.
  • maxItems: global emitted product-row limit, 1–500; default 40.
  • maxPages: pages per source, 0–100; default 3. Zero enables bounded automatic pagination.
  • sortBy: best_match, price_asc, price_desc, rating_desc, reviews_desc, sold_desc, or supplier_years_desc.
  • includeMedia and deduplicate: booleans, both defaulting to true.
  • excludeAds and certifiedOnly: booleans, default false.
  • supplierCountry, supplierLocation, minPrice, maxPrice, minOrderQuantity, minSupplierRating, minReviewCount, minSoldCount, and requiredBadges: optional filters.
  • requestDelayMs: 0–15,000 ms; default 1,000.
  • maxConcurrency: 1–5 source workers; default 2.
  • maxRequestRetries: 0–10; default 3.
  • requestTimeoutSecs: 15–300 seconds; default 60.
  • requestHandlerTimeoutSecs: 60–900 seconds; default 300.
  • selectorTimeoutSecs: 5–120 seconds; default 30.
  • proxyConfiguration: optional useApifyProxy, apifyProxyGroups, and apifyProxyCountry.

For compatibility, the runtime also accepts legacy aliases such as keywords, searchQuery, query, queries, sourceUrl, sourceUrls, maxProducts, max_products, max_pages, pageDelayMs, navigationTimeoutSecs, timeoutSecs, and timeoutMs. Canonical fields are recommended for new runs.

Deterministic local QA

The bundled fixture is for local validation and cannot be used to create Cloud output:

{
"startUrls": [
"https://www.alibaba.com/"
],
"maxItems": 1,
"maxPages": 1,
"includeMedia": true,
"requestDelayMs": 0,
"maxConcurrency": 1,
"maxRequestRetries": 0,
"requestTimeoutSecs": 15
}

For pagination fixtures, page 2 and later are loaded from sibling files named sample-page-2.html, sample-page-3.html, and so on.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Run it in Apify Console

  1. Open the Actor and select the Input tab.
  2. Paste a canonical JSON input, such as the keyword example above, or enter the fields in the form.
  3. Select Save & Run (or Start) and wait for the run to finish.
  4. Open the Dataset tab to inspect source-backed product rows.
  5. Open the Key-value store tab and inspect OUTPUT_SUMMARY for status, counts, pagination, and filters; failure details stay in the run logs.
  6. Use the Dataset export controls to download JSON, HTML, CSV, or Excel.

Product output example

The following rich row mirrors the bundled public-shape fixture. Live values vary and are emitted only when observed in the public response:

{
"url": "https://www.alibaba.com/product-detail/rechargeable-led-work-light_1234567890123.html",
"productId": "1234567890123",
"productName": "Rechargeable LED Work Light",
"title": "Rechargeable LED Work Light",
"productUrl": "https://www.alibaba.com/product-detail/rechargeable-led-work-light_1234567890123.html",
"price": 12.5,
"priceCurrency": "USD",
"priceFormatted": "12.50",
"priceMin": 12.5,
"priceMax": 12.5,
"category": "Portable Lighting",
"brand": "BrightForge",
"availability": "https://schema.org/InStock",
"supplierName": "BrightForge Industrial Co.",
"supplierRatingValue": 4.8,
"ratingsCountValue": 38,
"images": ["https://s.alicdn.com/@sc04/kf/LED-work-light.jpg"],
"thumbnail": "https://s.alicdn.com/@sc04/kf/LED-work-light.jpg",
"imageCount": 1,
"sourceUrl": "https://www.alibaba.com/",
"pageNumber": 1,
"position": 1,
"scrapedAt": "2026-09-05T00:00:00.000Z"
}

HTTP fallback output example

If browser extraction fails before producing records, the bounded HTTP fallback uses the same product-row contract. It does not add a fake transport field or claim fields that were not present:

{
"url": "https://www.alibaba.com/product-detail/example-public-item_123456789.html",
"productId": "123456789",
"productName": "Example public item",
"productUrl": "https://www.alibaba.com/product-detail/example-public-item_123456789.html",
"price": 4.25,
"priceCurrency": "USD",
"priceFormatted": "4.25",
"sourceUrl": "https://www.alibaba.com/trade/search?SearchText=example",
"pageNumber": 1,
"position": 1,
"scrapedAt": "2026-09-08T00:00:00.000Z"
}

No diagnostic or error rows are written to the dataset. Check logs and run logs for bounded operational details.

Run summary example

OUTPUT_SUMMARY contains counts and run status without changing the dataset row contract:

{
"status": "SUCCEEDED",
"runStatus": "SUCCEEDED",
"dataStatus": "COMPLETE",
"keyword": "wireless earbuds",
"sourceCount": 1,
"maxItems": 25,
"maxPages": 3,
"pagesFetched": 2,
"productCount": 2,
"successfulCount": 2,
"itemCount": 2,
"diagnosticCount": 0,
"diagnosticsFound": 0,
"dataAvailable": true,
"duplicateCount": 0,
"filteredOutCount": 0,
"usedProxy": false,
"fallbackUsed": false,
"finishedAt": "2026-09-08T00:00:00.000Z"
}

Cost

The run uses Apify compute time and a Chromium browser. Enabling Apify Proxy can add proxy usage charges according to your Apify plan. Actual cost depends on memory, run duration, page count, retries, and proxy routing; review the run cost shown by Apify for the authoritative amount.

Troubleshooting, API, and Issues

  • BLOCKED_SOURCE, HTTP_401, HTTP_403, HTTP_429, HTTP_451, and BROWSER_LAUNCH_FAILED indicate a bounded access or runtime failure; inspect run logs.
  • NO_PRODUCT_EVIDENCE means the public response was readable but did not expose a supported Product, offer-list, SSR-card, or JSON-LD record.
  • Try a smaller page limit, a respectful requestDelayMs, or a different public category URL. Proxy routing may change availability but is not an access-control bypass.
  • Use the Actor API tab for the run endpoint and input schema. The Dataset API exposes product rows, while the key-value-store API exposes OUTPUT_SUMMARY.
  • Report reproducible Actor problems through the Actor Issues tab with the run URL, sanitized input, and relevant errorCode; do not include credentials or private data.

Use only public pages and information you are authorized to collect. Respect Alibaba's terms, robots guidance, applicable privacy and data-protection laws, rate limits, and any supplier or image rights. Do not use this Actor to collect private account data, bypass login or CAPTCHA controls, or create misleading commercial claims. You are responsible for validating supplier information and for how exported data is used.

Run and validate locally

From this Actor directory:

npm install
npm test
apify validate-schema
apify run --purge --input-file .actor/input.json
npm run validate

npm run validate checks that product rows have canonical Alibaba product URLs, no debugging wrapper fields, safe product-scoped images, and the thumbnail === images[0] invariant. itemCount counts dataset product rows; diagnosticCount and diagnosticsFound count operational issues kept out of the dataset.

Run summaries include the required status, runStatus, and dataStatus fields. status and runStatus are SUCCEEDED when source-backed rows were saved or a run completed cleanly with no matches; they are FAILED only when a real failure occurs before any rows are saved. dataStatus is COMPLETE, PARTIAL, NO_RESULTS, or FAILED. Failure details stay in the run logs; key-value summaries retain counts only.