DHgate API & Scraper
DHgate is a cross-border marketplace where Chinese sellers sell to buyers worldwide, often in bulk, with the unit price falling as the order quantity rises.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
This API reads it as JSON. `search` takes words with DHgate's own filters (category, price range, free shipping, maximum minimum-order, on sale, 4 stars and up, US warehouse, destination country) and six sort orders, and returns per product: item id, title, price range, the price before discount and the discount, minimum order, units sold, rating and review count, a sponsored flag and the seller's store. `product` returns one listing in full: the quantity price ladder, minimum and maximum order, whether it is sold per unit or per lot, every variant with its stock, item specifics and description, package size and weight, the shipping cost and delivery days to the country you choose, the seller with positive feedback, transactions, on-time delivery rate and company details, seller coupons and the review breakdown. `sku_price` returns the ladder of one variant, `reviews` the buyer reviews page by page, `store` a seller's catalogue.
What a DHgate field actually contains
Fields that read differently from how they look. Every row was measured against live DHgate pages on 2026-10-14.
| Field | What it holds |
|---|---|
| item_id | DHgate's item code, the number at the end of a product address (…/1037834063.html). Pass it unchanged to product, sku_price and reviews; a product URL works too. Search to product returned the same id on 16 of 16 rows. |
| price_min, price_max (search) | The range DHgate prints on the search card. The low end is the price per unit at the largest order-quantity tier, not the price of one piece: 146.08 on a card whose single-piece price is 176.29. On 15 of 15 products the card's low end equalled the cheapest tier in product's price_tiers. |
| price_tiers | The quantity ladder: min_qty, max_qty (null = and up), the current price and the list price before the promotion. It belongs to one variant, named in price_tiers_sku_id; other variants can cost more, and sku_price returns their ladder. The ladder matched DHgate's own variant-price endpoint on 12 of 12 products. |
| priced_per, units_per_lot | Some items are sold in lots. When priced_per is lot, every price and quantity on that product counts lots of units_per_lot units: one LED strip listing costs 4.24 per lot of 5 meters with a minimum order of 30 lots, which the search card shows as 0.85 per meter and 150 meters. min_order_units and price_per_unit give the per-unit view. |
| shipping | Cost, free flag, method and delivery days to the ship_to country you pass (default US). DHgate prices shipping by destination: one phone shipped free to Germany, the UK, France and Australia and for US $10.31 to the US on the same day. The product prices themselves did not change by country. |
| rating.default_review_count, is_platform_default | DHgate gives a 5-star review in the buyer's name when the buyer does not review in time. On one phone 91 of 106 reviews were these defaults. reviews flags each one. |
| rating.no_purchase_review_count | Reviews DHgate counts that are not tied to a purchase on the listing: 3,519 of 3,527 on one smartwatch. The search card's review_count can be far lower than the product's (8 against 3,527) because it does not include them. |
| sponsored | True on paid placements. On best-match pages 10 of 50 rows are sponsored; filtered pages and other sort orders carry none. |
All prices are US dollars. Search totals are DHgate's own and depend on the sort: best match counts loosely related items too (66,408 for "phone case"), every other sort counts 47,152. When nothing matches, DHgate shows recommended look-alikes instead; this API returns no results, sets no_match and puts those rows in recommended_instead.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/dhgate/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "phone case",
"sort": "best_selling"
}
}{
"ok": true,
"meta": {
"api": "dhgate",
"endpoint": "search",
"mode": "live",
"latency_ms": 2159.2,
"record_count": 41,
"bytes": 614675,
"cache_hit": false,
"total": 47559,
"currency": "USD",
"ship_to": "US",
"sponsored_rows": 0,
"pagination": {
"page": 1,
"has_more": true,
"max_page": 101
},
"upstream_requests": 2,
"edge_refusals_retried": 1,
"charged_credits": 3,
"version": "0.1.0",
"request_id": "1e3afd4f4f194c13",
"queue_ms": 1.1,
"fetched_at": "2026-10-14T18:57:21.786Z"
},
"data": {
"query": {
"query": "phone case",
"ship_to": "US",
"sort": "best_selling",
"page": 1
},
"total": 47559,
"page": 1,
"has_more": true,
"results": [
{
"item_id": "404047032",
"title": "Transparent Shockproof Acrylic Hybrid Armor Hard Phone Cases for iPhone 17 16 16E 15 14 13 12 11 Pro XS Max XR 8 7 6 Plus Samsung S25 S24 S23 S22 S21 S20 Note20 Ultra",
"url": "https://www.dhgate.com/product/transparent-shockproof-acrylic-hybrid-armor/404047032.html",
"image": "https://img4.dhresource.com/webp/m/300x300/f3/albu/bw/g/12/bd6c2f6b-fc57-4188-8bd6-7b309d23ae0f.jpg",
"category_id": "105005002",
"currency": "USD",
"price_min": 0.89,
"price_max": 1.61,
"price_text": "US $0.89 - 1.61",
"price_before_discount_min": 0.89,
"price_before_discount_max": 1.61,
"discount_pct": null,
"promotion_ends": null,
"unit": "Piece",
"min_order": 100,
"min_order_text": "100 Pieces",
"free_shipping": true,
"sold_count": 1,
"rating": 5,
"review_count": 1478,
"positive_review_pct": 100,
"delivery_days_promise": null,
"us_warehouse": false,
"seller_coupons": null,
"sponsored": false,
"seller": {
"store_name": "ocasen",
"store_id": "20750510",
"supplier_id": "ff8080815d2b7f6d015d698b6146376b",
"store_url": "https://www.dhgate.com/store/20750510",
"positive_feedback_pct": 100,
"seller_tier": "4",
"years_on_dhgate": 6
}
},
{
"item_id": "378631103",
"title": "Phone Cases For IPhone 17 Air 16 15 14 13 12 Mini 11 Pro MAX XR XS Shockproof TPU Case Clear Samsung Galaxy S20 S10 Plus S9 Note 20 Soft Cover",
"url": "https://www.dhgate.com/product/iphone-6s-plus-case-clear-tpu-0-3mm-ultra/378631103.html",
"image": "https://www.dhresource.com/webp/m/300x300/f2/albu/g9/M01/B8/20/rBVaWF0Vy_2AQWgjAAcVJdoh7rc577.jpg",
"category_id": "105005002",
"currency": "USD",
"price_min": 0.32,
"price_max": 0.55,
"price_text": "US $0.32 - 0.55",
"price_before_discount_min": 0.32,
"price_before_discount_max": 0.55,
"discount_pct": null,
"promotion_ends": null,
"unit": "Piece",
"min_order": 100,
"min_order_text": "100 Pieces",
"free_shipping": true,
"sold_count": 1,
"rating": 4.9,
"review_count": 744,
"positive_review_pct": 100,
"delivery_days_promise": null,
"us_warehouse": false,
"seller_coupons": null,
"sponsored": false,
"seller": {
"store_name": "acespower",
"store_id": "20191301",
"supplier_id": "ff80808151d94d430152772dde1e2d0d",
"store_url": "https://www.dhgate.com/store/20191301",
"positive_feedback_pct": 100,
"seller_tier": "4",
"years_on_dhgate": 9
}
},
{
"item_id": "407409795",
"title": "Carbon Fiber Phone Cases For iPhone 14 13 11 12 Pro Mini X Xr Xs Max 6 6S 7 8 Plus Cover ForSamsung S21 S20 Ultra S10 S9 S8 Note 20 10 9",
"url": "https://www.dhgate.com/product/carbon-fiber-case-for-iphone-x-6-6s-7-8-plus/407409795.html",
"image": "https://www.dhresource.com/webp/m/300x300/f2/albu/g8/M00/5B/D9/rBVaV17R1YSADfqBAAG0u8eD_RU771.jpg",
"category_id": "105005002",
"currency": "USD",
"price_min": 1.98,
"price_max": 5.01,
"price_text": "US $1.98 - 5.01",
"price_before_discount_min": 1.98,
"price_before_discount_max": 5.01,
"discount_pct": null,
"promotion_ends": null,
"unit": "Piece",
"min_order": 20,
"min_order_text": "20 Pieces",
"free_shipping": true,
"sold_count": 1,
"rating": 5,
"review_count": 882,
"positive_review_pct": 100,
"delivery_days_promise": 15,
"us_warehouse": false,
"seller_coupons": null,
"sponsored": false,
"seller": {
"store_name": "stomern",
"store_id": "20908578",
"supplier_id": "ff8080815faf295f015fccf76003277d",
"store_url": "https://www.dhgate.com/store/20908578",
"positive_feedback_pct": 100,
"seller_tier": "4",
"years_on_dhgate": 2
}
}
],
"sponsored_count": 0,
"no_match": false,
"recommended_instead": null,
"category_facets": [
{
"category_id": "105",
"name": "Cell Phones & Accessories",
"count": 47559,
"subcategories": [
{
"category_id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
}
]
}
],
"ship_from_options": {
"us": "United States",
"cn": "China"
}
}
}What the DHgate API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search DHgate products by keyword with the source's own filters: category, price range, free shipping, sold per piece, maximum MOQ, on-sale only, 4-star+ rated, ships-from country, destination country, and 6 sort orders. Each row: item id, title, URL, image, price range (the low end is the bulk-tier price), pre-discount range, discount %, unit, minimum order, free-shipping flag, units sold, product rating and review count, sponsored flag, and the seller (store name, store id, positive feedback %). Plus the source's total and category facets. | Pricing teams call search to search DHgate products by keyword with the source's own filters. | query, category, min_price, max_price, free_shipping, ... |
| product | Full DHgate product by item_id or URL: title, category path, images and video, price range and pre-discount range, the quantity price ladder (price per unit at each order-quantity tier), promotion, unit and units per lot, minimum and maximum order, units sold, total stock and stock by warehouse country, variant attributes and every SKU with its stock, item specifics, highlights, full description text, package size and weight, shipping to `ship_to` (cost, free flag, method, delivery days, processing days), the seller (store, positive feedback %, transactions, followers, on-time delivery rate, company name, year established, employees), seller coupons and the review breakdown (average, count, stars, platform-default reviews, AI summary). | Marketplace operators call product to get full DHgate product by item_id or URL. | item_id, url, ship_to |
| sku_price | The quantity price ladder of ONE variant (SKU) of a DHgate product: price per unit at each order-quantity tier, current and before discount. Use a `sku_id` from `product` -> variants[]. The ladder in `product` is the default variant's; other variants can be priced differently. | Catalog enrichment teams call sku_price to get the quantity price ladder of ONE variant (SKU) of a DHgate product. | item_id, sku_id, ship_to |
| reviews | Buyer reviews of a DHgate product, 10 per page: rating, text, date, buyer nickname (as DHgate masks it), buyer country and level, the variant bought, photos, helpful count, the seller's reply, and whether it is a platform-default 5-star review. | Retail analysts call reviews to get buyer reviews of a DHgate product, 10 per page. | item_id, sort, with_photos, page |
| store | A DHgate seller's store: store name, positive feedback %, transactions, seller level, DHgate's service scores, and the store's product catalogue, 24 per page (item id, title, URL, image, price range, discount %, deal label, free-shipping flag, units sold). Use `store_id` from any search row or product seller block. | Pricing teams call store to get a DHgate seller's store. | store_id, page |
Call search from your stack
curl -X POST https://api.reefapi.com/dhgate/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"phone case","sort":"best_selling"}'import requests
r = requests.post(
"https://api.reefapi.com/dhgate/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "phone case",
"sort": "best_selling"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/dhgate/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "phone case",
"sort": "best_selling"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.dhgate.search with {"query":"phone case","sort":"best_selling"}.Who uses this API and why
- Find the order quantity at which a supplier's unit price drops enough for your margin, from the quantity price ladder.
- Compare dropshipping costs per destination: product price plus shipping cost and delivery days to each market you sell in.
- Shortlist suppliers by positive feedback, transactions, on-time delivery rate and years on DHgate before ordering samples.
- Spot inflated ratings by reading how many reviews are platform defaults or not tied to a purchase.
- Track a competitor's DHgate store catalogue and discounts page by page.
Questions developers ask before integrating
Do I need a DHgate account?
No. Everything is read logged out, and you call reefapi.com from anywhere.
How do I get the price for 100 pieces?
Call product and read price_tiers: find the tier whose min_qty and max_qty include 100. For another variant, call sku_price with its sku_id from product's variants.
Is the shipping cost for my country?
Pass ship_to with a two-letter code (US, DE, GB, AU …). Without it the API uses US. If DHgate offers no shipping to that country for the item, shipping is null and a warning says so.
Which search filters are there?
Category, price range, free shipping, sold per piece, maximum minimum-order, on sale, 4 stars and up, ships from the US warehouse, destination country. Each was checked against the unfiltered count in the same run: 66,408 → 1-5 USD 5,484, free shipping 32,339, on sale 20,918, 4 stars and up 5,251, minimum order up to 10 61,774, US warehouse 115, category 105 56,529.
How deep can I page?
40 products per page (50 on best-match pages, 10 of them sponsored), pages 1 to 101. Past page 101 DHgate returns nothing.
Can I get every review?
Yes, 10 per page with sort default or most_helpful and an only-with-photos switch; pages tells you how many pages exist. Buyer names are as DHgate masks them.
Can I list everything one seller sells?
Yes. Take seller.store_id from any search row or product and call store; it returns the store's rating summary and its catalogue, 24 products per page.
What is not returned?
Every shipping method per country (only the one DHgate shows by default), the brand filter, the seller's own review page, and prices in currencies other than US dollars.
What is the DHgate API?
DHgate API is a ReefAPI endpoint group for china-to-global wholesale marketplace: quantity price ladders, moq, variants with stock, shipping by country, sellers and reviews. It returns live JSON through POST requests under /dhgate/v1.
Is the DHgate API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. DHgate calls use the same shared credit balance as every other ReefAPI engine.
Do I need a DHgate login or account?
No login to DHgate is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the DHgate data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the DHgate API use?
DHgate actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call DHgate from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call dhgate actions with the same key, credit pool and JSON envelope used by normal REST requests.