DHgate Product & Supplier Scraper
Pricing
Pay per event
DHgate Product & Supplier Scraper
Extract DHgate wholesale listings with prices, MOQ, sales, ratings, supplier IDs, storefronts, images, coupons, and sourcing context.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Turn DHgate wholesale search pages into clean product and supplier records.
Use keywords or public DHgate category/search URLs to collect current listing prices, sales signals, supplier identities, store links, images, coupons, delivery estimates, and collection context.
The Actor is built for recurring sourcing research rather than one-off copy and paste.
- 🔎 Search DHgate by product keyword
- 🗂️ Extract complete category and search pages
- 💵 Normalize displayed USD price ranges
- 📈 Filter by price and sold count
- 🏪 Connect products to supplier storefronts
- 🔁 Follow pagination with a clear safety cap
- 📤 Export results as JSON, CSV, Excel, XML, or RSS
What does the DHgate Product & Supplier Scraper do?
The Actor accepts one or more product searches or DHgate wholesale listing URLs.
For every matching card it saves one structured product record with its supplier attributes.
It handles the repetitive work needed to:
- compare wholesale offers;
- build a candidate product catalog;
- identify active suppliers;
- monitor price and assortment changes;
- find products with visible demand;
- prepare source data for ecommerce workflows.
Version 1 is intentionally listing-first.
It does not promise private account data, individual reviews, option-level inventory, or detail-only fields that are absent from public listing pages.
Who is this DHgate scraper for?
Dropshippers
Discover candidate products, compare price ranges, and prioritize offers with visible sales activity.
Procurement and sourcing teams
Create repeatable supplier-discovery lists with product IDs, seller IDs, storefronts, and source URLs.
Ecommerce catalog builders
Feed product titles, images, pricing, and links into catalog review or enrichment pipelines.
Market analysts
Schedule category snapshots to track assortment, merchandising, and popularity signals over time.
Agencies and data teams
Deliver structured DHgate exports through Apify API, webhooks, datasets, and integrations.
Why use this Actor?
DHgate listing pages contain useful sourcing data, but manual collection is slow and difficult to reproduce.
This Actor adds:
- structured records instead of copied text;
- consistent field names across searches and categories;
- global deduplication by DHgate item code;
- numeric price bounds for filtering and analysis;
- input and page caps for predictable runs;
- bounded anti-bot retries instead of infinite loops;
- source context for traceability;
- Apify scheduling and integrations.
Supported DHgate inputs
You can combine both routes in one run.
Search queries
Enter terms such as:
wireless earbudsphone caseswedding dressesgaming accessories
The Actor builds the corresponding public DHgate wholesale search URL.
Start URLs
Provide public dhgate.com URLs under /wholesale/, for example:
https://www.dhgate.com/wholesale/fashion-bags/c107011.html
Product-detail URLs are rejected because version 1 has a listing/search contract.
Other domains are rejected to prevent accidental off-target crawling.
Input options
| Field | Type | Purpose | Default |
|---|---|---|---|
searchQueries | array | DHgate product keyword searches | wireless earbuds |
startUrls | array | DHgate wholesale category/search URLs | empty |
maxItems | integer | Global unique product cap | 25 |
maxPagesPerSource | integer | Pagination cap per input | 2 |
minPrice | number | Minimum displayed range price | none |
maxPrice | number | Maximum displayed range price | none |
minSold | integer | Minimum visible sales count | none |
proxyConfiguration | object | Apify proxy settings | US residential |
At least one query or URL is required.
minPrice cannot exceed maxPrice.
When a filter is active and a listing lacks that value, the listing is excluded rather than guessed.
Example input
{"searchQueries": ["wireless chargers","phone cases"],"maxItems": 100,"maxPagesPerSource": 5,"maxPrice": 20,"minSold": 50,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
For a cheap first run, keep maxItems at 10 and maxPagesPerSource at 1.
Output data
Each dataset row represents one DHgate product listing.
| Field | Description |
|---|---|
itemCode | Public numeric DHgate item code |
productId | Internal product identifier exposed by the listing |
title | Full product title |
productUrl | Clean product-detail URL |
imageUrl | Main listing image URL |
price | Original displayed price text or range |
priceMin | Numeric lower USD bound |
priceMax | Numeric upper USD bound |
currency | Price currency, normally USD |
unit | Displayed selling unit, when present |
soldCount | Normalized visible sales count |
sellerId | Internal seller identifier |
sellerName | Supplier storefront name |
sellerStoreUrl | Supplier storefront URL |
sellerTier | DHgate seller performance tier when displayed |
deliveryEstimate | Listing delivery text when displayed |
coupons | Current listing coupon labels |
categoryId | Category ID parsed from category URLs |
collectionTitle | Search/category page title |
collectionQuery | Original keyword for keyword inputs |
collectionType | searchQuery or startUrl |
page | Result page number |
sourceUrl | Exact page used for extraction |
scrapedAt | ISO extraction timestamp |
Optional fields are omitted when DHgate does not display them.
The Actor does not invent missing values or write placeholder null values.
Example output
{"itemCode": "1113917241","productId": "8aaa03f79f279832019f3b91f82b34f5","title": "Solid Color Jelly Bag Fashionable Transparent Large Capacity Single Shoulder Handbag","productUrl": "https://www.dhgate.com/product/solid-color-jelly-bag-fashionable-transparent/1113917241.html","imageUrl": "https://img4.dhresource.com/webp/m/300x300/f3/albu/bw/o/07/902e9f44-d95a-4cf0-b488-1522bb911fcd.jpeg","price": "US $12.52 - 17.90 / Piece","priceMin": 12.52,"priceMax": 17.9,"currency": "USD","unit": "Piece","soldCount": 12,"sellerId": "8aaaa325835a19ba01835a66fb480e8a","sellerName": "worldcup_official","sellerStoreUrl": "https://www.dhgate.com/store/top-selling/21835891.html","sellerTier": 3,"categoryId": "107011","collectionTitle": "Wholesale Fashion Bags","collectionType": "startUrl","page": 1,"sourceUrl": "https://www.dhgate.com/wholesale/fashion-bags/c107011.html","scrapedAt": "2026-07-23T00:00:00.000Z"}
Live values change as DHgate updates its marketplace.
Supplier sourcing workflow
A practical sourcing workflow is:
- Search several terms that describe the same product niche.
- Set a realistic
maxPricefor the target unit economics. - Use
minSoldto focus on listings with visible demand. - Export the Supplier analysis dataset view.
- Group records by
sellerIdorsellerStoreUrl. - Review the supplier storefront and product detail before ordering.
- Schedule the same input to track changes.
Seller tier and sold count are marketplace signals, not guarantees.
Always complete your own supplier verification and sample-order process.
How pagination and deduplication work
The Actor reads the next-page URL rendered by DHgate.
It stops when it reaches:
maxItemsacross the whole run;maxPagesPerSourcefor the current input;- the final available page;
- or the end of all inputs.
If the same item appears in multiple searches, it is saved only once per run.
The first observed copy retains the collection context that discovered it.
Filters and boundary behavior
minPrice applies to the lower bound of the displayed range.
maxPrice applies to the upper bound.
This means a range of $10 - $30 does not pass maxPrice: 20.
minSold supports labels such as 265 Sold and 1.8K+ Sold.
If DHgate omits a sold count, the row does not pass an active minSold filter.
These rules make automated sourcing filters conservative and reproducible.
Reliability and anti-blocking
DHgate uses Akamai anti-bot protection.
The Actor therefore defaults to:
- US residential proxying;
- browser-like request headers;
- sticky sessions for each request attempt;
- sequential, low-concurrency collection;
- a maximum of three attempts per page;
- session rotation only after a blocked or malformed response.
A fully blocked page fails clearly instead of silently producing an empty success.
A successfully fetched search with no matching products remains a valid empty result.
How much does it cost to scrape DHgate products?
The Actor uses pay-per-event pricing.
A small start fee covers run initialization, followed by a charge for each saved product listing.
The exact active prices appear in the Apify Console before you start a run and may include subscription-tier discounts.
Control total cost with:
- a low
maxItemsvalue; - one page for exploratory runs;
- focused keywords;
- strict price and popularity filters;
- Apify's maximum total charge setting.
Proxy and compute usage are covered by the Actor's pricing model when run from Apify Store.
Scheduling a DHgate price monitor
Apify schedules can run the same input hourly, daily, weekly, or monthly.
For a lightweight monitor:
- Save the Actor input as a task.
- Keep keywords and filter values stable.
- Add a daily or weekly schedule.
- Send completed datasets to a webhook or integration.
- Compare records by
itemCode. - Alert on changes to
priceMin,priceMax, orsoldCount.
Use scrapedAt and sourceUrl for auditability.
Export formats
The default dataset supports:
- JSON
- JSONL
- CSV
- Excel
- XML
- RSS
- HTML table
Use the Overview view for product research.
Use the Supplier analysis view for supplier grouping and procurement review.
Integrations
Google Sheets
Send each completed dataset to a sourcing workbook for review and assignment.
Airtable
Create a product-candidate base keyed by itemCode, with supplier records linked by sellerId.
Make and Zapier
Trigger enrichment, approval, or catalog workflows after each scheduled run.
Webhooks
Notify your application when a run succeeds or fails, then fetch the dataset through the API.
Amazon S3 or Google Drive
Archive periodic category snapshots for historical assortment analysis.
Use with the Apify API
Replace APIFY_TOKEN with your token.
cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~dhgate-product-supplier-scraper/runs?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries":["wireless earbuds"],"maxItems":25,"maxPagesPerSource":2}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/dhgate-product-supplier-scraper').call({searchQueries: ['wireless earbuds'],maxItems: 25,maxPagesPerSource: 2,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient('APIFY_TOKEN')run = client.actor('automation-lab/dhgate-product-supplier-scraper').call(run_input={'searchQueries': ['wireless earbuds'],'maxItems': 25,'maxPagesPerSource': 2,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with Apify MCP
Apify MCP lets Claude Code, Claude Desktop, Cursor, VS Code, and other MCP clients call the Actor as a tool.
Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/dhgate-product-supplier-scraper"
Claude Desktop, Cursor, or VS Code
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/dhgate-product-supplier-scraper"}}}
Example prompts:
- “Find 30 DHgate wireless charger listings under $20 and rank them by sold count.”
- “Extract the first two pages of this DHgate category and group products by supplier.”
- “Run my saved DHgate sourcing task and summarize suppliers with seller tier 4 or 5.”
Tips for better results
- Begin with one focused query and 10 items.
- Prefer marketplace terminology used by DHgate sellers.
- Split unrelated product niches into separate tasks.
- Keep residential proxying enabled.
- Use category URLs when you need repeatable assortment snapshots.
- Use query input when you need broad discovery.
- Compare suppliers by stable seller IDs, not only display names.
- Treat coupons and delivery estimates as time-sensitive.
- Review product details before purchasing or republishing data.
Troubleshooting
Why did my run return no products?
Your filters may be stricter than the current listings.
Remove minSold, widen the price range, and test one page.
A niche query may also have no matching public listings.
Why was my URL rejected?
Version 1 accepts only public DHgate listing URLs under /wholesale/.
Use a category or search URL rather than a product, cart, account, or external URL.
Why did a run fail after retries?
DHgate may have blocked all three bounded residential sessions or changed its listing markup.
Retry later with the default proxy settings and check the run log for the exact page and HTTP response shape.
Why is a supplier field missing?
DHgate does not display every supplier attribute on every listing card.
Optional fields are omitted rather than guessed.
Data quality notes
Prices are the ranges displayed to an anonymous US visitor at extraction time.
They may vary by quantity, destination, currency, promotion, login state, or product option.
Sold counts may be rounded, for example 1.8K+.
Seller tier is a DHgate performance indicator, not an independent audit.
Coupons and delivery estimates can expire quickly.
Use product and seller IDs as stable join keys wherever possible.
Is scraping DHgate legal?
This Actor collects publicly visible marketplace listing data.
You are responsible for using it lawfully and in accordance with applicable contracts, privacy rules, intellectual-property rules, and local regulations.
Do not use the Actor to access accounts, evade authorization, collect private data, or overload DHgate.
Use reasonable limits and a legitimate sourcing, research, or interoperability purpose.
When in doubt, consult qualified legal counsel.
Security and privacy
No DHgate login is required.
The Actor does not request passwords, cookies, private API credentials, or payment information.
Input and output are stored in your Apify account according to your platform retention settings.
Avoid placing confidential information inside search terms or URLs.
FAQ
Does it scrape individual product reviews?
No. Version 1 focuses on search and category listings.
Does it collect MOQ?
It returns the listing's displayed selling unit. It does not claim option-level MOQ when the card does not expose it.
Can it scrape several keywords in one run?
Yes. Add multiple values to searchQueries; maxItems remains a global cap.
Can I use direct DHgate URLs?
Yes, for category or search pages under /wholesale/.
Does it remove duplicates?
Yes. Item codes are deduplicated across every query and URL in the run.
Can I monitor prices?
Yes. Save a task, schedule it, and compare numeric price fields by itemCode.
Is a proxy required?
Residential proxying is strongly recommended and enabled by default because plain HTTP is commonly blocked.
Related scrapers
Build a broader sourcing workflow with other Automation Lab actors:
Check each Store page for its current scope and input contract.
Support
If a valid DHgate wholesale URL fails consistently, open an Actor issue with:
- the exact input;
- the run ID;
- the expected result;
- and the observed behavior.
Do not include account credentials or private data.
We use reproducible examples to distinguish source changes, filter behavior, and transient blocking.