Alibaba RFQ Scraper
Pricing
from $2.99 / 1,000 rfqs
Alibaba RFQ Scraper
Extracts public buying requests from Alibaba's sourcing RFQ market using embedded page data and optional public detail pages.
Pricing
from $2.99 / 1,000 rfqs
Rating
0.0
(0)
Developer
w3crawler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Share
This Actor collects rich, publicly visible buying requests from Alibaba’s sourcing RFQ pages. It parses the structured window.PAGE_DATA records delivered in the public HTML and can optionally fetch public RFQ detail pages for annex links.
It is read-only. It does not sign in, submit quotations, contact buyers, access private supplier portals, or bypass CAPTCHA/anti-automation controls. When Alibaba blocks or a public request fails, the Actor records an operational issue count in OUTPUT_SUMMARY and logs details; it does not write diagnostic or placeholder dataset rows.
Dataset output
RFQ rows can contain:
rfqId,requestId,subject,description,sourceUrl, anddetailUrl- buyer name, company, country, country code, location, member-since text, and verification flag
- quantity text, normalized numeric quantity, and unit
- requirement category, product type, target price, budget, destination, shipping terms, purchase frequency, and customization text when exposed
- opened-time text/epoch, quote counters, RFQ quality signals, tags, primary image, and image URLs
- optional public PDF/document
annexesfrom detail pages
Instrumentation such as fieldCoverage, dataQuality, record IDs used only for deduplication, request counters, access metadata, and debug status fields is not emitted in dataset rows. Run metrics and operational issue counts are available under OUTPUT_SUMMARY; failure details stay in run logs.
Basic input
{"keywords": ["wireless earbuds"],"maxPages": 2,"maxItems": 50,"sortBy": "newest","includeDetails": true,"includeAnnexes": true}
Use searchUrls when you already have official public list URLs. Explicit URLs take precedence over generated keyword URLs, and each source is paginated independently.
{"searchUrls": ["https://sourcing.alibaba.com/rfq/rfqSearchList.htm?keywords=wireless+earbuds","https://sourcing.alibaba.com/rfq/rfqSearchList.htm?keywords=work+lights"],"startPage": 1,"maxPages": 3,"maxItems": 100,"deduplicate": true}
Filters and sorting
{"keywords": ["private label earbuds"],"buyerCountries": ["US", "United States"],"requiredTags": ["verified"],"minQuantity": 100,"maxQuantity": 10000,"textQuery": "charging case","sortBy": "quantity_desc"}
Supported sortBy values are relevance, newest, quantity_desc, quotes_desc, quality_desc, buyer_country_asc, and subject_asc.
Developer options and proxy
The input schema groups operational controls under Developer options. Values are bounded and validated before requests are made:
requestTimeoutSecs(5–300), with legacy aliastimeoutSecsrequestDelayMs(0–15,000)maxConcurrency(1–5)maxRequestRetries(0–10)maxBytes(1,000–15,000,000)- optional transparent
userAgent
For ordinary proxy routing, use Apify Proxy or public HTTP(S) proxy URLs. Private/local proxy addresses are rejected.
{"keywords": ["work lights"],"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"},"requestDelayMs": 1500,"maxConcurrency": 2,"maxRequestRetries": 3,"requestTimeoutSecs": 45}
Proxy routing is not a stealth or access-control bypass. Challenges remain explicit operational diagnostics outside the dataset.
Dataset example
{"url": "https://sourcing.alibaba.com/rfq/rfqSearchList.htm?keywords=wireless+earbuds&page=1","source": "https://sourcing.alibaba.com","sourceUrl": "https://sourcing.alibaba.com/rfq/rfqSearchList.htm?keywords=wireless+earbuds&page=1","detailUrl": "https://rfq.alibaba.com/rfq/1846209687","rfqId": "1846209687","requestId": "encoded-1846209687","subject": "Bulk wireless earbuds for retail","description": "Need private-label earbuds with charging cases.","buyer": {"name": "Demo Buyer","country": "United States","countryCode": "US"},"quantity": {"value": "500","valueNumber": 500,"unit": "pieces"},"opened": { "relative": "Opened today", "epochMs": 1760000000000 },"quotes": { "leftCount": 4, "hasQuoteEquity": true },"quality": { "starLevel": 4, "starMax": 5 },"imageUrl": "https://img.alibaba.com/photo/earbuds.jpg","tags": ["urgent", "verified"],"hasAnnexes": true,"scrapedAt": "2026-09-07T07:27:49.678Z"}
Operational issue details stay in the run logs, and numeric issue counts are kept in OUTPUT_SUMMARY; diagnostic records are never added to the dataset.
Runs with saved RFQ records and later source/detail/output issues finish as SUCCEEDED with dataStatus: PARTIAL. A readable source with no RFQs or filters that remove all observed RFQs completes with status: SUCCEEDED and dataStatus: NO_RESULTS. A blocked or genuine request/parse failure without saved records is FAILED and exits nonzero.
Offline QA and deployment
The checked-in .actor/input.json uses fixtures/sample.html, so it is reproducible without a network request:
npm installnpm testnpm run validateapify run --input-file .actor/input.json --purge
The offline test suite uses ordered page fixtures or one fixture per source. Live Actor runs use public Alibaba pages through startUrls and do not expose local fixture overrides.
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.