How to Scrape DHgate Listings for a Supplier Comparison
Two DHgate listings can display similar prices while one is quoted per piece and the other per pair. Before choosing a supplier, preserve those units and the minimum order beside the price.
The DHgate Listings Scraper extracts product cards from DHgate search URLs, including prices, minimum orders, seller links, feedback, shipping flags, and coupons. I maintain this Actor on Apify. It supplies a sourcing shortlist; it does not calculate a checkout total or verify supplier quality.

Use a narrow search URL
Browse DHgate and search for a specific product type. Apply the available filters you need, then copy the resulting URL into the Actor. The current input has one field, searchUrls, containing an array of strings. It has no documented keyword field, item cap, or page-limit setting.
That makes the first search important. Start with one URL instead of a batch of broad categories. The example below uses the documented sneakers search path to demonstrate the input shape. For a real sourcing project, replace it with the narrower search you have reviewed.
Open Input on Apify, select JSON, and enter:
{
"searchUrls": [
"https://www.dhgate.com/w/sneakers.html"
]
}
Click Start and watch the dataset and log. Because this Actor does not expose maxItems, the JSON cannot promise a twenty-product test. Check available run-charge controls in Apify before starting if you need a spending ceiling. Do not add unsupported keys and assume they limit collection.
When the run completes, inspect the product URLs and titles before exporting. The documentation supports extraction from search results but does not establish a configurable whole-catalog crawl. Record which search you supplied so a limited page sample is not later presented as the full marketplace.
Understand the card-level fields
This shortened record comes from the published historical sample. Its price and offer conditions should not be treated as current:
{
"itemCode": "989388595",
"price": "US $14.90 ",
"minOrder": "1 Piece",
"feedbackPercent": "94.6%",
"reviewCount": 20,
"recentlySold": null,
"sellerStoreUrl": "https://www.dhgate.com/store/21901295#listing_store-48",
"freeShipping": true,
"coupons": ["$4 off $30+"]
}
Other fields include productId, productName, productDetailUrl, imageUrl, and alt. price is a formatted string, not a numeric amount. Retain that raw value and derive separate amount and currency columns only when you can parse them reliably.
The sample's coupon has a spend threshold. Subtracting $4 from every product would misstate the offer. Similarly, freeShipping: true describes the listing signal captured by the scraper. Confirm the delivery destination and chosen variant before applying it to your buying calculation.

Turn the export into a sourcing worksheet
Export CSV for initial review, or JSON if you want to preserve coupon arrays. Retain itemCode, productId, productName, productDetailUrl, price, minOrder, sellerStoreUrl, feedbackPercent, reviewCount, freeShipping, and coupons. Add your collection date and the input search URL.
Remove duplicate products by their identifiers. For seller grouping, remove tracking fragments from a copy of the store URL so two cards from the same store do not become two suppliers. Keep the original source URL alongside the normalized value.
Separate offers by unit before sorting on price. A “1 Pair” minimum and a “1 Piece” minimum are not interchangeable. Inspect the product page for the particular size, material, color, and pack quantity that your brief requires. Add those confirmed specifications as review columns rather than inferring them from a thumbnail.
Then choose a small set of suppliers for detailed comparison. Record the quoted unit price, minimum quantity, destination-specific shipping, and unresolved terms in separate columns. Calculate a comparable total only when those inputs are confirmed. Keep coupon savings in an optional scenario rather than the baseline cost unless eligibility is clear.
Use feedbackPercent and reviewCount as reasons to inspect the seller, not as a guarantee of product authenticity or manufacturing standards. A null recentlySold value means the sample lacks that signal; it is not zero demand. The useful deliverable is a table of comparable offers with open questions, not an automatic buying recommendation.
Price checks and missing results
Pricing as of September 6, 2026 is $0.002 per product result, effective since August 8. If a run returns fifty products, its product event fees are $0.10. The active event table does not list a separate Actor-start charge. Consult the live pricing and any separately billed account usage before scaling.
If the dataset is empty, open the exact input URL in DHgate and confirm it still represents a populated search. Review the log for access or parsing failures. Increasing the number of URLs does not resolve a broken source page. If fields are missing in otherwise valid rows, retain the blanks and inspect a few product pages to distinguish absent card data from an extraction problem.
For refreshes, save the successful input and date each export. Match on item identifiers, then review apparent price changes against the same variant and quantity. The DHgate Node.js example offers a starting point for repeat collection. The AliExpress and Alibaba guides cover additional marketplaces with different offer structures.
Frequently asked questions
Can I set maxItems or a page limit?
The deployed input schema exposes only searchUrls. It does not document maxItems or pagination controls; begin with one narrowly scoped search URL.
Is the displayed price a landed unit cost?
No. Verify the selected variant, quantity unit, minimum order, shipping destination, and applicable charges before calculating a landed cost.
Does recentlySold prove current sales volume?
No. The field can be null, and a displayed sales signal does not establish the time period or verified transactions needed for a sales-volume estimate.
