Alibaba Products Scraper avatar

Alibaba Products Scraper

Pricing

from $2.99 / 1,000 products

Go to Apify Store
Alibaba Products Scraper

Alibaba Products Scraper

Extract public Alibaba wholesale product listings, pricing, MOQ, and supplier signals for sourcing research.

Pricing

from $2.99 / 1,000 products

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

What does this Actor do?

This Actor collects product observations from public Alibaba.com product search, category, showroom, and product-detail pages. It combines public JSON-LD, Alibaba's embedded offer data, visible product cards, and browser-rendered pages when JavaScript is required.

It is useful for wholesale product discovery, supplier shortlisting, price and MOQ comparison, sourcing research, and building a searchable product dataset. You can process several queries or public source URLs, follow ordered pagination, deduplicate repeated products, filter by public sourcing signals, sort the result, and keep product-scoped media and supplier context.

Scope and access boundary

The Actor reads only public pages. It does not log in, use private supplier portals, call authenticated APIs, solve CAPTCHAs, spoof browser fingerprints, or bypass access controls. If Alibaba returns a challenge, robots restriction, or other access boundary, the Actor fails closed and records a numeric issue count in OUTPUT_SUMMARY with details in logs; it does not add an error or placeholder row to the Dataset.

Generated searches use Alibaba's public country-search view (/countrysearch/CN/<query>.html), which currently exposes public listing payloads without requiring the blocked trade-search shell. Explicit public trade-search URLs remain accepted, but the Actor fails closed if Alibaba challenges them. The parser accepts JSON-LD, Alibaba embedded offer payloads, and visible product-card evidence; fields are omitted when the public page does not expose them.

Run in Console

Console steps

  1. Open the Alibaba Products Scraper Store page.
  2. Click Try for free or Start and open the Input tab.
  3. Paste one of the JSON inputs below, or fill the form fields.
  4. Click Start and wait for the run to finish.
  5. Open the Dataset tab for product rows. Open the Key-Value Store records OUTPUT_SUMMARY and SOURCE_METADATA for run status, issue counts, and pagination metadata.

Cost

There is no hard-coded price in this repository. Your total cost is determined by the Apify compute, memory, storage, and optional proxy usage shown in your account and run settings. Review the Apify pricing page before a large run. Public-page delays, pagination, browser rendering, and proxy routing can increase runtime or usage.

Input

{
"queries": ["wireless earbuds", "rechargeable led work light"],
"maxPages": 2,
"maxProducts": 100,
"sortBy": "relevance"
}

Multiple public sources

{
"sourceUrls": [
{
"url": "https://www.alibaba.com/countrysearch/CN/wireless-earbuds.html"
},
{
"url": "https://www.alibaba.com/countrysearch/CN/led-work-light.html"
}
],
"maxPages": 3,
"deduplicate": true,
"maxProducts": 250
}

Filters and sorting

{
"queries": ["wireless earbuds"],
"minPrice": 20,
"maxPrice": 800,
"minMoq": 10,
"maxMoq": 500,
"supplierCountries": ["CN", "China"],
"minProductRating": 4.5,
"minReviewCount": 10,
"minSupplierYears": 3,
"requiredBadges": ["certified"],
"tradeAssurance": true,
"verifiedSupplier": true,
"sortBy": "rating_desc"
}

Supported sortBy values are relevance, price_asc, price_desc, moq_asc, moq_desc, rating_desc, reviews_desc, sold_desc, supplier_years_desc, supplier_name_asc, and title_asc.

Advanced and proxy options

{
"queries": ["wireless earbuds"],
"renderJavaScript": true,
"requestDelayMs": 1000,
"maxConcurrency": 2,
"maxRequestRetries": 3,
"requestTimeoutSecs": 60,
"browserWaitMs": 1500,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Proxy routing is optional. It changes the network route only; it is not a CAPTCHA, login, or access-control bypass. Use the standard Apify Proxy setting unless you have a documented reason to supply a public custom proxy URL. Respect Alibaba's terms and robots policy.

Local QA inputs

The fixture fields are for deterministic local validation and are rejected in Cloud runs. They never replace a public Alibaba source in a production run.

{
"sourceUrls": [
{
"url": "http://127.0.0.1:8771/products.html"
}
],
"renderJavaScript": false,
"requestDelayMs": 0,
"maxPages": 2,
"maxProducts": 10
}

Complete input reference

All supported keys are listed below. Compatibility aliases normalize to the canonical key shown in the description.

KeyType and purpose
queriesArray of up to 25 search strings. Defaults to wireless earbuds.
searchQueryPrimary query string used as source context.
sourceUrlsArray of public Alibaba result/detail URLs.
startUrls, searchUrls, urlsCompatibility aliases for sourceUrls.
urlCompatibility alias for one source URL.
startPageFirst page number, 1–1000; default 1.
start_pageCompatibility alias for startPage.
maxPagesMaximum pages per source, 1–100; default 2.
max_pagesCompatibility alias for maxPages.
maxProductsMaximum product rows after deduplication, filters, and sorting, 1–5000; default 300.
max_products, maxItems, max_itemsCompatibility aliases for maxProducts.
sortByrelevance, price_asc, price_desc, moq_asc, moq_desc, rating_desc, reviews_desc, sold_desc, supplier_years_desc, supplier_name_asc, or title_asc.
textQueryCase-insensitive text filter over observed title, supplier, location, category, badge, promotion, and description text.
supplierCountriesArray of country or region text filters.
countriesCompatibility alias for supplierCountries.
currencyThree-letter currency filter such as USD, EUR, INR, or CNY.
minPrice, price_minMinimum observed price-range threshold and alias.
maxPrice, price_maxMaximum observed price-range threshold and alias.
minMoq, moqMin, moq_minMinimum observed MOQ threshold and aliases.
maxMoq, moqMax, moq_maxMaximum observed MOQ threshold and aliases.
minSupplierRatingMinimum observed supplier rating from 0 to 5.
minProductRatingMinimum observed product rating from 0 to 5.
minReviewCountMinimum public review count.
minSoldCountMinimum public sold/order count.
minSupplierYearsMinimum observed supplier years.
minReorderRatePercentMinimum observed reorder rate from 0 to 100.
requiredBadgesArray of badge or selling-point fragments; every requested value must match.
requiredCertificationsArray of certification fragments; every requested value must match.
tradeAssurance, trade_assuranceKeep only public Trade Assurance evidence and alias.
verifiedSupplier, verified_supplierKeep only public verified-supplier evidence and alias.
alibabaGuaranteed, alibaba_guaranteedKeep only public Alibaba Guaranteed evidence and alias.
certifiedOnlyKeep only publicly certified products.
deduplicateMerge repeated product IDs or canonical URLs; default true.
includeMediaInclude product-scoped public CDN media; default true.
includeAttributesInclude attributes, variations, and specifications; default true.
includeSupplierDetailsInclude supplier identity, profile, country, ratings, badges, and trust signals; default true.
renderJavaScript, useBrowserUse Chromium for dynamic pages, or its compatibility alias; default true.
requestDelayMs, pageDelayMsDelay before each public request in milliseconds, 0–15000.
maxConcurrency, concurrencyMaximum independent sources processed at once, 1–5.
maxRequestRetries, maxRetriesMaximum retries for transient failures, 0–10.
requestTimeoutSecs, timeoutSecsPer-request timeout in seconds, 15–300.
requestTimeoutMsMillisecond compatibility alias for the timeout.
maxResponseBytes, maxBytesSafety cap for downloaded/rendered HTML, 100000–50000000 bytes.
browserWaitMs, renderWaitMsAdditional browser wait after DOM content loads, 0–10000 milliseconds.
proxyConfigurationObject with useApifyProxy, optional apifyProxyGroups, apifyProxyCountry, or public proxyUrls. Proxying does not bypass access controls.
userAgentOptional transparent User-Agent override for public requests. Do not use it to impersonate a browser or evade controls.
localeBrowser locale such as en-US; default en-US.

Output dataset

Record families

The Dataset contains source-backed product observations only. Product values are observed facts, not inferred guarantees. Optional values are omitted when Alibaba does not expose them; blocked pages, extraction failures, and successful empty results do not create Dataset rows.

Product fields cover identity and provenance (title, name, productId, productUrl, url, sourceType, sourceUrl, pageUrl, pageNum, position, query), commercial values (price, priceMin, priceMax, currency, priceFormatted, moq, minimumOrderQuantity, minimumOrderUnit), supplier values (supplierName, companyName, supplierProfileUrl, supplierCountry, supplierLocation, supplierYears, yearsAsGoldSupplier, supplierRating, supplierServiceScore), public demand/trust signals, product media, attributes, variations, specifications, delivery text, promotions, selling points, badges, category, description, and scrapedAt.

Images are restricted to product-scoped public Alibaba CDN assets. Country flags, UI icons, logos, and unrelated assets are excluded.

Rich product example

{
"title": "Compact Wireless Earbuds",
"name": "Compact Wireless Earbuds",
"productId": "1601234567890",
"productUrl": "https://www.alibaba.com/product-detail/Compact-Wireless-Earbuds_1601234567890.html",
"url": "https://www.alibaba.com/product-detail/Compact-Wireless-Earbuds_1601234567890.html",
"sourceType": "alibaba_product_search",
"sourceUrl": "https://www.alibaba.com/countrysearch/CN/wireless-earbuds.html",
"pageUrl": "https://www.alibaba.com/countrysearch/CN/wireless-earbuds.html",
"pageNum": 1,
"position": 1,
"query": "wireless earbuds",
"price": 100,
"priceMin": 100,
"priceMax": 120,
"currency": "INR",
"priceFormatted": "₹100.00-120.00",
"moq": 10,
"minimumOrderQuantity": 10,
"minimumOrderUnit": "pieces",
"supplierName": "Compact Audio Co., Ltd.",
"companyName": "Compact Audio Co., Ltd.",
"supplierProfileUrl": "https://compact.en.alibaba.com/company_profile.html",
"supplierCountry": "CN",
"supplierYears": 8,
"productRating": 4.8,
"reviewCount": 20,
"soldCount": 5,
"reorderRatePercent": 35,
"mainImage": "https://s.alicdn.com/@sc04/kf/compact-main.jpg_300x300.jpg",
"images": [
"https://s.alicdn.com/@sc04/kf/compact-main.jpg_300x300.jpg",
"https://s.alicdn.com/@sc04/kf/compact-side.jpg_300x300.jpg"
],
"imageCount": 2,
"badges": ["Reorder rate 35%", "certified"],
"badgeTexts": ["Reorder rate 35%", "certified"],
"isCertified": true,
"isVerifiedSupplier": true,
"isAd": true,
"canAddToCart": true,
"canChatNow": true,
"scrapedAt": "2026-09-08T10:00:00.000Z"
}

Fallback product example

When only the product identity and public link are available, the Actor emits a valid smaller product row and omits unavailable commercial, supplier, and media fields.

{
"title": "USB-C Earbuds",
"name": "USB-C Earbuds",
"productUrl": "https://www.alibaba.com/product-detail/USB-C-Earbuds_1601234567891.html",
"url": "https://www.alibaba.com/product-detail/USB-C-Earbuds_1601234567891.html",
"sourceType": "alibaba_product_search",
"sourceUrl": "https://www.alibaba.com/countrysearch/CN/wireless-earbuds.html",
"pageUrl": "https://www.alibaba.com/countrysearch/CN/wireless-earbuds.html",
"pageNum": 1,
"position": 2,
"query": "wireless earbuds",
"scrapedAt": "2026-09-08T10:00:00.000Z"
}

Operational issue counts

When a source request fails, OUTPUT_SUMMARY keeps the numeric issue count and the run logs contain failure details. Operational issues are never written as Dataset rows or stored as detailed key-value records.

Run summary example

The OUTPUT_SUMMARY and compatibility OUTPUT records contain run metrics, not product rows:

{
"status": "SUCCEEDED",
"runStatus": "SUCCEEDED",
"dataStatus": "PARTIAL",
"recordCount": 24,
"diagnosticItems": 0,
"diagnosticCount": 1,
"recordsEmitted": 24,
"requests": 6,
"retries": 1,
"successfulRequests": 5,
"failedRequests": 1,
"sourcesProcessed": 2,
"pagesProcessed": 6,
"candidatesFound": 31,
"uniqueProducts": 27,
"filteredOutCount": 3,
"rejectedInputCount": 0,
"queries": [
"wireless earbuds",
"led work light"
],
"maxProducts": 100,
"maxPages": 3,
"sortBy": "relevance",
"deduplicate": true,
"renderJavaScript": true,
"maxConcurrency": 2,
"proxyEnabled": false,
"fixtureMode": false,
"completedAt": "2026-09-08T10:00:00.000Z"
}

Key-Value Store artifacts

  • OUTPUT_SUMMARY: run status and counters.
  • OUTPUT: compatibility copy of the summary.
  • SOURCE_METADATA: per-source request, retry, failure, and page metadata.

The product Dataset intentionally excludes Actor instrumentation, HTTP internals, transport metadata, debugging wrappers, and run counters.

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

Troubleshooting

The Dataset contains no products

Check OUTPUT_SUMMARY, SOURCE_METADATA, and the run logs. ACCESS_BOUNDARY, HTTP 401/403/429/451, CAPTCHA/challenge text, off-host redirects, and robots/access restrictions are fail-closed outcomes. When source-backed products were parsed but filters remove all of them, the run completes with status: SUCCEEDED and dataStatus: NO_RESULTS. If no product evidence can be parsed, the run reports an extraction failure; a request or extraction failure without saved products fails the run. Reduce request volume, verify that the source is public, and follow Alibaba's terms; do not add login or bypass logic.

The run returns no products

Check that the query or sourceUrls points to a public Alibaba result/detail route. Remove restrictive filters, increase maxPages, or inspect SOURCE_METADATA and the run logs to distinguish a valid empty result from an extraction failure.

A field is missing

Missing values mean the public page did not expose that field in the supported JSON-LD, embedded offer, or visible-card structures. The Actor does not fabricate values. Use includeMedia, includeAttributes, and includeSupplierDetails to control optional output groups.

A local fixture is rejected

Local parser tests use checked-in HTML fixtures. Public Actor inputs use Alibaba URLs and do not expose fixture overrides; Cloud runs always request the public source.

Browser rendering is unavailable

Set renderJavaScript to false only when the source is static HTML or for local fixtures. Browser startup failures are reported in logs and the Key-Value Store; no access-control bypass is attempted.

API and support

The Apify API documentation describes programmatic runs and Dataset downloads. The Actor API identifier is devcake~alibaba-products-scraper.

curl -X POST "https://api.apify.com/v2/acts/devcake~alibaba-products-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries":["wireless earbuds"],"maxProducts":25}'

For support or an issue report, use the Actor Store page and include the run ID, input, status, and relevant failure details from run logs. Do not include credentials or private supplier data.

This Actor requests public Alibaba pages and stores the resulting observations in your Apify Dataset and Key-Value Store. It does not request or store Alibaba credentials. You are responsible for using the Actor lawfully, respecting Alibaba's terms, robots directives, applicable privacy rules, and any rights attached to the collected content.

This Actor is an independent community tool and is not affiliated with, endorsed by, or sponsored by Alibaba.com or Alibaba Group. Product, supplier, price, rating, and availability values are public observations at scrape time and are not guarantees.

Local validation

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

The repository's QA inputs exercise default fields, pagination, multiple sources, filters and sorting, media opt-out, developer options, successful empty output, and fail-closed errors without requiring a live Alibaba request. Issue counts stay in the run summary, and details stay in run logs.

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.