JD.com Email Scraper avatar

JD.com Email Scraper

Pricing

from $2.49 / 1,000 results

Go to Apify Store
JD.com Email Scraper

JD.com Email Scraper

JD.com Email Scraper SD - JD.com Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from JD.com results by keyword, location and email domain - JD.com email extractor.

Pricing

from $2.49 / 1,000 results

Rating

0.0

(0)

Developer

Leads Scraper

Leads Scraper

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

JD.com Email Scraper — Read This Before You Run It

The JD.com Email Scraper searches Google's public index for JD.com pages that carry a contact email, and returns whatever it finds as clean, structured data.

Start with the honest part, because it decides whether this Actor is right for you: JD.com is largely excluded from Google's index, so expect very low volume.

In a measured live test the JD.com Email Scraper reached Google, parsed 10 result blocks correctly — and extracted zero emails from them.

That is not a parsing failure. The blocks were read properly; the indexed pages simply did not contain a matching public address in the title, breadcrumb or snippet.

Everything below is written so you can decide with your eyes open. If you need volume today, the sibling Actors listed further down will serve you far better.

Important: the JD.com Email Scraper never logs into JD.com, never uses a JD.com API and never opens the site. Every record comes from publicly indexed Google search results.


Why the JD.com Email Scraper Returns So Little: Google vs Baidu

The reason is straightforward and worth stating plainly rather than dressing up.

Google is not the dominant search index for Chinese retail marketplaces. Baidu is, and Baidu is where JD.com storefront and product pages are actually crawled, ranked and surfaced.

Google's coverage of jd.com is thin by comparison, so a site:jd.com query has very little corpus to draw on no matter how the query is phrased.

The JD.com Email Scraper is a Google-based tool by design. It queries through the Apify GOOGLE_SERP proxy, parses Google's result blocks, and cannot reach an index it does not read.

Parsed blocks are not the same as extracted emails

The 10-block, zero-email result is the clearest possible illustration of the difference between reach and yield.

Reach was fine: Google answered, the structural parser found ten <h3> titles and their surrounding blocks, and none were mistaken for empty.

Yield was zero: JD.com's indexed pages are product and category listings, not contact pages, so the JD.com Email Scraper had no address in the snippet text to match.

What that means in practice

Query expansion, more keywords and higher page caps will not manufacture contact pages that Google never indexed.

So treat the JD.com Email Scraper as a completeness tool: cheap to run, occasionally useful for a named brand, and never the backbone of a China sourcing list.

If your goal is a working Chinese supplier email list, the honest recommendation is to use the DHgate Email Scraper or the AliExpress Email Scraper instead — both platforms publish export-facing pages that Google indexes properly.


Key Features of the JD.com Email Scraper

The table below reflects what the JD.com Email Scraper genuinely does. The engine is solid; the corpus it searches is the constraint.

FeatureWhat it means in practice
Google site: data collectionQueries are restricted to jd.com, so only JD.com pages are parsed
Query expansionEach keyword × domain pair is searched in several phrasings: base, quoted, intitle:, plus one variant per query modifier
Domain-filtered extractionOnly emails ending in your customDomains list are kept
Global deduplicationOne email appears once across every query and every page of the run
Structural HTML parsingLocates the <h3> title, then the smallest surrounding block — this is why 10 blocks were read cleanly in testing
Obfuscation-aware parserUnderstands name [at] domain [dot] com, name (at) domain, name @ domain.com, domain .com, zero-width characters and the full-width @
Junk filterRejects placeholders such as email@, yourname@, test@, xxx@ and single-character locals
Boundary-correct matching@gmail.com will not match inside @gmail.company or @gmail.com.br
Soft-wrap repairDiscards a hit that is only the tail of another email in the same result block
Whole-page fallback parserIf Google's markup changes, the run degrades to "emails without shop metadata" rather than "no emails"
ConcurrencyAn asyncio worker pool runs several queries in parallel with a shared stop signal on maxEmails
Retry logic and proxy rotationUp to 3 attempts per page with exponential backoff and a fresh proxy session per request
Block detectionCAPTCHA, "unusual traffic" and consent pages are detected and retried, not silently counted as empty
Blocked-query requeueFailed or blocked queries are re-queued once at the end of the run
Resumable stateProgress is stored in the key-value store keyed by a hash of your input, saved on PERSIST_STATE, MIGRATING and ABORTING
Streaming dataset writesEach lead is pushed to the Apify dataset the moment it is found
Run summary loggingPages fetched, blocked pages, retries and emails per page are reported at the end

Block detection and the run summary matter more here than on most siblings. Together they let you prove the difference between "Google blocked us" and "Google had nothing useful" — and on JD.com it is reliably the second.


How the JD.com Email Scraper Works: Crawler and Parser Pipeline

The pipeline is short and deliberately transparent. There is no browser, no JavaScript rendering, no authentication and no cookies.

1. Read input. The JD.com Email Scraper loads your keywords, optional location, email domains and limits.

2. Build queries. It composes ordinary Google queries with the site: operator, for example site:jd.com supplier "@gmail.com".

3. Fetch search result pages. Pagination runs asynchronously with aiohttp through the Apify GOOGLE_SERP proxy, with retry logic and a fresh proxy session on every attempt.

4. Parse result blocks. For each result the JD.com Email Scraper finds the <h3> title, walks up to the smallest enclosing block, and reads the title, the breadcrumb host and the snippet.

5. Extract and normalise emails. A domain-filtered regex pulls addresses out of the block text, then normalisation and the junk filter clean them up.

6. Deduplicate and push. Every unique email is written to the dataset immediately.

Steps 1 to 4 performed exactly as designed in live testing. Step 5 had nothing to work with, which is the whole story of this platform.


What Structured Data Does the JD.com Email Scraper Extract?

The JD.com Email Scraper produces one dataset item per unique email, and every item carries the same 14 fields.

Alongside the address you get whatever account label Google printed, a mall.jd.com shop URL when a handle is exposed, and the snippet the email came from.

You also get full provenance: the keyword and the exact Google query that produced the lead, plus a UTC timestamp.

On JD.com that provenance is unusually valuable, because with so few results you want to know precisely which phrasing worked.

Nothing outside these 14 fields is collected. The JD.com Email Scraper does not touch orders, pricing, reviews or anything behind a login.


JD.com Email Scraper Input Schema

Every field below is taken verbatim from the JD.com Email Scraper input schema.

FieldTypeDefaultDescription
keywordsarray (required)["supplier", "brand"]Search terms describing the JD.com accounts you want (niche, job title, industry)
locationstring""Optional location phrase added to every query
customDomainsarray["@gmail.com", "@yahoo.com"]Only emails on these domains are collected; the leading @ is optional
maxEmailsinteger (1–10000)20Stop once this many unique emails have been collected
countryCodestring""Two-letter country code for the search proxy (US, GB, DE…)
expandQueriesbooleantrueSearch each keyword × domain pair with several phrasings
queryModifiersarray["email", "contact", "wholesale", "cooperation", "business"]Extra words combined with each keyword when expansion is on
maxPagesPerQueryinteger (1–50)30Page cap per query
maxConcurrencyinteger (1–20)5How many queries run in parallel

JSON input example

{
"keywords": ["supplier", "brand", "flagship store"],
"location": "",
"customDomains": ["@gmail.com", "@yahoo.com", "@outlook.com"],
"maxEmails": 50,
"countryCode": "US",
"expandQueries": true,
"queryModifiers": ["email", "contact", "wholesale", "cooperation", "business"],
"maxPagesPerQuery": 30,
"maxConcurrency": 5
}

Keep maxEmails modest. On this platform a high ceiling does not increase yield; it only lengthens a run that will finish nearly empty either way.

Why query expansion still matters

Google caps a single query at roughly 300 results, and expansion is the standard workaround across this Actor family.

On JD.com expansion is worth leaving on because the contact, cooperation and business modifiers are the only realistic route to a page that carries an address at all.

Because deduplication is global, expansion can only ever add rows — it never duplicates what you already have.


JD.com Email Scraper Output Schema

Every dataset item produced by the JD.com Email Scraper contains all 14 fields below.

FieldMeaning
networkPlatform name
keywordThe keyword that produced the lead
queryThe exact Google query used
titleRaw result title
accountNameAccount label Google prints (handle, display name, or shop label)
fullNameDisplay name parsed from a profile-style title; empty for page titles that carry no name
usernameURL-safe handle when the platform exposes one; otherwise null
profileUrlCanonical account URL when a handle is known; otherwise empty
urlDirect platform link when exposed, else the profile URL
descriptionBio or page snippet, cleaned of labels and engagement counters
emailLower-cased email address
emailDomainThe matched domain (e.g. @gmail.com)
possiblyTruncatedtrue when Google's snippet ellipsis touched the email — verify before sending
foundAtISO 8601 UTC timestamp

JSON output example — the realistic low-yield shape

The example below shows what a row looks like on the rare occasion one is produced: Google surfaced a JD.com page, exposed no shop handle, and the snippet happened to carry an address.

{
"network": "JD.com",
"keyword": "supplier",
"query": "site:jd.com supplier \"@gmail.com\" cooperation",
"title": "JD Worldwide - supplier cooperation",
"accountName": "JD.com",
"fullName": "",
"username": null,
"profileUrl": "",
"url": "",
"description": "Supplier cooperation and wholesale enquiries: jdw.partner.export@gmail.com",
"email": "jdw.partner.export@gmail.com",
"emailDomain": "@gmail.com",
"possiblyTruncated": false,
"foundAt": "2026-08-31T09:42:17Z"
}

Note the null username and the empty profileUrl. Without a handle in Google's result there is no mall.jd.com/index-... URL to build, so those fields stay blank by design.

Export the JD.com Email Scraper dataset as JSON, CSV, XLSX or HTML, or pull it through the Apify API into your CRM.


How to Use the JD.com Email Scraper

Step 1 — open the Actor. Launch the JD.com Email Scraper on the Apify platform.

Step 2 — set a small maxEmails. Something like 20 to 50. There is no point paying for a long run against a thin index.

Step 3 — use specific brand or category keywords. A named brand you already know sells on JD.com gives you a better chance than a generic term.

Step 4 — widen your email domains. Add @outlook.com, @hotmail.com, @163.com and @qq.com alongside the defaults; Chinese sellers rarely use Gmail.

Step 5 — read the run summary. It reports pages fetched, blocked pages and emails per page, so you can distinguish "blocked" from "indexed but empty" in seconds.

A summary showing pages fetched, no blocked pages and no emails is the documented expected outcome here — not a misconfiguration.


Use Cases for the JD.com Email Scraper

Use caseHow the JD.com Email Scraper helpsRealistic expectation
Named-brand contact lookupSearch a specific brand plus cooperation or businessBest-case scenario for this Actor
Cross-border sourcing researchCheck whether a JD Worldwide page carries a public addressOccasional hits at best
Coverage completenessAdd JD.com to a multi-platform sweep so the gap is documentedReliable, but usually returns nothing
Index auditingMeasure how much of jd.com Google actually holds for your nicheWorks exactly as intended
CRM enrichmentMatch any recovered shop label to accounts you already trackVery small volume
China market researchRead description snippets from whatever Google does surfaceThin sample

Every row above is framed modestly on purpose. Anyone promising a large JD.com seller email list from Google search is not describing something that exists.


When to Use the JD.com Email Scraper — and When to Use a Sibling

Use the JD.com Email Scraper when you specifically need JD.com, accept the volume, and want the search done properly rather than by hand.

Use a sibling when you need contactable Chinese suppliers at scale. The strongest options in this family are:

If your real target is Western storefronts rather than Chinese marketplaces, the footprint-based Shopify Store Email Scraper and Wix Stores Email Scraper return merchant domains at a far higher rate.

The Tmall Email Scraper and Taobao Email Scraper share the same indexing problem, since all three sit on the same side of the Great Firewall.


Limitations of the JD.com Email Scraper

These are real constraints. The first one dominates everything else.

  • Very low volume by design of the index, not the Actor. JD.com is largely excluded from Google's index. A live test parsed 10 result blocks and produced zero emails. Baidu, not Google, is where these pages are properly indexed, and the JD.com Email Scraper does not read Baidu.
  • Indexed pages are listings, not contact pages. What Google does hold for jd.com is mostly product and category pages, which carry no public address to extract.
  • Only publicly indexed emails. If an address is not visible in Google's index, it cannot be found. Private data is never accessed.
  • Google's ~300-result cap. A single query returns roughly 300 results at most. Query expansion exists to work around this, though on JD.com the ceiling is rarely the binding constraint.
  • possiblyTruncated. When Google's snippet ellipsis touches an address, this flag is set to true. Verify those rows before sending anything.
  • Apify GOOGLE_SERP proxy required. The Actor cannot run without Apify proxy credentials.
  • Free-plan cap. Free Apify plans are limited to 100 emails per run. Paid plans are uncapped — a limit you are very unlikely to reach here.
  • username and profileUrl availability. These are only populated when Google's result exposes a shop handle. Most JD.com rows show only a display label, leaving username as null and profileUrl empty. That is a Google limitation, not a bug.
  • Language and domain mismatch. JD.com sellers overwhelmingly use Chinese mailbox providers, so the default @gmail.com and @yahoo.com filters suppress most of what little exists.
  • No guaranteed volume. Results vary with keywords, domains and location, and on this platform the variance floor is zero.

Nothing here is affiliated with, endorsed by or officially supported by JD.com.


ActorWhat it collects
JD.com Email and Phone Number ScraperEmails and phone numbers from JD.com
JD.com Phone Number ScraperPublic phone numbers from JD.com
AliExpress Email ScraperPublic contact emails from AliExpress
Allegro Email ScraperPublic contact emails from Allegro
Amazon Email ScraperPublic contact emails from Amazon
Best Buy Seller Email ScraperPublic contact emails from Best Buy
BigCommerce Store Email ScraperPublic contact emails from BigCommerce Store
Cdiscount Email ScraperPublic contact emails from Cdiscount
Coupang Email ScraperPublic contact emails from Coupang
Depop Email ScraperPublic contact emails from Depop
DHgate Email ScraperPublic contact emails from DHgate
eBay Email ScraperPublic contact emails from eBay
Ecwid Store Email ScraperPublic contact emails from Ecwid Store
Etsy Email ScraperPublic contact emails from Etsy
Faire Email ScraperPublic contact emails from Faire
Flipkart Email ScraperPublic contact emails from Flipkart
Home Depot Seller Email ScraperPublic contact emails from Home Depot
Lazada Email ScraperPublic contact emails from Lazada
Lowe's Seller Email ScraperPublic contact emails from Lowe's
MercadoLibre Email ScraperPublic contact emails from MercadoLibre
Mercari Email ScraperPublic contact emails from Mercari
Newegg Email ScraperPublic contact emails from Newegg
Otto Email ScraperPublic contact emails from Otto
Overstock Email ScraperPublic contact emails from Overstock
Poshmark Email ScraperPublic contact emails from Poshmark
Rakuten Email ScraperPublic contact emails from Rakuten
Shopee Email ScraperPublic contact emails from Shopee
Shopify Store Email ScraperPublic contact emails from Shopify Store
Taobao Email ScraperPublic contact emails from Taobao
Target Seller Email ScraperPublic contact emails from Target
Temu Email ScraperPublic contact emails from Temu
Tmall Email ScraperPublic contact emails from Tmall
Vinted Email ScraperPublic contact emails from Vinted
Walmart Email ScraperPublic contact emails from Walmart
Wayfair Email ScraperPublic contact emails from Wayfair
Wish Email ScraperPublic contact emails from Wish
Wix Stores Email ScraperPublic contact emails from Wix Stores
WooCommerce Email ScraperPublic contact emails from WooCommerce
Zalando Email ScraperPublic contact emails from Zalando
AliExpress Email and Phone Number ScraperEmails and phone numbers from AliExpress
Allegro Email and Phone Number ScraperEmails and phone numbers from Allegro
Amazon Email and Phone Number ScraperEmails and phone numbers from Amazon

JD.com Email Scraper Example Run

A sourcing consultant is compiling a China supplier map and wants JD.com represented rather than silently skipped.

They run the JD.com Email Scraper with keywords: ["supplier", "brand"], customDomains: ["@gmail.com", "@outlook.com"] and maxEmails: 30, expecting little.

The run finishes quickly. The summary logs ten pages fetched, no blocked pages and no emails — proof that Google was reached and the indexed pages simply carried no addresses.

They record the gap in their notes, then re-run the same keywords through the DHgate Email Scraper, which is where the usable supplier contacts actually come from.


JD.com Email Scraper FAQ

How many results should I expect from the JD.com Email Scraper?

Very few, and quite possibly none. In a measured live test it parsed 10 result blocks and produced zero emails. Plan for that outcome and do not build a campaign around this Actor.

Why is the yield so low — is something broken?

No. JD.com is largely excluded from Google's index. Baidu is the dominant search engine for Chinese marketplaces and is where these pages are properly crawled. The JD.com Email Scraper reads Google only.

Ten blocks but no emails — is that a parser bug?

No, and the distinction matters. The parser located all ten blocks correctly. The blocks were product and listing pages that contained no public address in their snippet text, so there was nothing to extract.

Will more keywords or more pages fix it?

No. Expansion widens the search over the same thin corpus. It is worth leaving on, but it cannot create index coverage that does not exist.

Which sibling should I use instead?

For Chinese suppliers, the DHgate, AliExpress and Temu Actors. For Western storefronts, the footprint-based Shopify, Wix and Squarespace Actors return merchant domains at a far higher rate.

Does the JD.com Email Scraper log into JD.com?

No. It never logs in, never uses a JD.com API and never opens the site. All data comes from publicly indexed Google search results.

Why are username and profileUrl usually empty?

Because Google rarely exposes a JD.com shop handle in its result blocks. Without a handle there is no mall.jd.com URL to build, so username stays null and profileUrl stays empty.

Should I change the email domains?

Yes. JD.com sellers overwhelmingly use Chinese providers, so adding domains such as @163.com and @qq.com gives the JD.com Email Scraper more to match against than Gmail alone.

Do I need an Apify proxy?

Yes. The JD.com Email Scraper requires the Apify GOOGLE_SERP proxy and cannot run without Apify proxy credentials.

How many emails can it collect per run?

Free Apify plans are capped at 100 emails per run and paid plans are uncapped — but on this platform the index, not the plan, is your ceiling.

What does possiblyTruncated: true mean?

Google's snippet ellipsis touched the email, so the address may be cut off. Verify those rows before sending.

Is this affiliated with JD.com?

No. The JD.com Email Scraper is an independent tool and is not affiliated with, endorsed by or officially supported by JD.com.


Responsible Use and GDPR

Publicly visible does not mean consent to bulk marketing. Treat every address the JD.com Email Scraper returns as personal data belonging to a real business contact.

Follow GDPR, CAN-SPAM, PIPL and any other regime that applies to you: identify yourself, state why you are contacting them, honour opt-outs immediately and delete records on request.

With volumes this low, individual, well-researched outreach is the only sensible approach anyway.


Leave a review

If the JD.com Email Scraper saved you time, please leave a star rating and a short review on the Actor page.

Reviews are how other buyers judge whether a tool works, and they tell us which features to build next.

If something did not work, email neurodata.apify@gmail.com instead - bugs get fixed faster than they get complained about.

Support

Questions, bug reports or a custom build request? Email neurodata.apify@gmail.com and include your run ID so the JD.com Email Scraper logs can be checked quickly.