Ebay Email Scraper
Under maintenancePricing
from $2.99 / 1,000 emails
Ebay Email Scraper
Under maintenanceExtract publicly visible seller emails from eBay search results for lead generation and e-commerce research. Only addresses displayed on public pages are returned.
Pricing
from $2.99 / 1,000 emails
Rating
0.0
(0)
Developer
w3crawler
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
7 days ago
Last modified
Categories
Security
Limited permissionsShare
eBay Public Seller Email Scraper
Find seller email addresses that eBay visibly publishes on public search result cards and item pages. Each saved row ties one lower-cased address to the item URL, seller, marketplace, listing title, search context, and the exact extraction method used, so you can audit where the address came from. The Actor never signs in, calls a private API, bypasses access controls, or guesses a hidden address.
Get started
- Open the Actor Store page and select Try for free or open the Input tab.
- Provide one or both target types: public eBay
/itm/URLs instartUrls, or search terms inkeywords. - Keep
maxResults,maxPages, andmaxListingsPerSearchsmall for the first run. AddcustomDomainsif you only want particular mailbox providers. - Start the Actor, open the dataset, and export the saved rows as JSON, CSV, or Excel. Open Run summary (
OUTPUT_SUMMARY) to see how many listings were inspected and how many produced no qualifying email.
Input
All fields are optional, but at least one of startUrls or keywords must be supplied or the run records a missing-target issue and saves nothing. Unsupported field names and out-of-range values are rejected before requests start.
| Field | Type | Required? | Default | Meaning |
|---|---|---|---|---|
startUrls | object array | Optional | One eBay.de item URL | Public eBay /itm/ pages to inspect directly, written as { "url": "..." }. Up to 50 URLs; only http(s) eBay item paths are accepted. |
keywords | string array | Optional | [] | Search terms used to build eBay result pages, up to 10 entries of 1 to 200 characters each. |
location | string | Optional | Not supplied | Location text sent to the search as _stpos, such as a postal code or city, up to 160 characters. It does not apply to direct item URLs. |
market | string enum | Optional | "de" | Marketplace for keyword searches: us, uk, de, fr, it, es, ca, or au. It selects the search host; item rows resolve their marketplace from the final URL host. |
customDomains | string array | Optional | [] | Keep only emails on these domains, written as example.com or @example.com, up to 50 entries. An empty list keeps every non-eBay domain. |
maxResults | integer | Optional | 3 | Maximum email rows saved across direct item URLs and keyword searches, from 1 to 500. |
maxPages | integer | Optional | 1 | Maximum result pages read per keyword, from 1 to 10. |
maxListingsPerSearch | integer | Optional | 3 | Maximum search result cards considered per keyword, from 1 to 50. Cards without a qualifying address are opened for item-page inspection within the same bound. |
timeoutMs | integer | Optional | 30000 | Timeout for each public request in milliseconds, from 5,000 to 120,000. |
maxBytes | integer | Optional | 5000000 | Maximum decompressed response size retained per request, from 100,000 to 10,000,000 bytes. |
maxRetries | integer | Optional | 1 | Retries for transient request failures, from 0 to 3. |
userAgent | string | Optional | Not supplied | Transparent HTTP user-agent string to send, from 1 to 300 characters. Leave empty to use the Actor's default. |
proxyConfiguration | object | Optional | {"useApifyProxy": false} | Standard Apify Proxy object. Direct access is the default; enable Apify Proxy or supply custom proxy URLs if eBay blocks your egress. |
Default input:
{"startUrls": [{"url": "https://www.ebay.de/itm/365959456652"}],"market": "de","customDomains": [],"maxResults": 3,"maxPages": 1,"maxListingsPerSearch": 3,"timeoutMs": 30000,"maxBytes": 5000000,"proxyConfiguration": {"useApifyProxy": false}}
Replace the sample item URL with your own public eBay listing. The Actor reads only public eBay HTML. Addresses are accepted only when they appear in visible card or page text, a mailto: link, or the publicly rendered seller legal-notice block; eBay-owned, example.com, and test domains are discarded. The Actor does not log in, reveal private contact data, infer an address from a name, or bypass an access challenge. Requests are bounded by timeoutMs, maxBytes, and maxRetries.
Output
The dataset contains one row per unique email-and-item-URL pair. The same address can appear on several item rows when a seller lists multiple items, and the same listing contributes only one row per address. Rows are emitted only for emails that passed the public-source and domain checks; a blocked page, an item without an email, or a filtered address produces no placeholder row.
| Field | Type | Availability | Meaning |
|---|---|---|---|
url | string | Always | Public eBay item URL where the address was observed; one of the four required row fields. |
searchUrl | string | When published | eBay search result page that led to the listing, or the item URL itself when an explicit startUrls entry was inspected directly. |
scrapedAt | string | Always | Time the observation was saved, in ISO UTC. |
keyword | string | When published | Keyword whose search produced the row; absent for direct startUrls inspections. |
location | string | When published | Location text that was sent to the search as _stpos; absent when no location was supplied. |
title | string | When published | Listing title from the search card or item page. |
description | string | When published | Search-card subtitle on card rows; the item page's meta description when one exists, otherwise the card subtitle carried into the row. |
sellerName | string | When published | Visible seller username from the card or item page. |
sellerUrl | string | When published | Public seller shop or profile URL. |
email | string | Always | Lower-cased email address found on the public page. |
emailDomain | string | Always | Domain portion of email, used by the customDomains filter. |
page | integer | When published | One-based search result page where the listing appeared; 1 for a direct item inspection. |
context | string enum | When published | search_result when the address was read from a result card, or item_page when it was read from an item page. |
extractionMethod | string enum | When published | Exact public source: public_search_card_text, public_html_visible_text, public_html_mailto, public_html_mailto_and_visible_text, or public_html_embedded_legal_notice. |
marketplace | string enum | When published | Marketplace resolved from the item or final host, falling back to the selected market for search rows. |
isPubliclyPublished | boolean | When published | Provenance marker; true on every saved row because only visible addresses are emitted. |
isGuessed | boolean | When published | Provenance marker; false on every saved row because addresses are never inferred. |
The example below is a real saved row from the 2026-10-25 run. It came from a keyword search whose item page exposed the seller legal notice. The email is redacted in this example.
{"url": "https://www.ebay.de/itm/267414057078","searchUrl": "https://www.ebay.de/sch/i.html?_nkw=seiko+5&_pgn=1","scrapedAt": "2026-10-25T20:47:42.743Z","keyword": "seiko 5","title": "Seiko 5 Automatik Edelstahl 21 Rubine Made in Japan Armband SNXS77J1 Herrenuhr","description": "Seiko 5 Automatik 21 Steine Japan Made SNXS77 SNXS77J1 SNXS77J Herrenuhr. Modell: SNXS77J1. Spange: Faltschließe. Material: Edelstahl. Bewegung: Automatisch. Crystal: Hardlex Kristall. Alle unsere Uhren sind zu100% echt und nagelneu (sie sind weder gebrauchte Uhren noch Nachbildungen).","sellerName": "cw_timede","sellerUrl": "https://www.ebay.de/str/cwtimede?_trksid=p4429486.m3561.l161211","email": "redacted@example.com","emailDomain": "gmail.com","page": 1,"context": "item_page","extractionMethod": "public_html_embedded_legal_notice","marketplace": "de","isPubliclyPublished": true,"isGuessed": false}
location is absent from this row because the run did not set one. context and extractionMethod describe different things: context says whether the row came from a card or an item page, while extractionMethod identifies the exact HTML channel that contained the address. A public_html_embedded_legal_notice row means the address was read from the seller's publicly rendered legal-notice block, not from a private profile field.
Run summary
Run summary is stored separately from the dataset in the run's key-value store under OUTPUT_SUMMARY. The Actor also writes a compact, legacy-compatible OUTPUT record with the run status, datasetItems, diagnosticCount, requestErrorCount, blockedCount, noResultsCount, and uniqueItems.
| Field | Meaning |
|---|---|
status | Actor process outcome: SUCCEEDED or FAILED. |
runStatus | Canonical run status; matches status. |
dataStatus | Completeness of the saved rows: COMPLETE, PARTIAL, NO_RESULTS, or FAILED. |
hasData | Whether at least one email row was saved. |
normalRecords | Email rows written to the dataset. |
datasetItems | Dataset item count reported for the run; matches normalRecords. |
diagnosticItems | Diagnostic rows written to the dataset; always 0. |
diagnosticRecords | Operational issues recorded in the summary. |
diagnosticCount | Number of diagnostics; matches diagnosticRecords. |
requestErrorCount | Operational issues other than access blocks, including request, parse, missing-target, and dataset-write failures. |
blockedCount | Requests rejected by an eBay access block or challenge. |
noResultsCount | Inspected item pages or keyword searches that produced no qualifying email. It can exceed the number of inspected listings because keywords themselves also count. |
inspectedListings | Item pages opened to look for a published address. |
searchCardsProcessed | Search result cards parsed, whether or not they contained an address. |
requestedItemUrls | Direct item URLs supplied in startUrls. |
requestedKeywords | Keywords supplied for search. |
marketplace | Marketplace code used for keyword searches. |
proxyUsed | Whether Apify Proxy or custom proxy URLs were used. |
source | Public source label; always ebay-public. |
finishedAt | Time the summary was written, in ISO UTC. |
| Status | Data status | Meaning |
|---|---|---|
SUCCEEDED | COMPLETE | Rows were saved and no request or access-block failure was recorded. |
SUCCEEDED | PARTIAL | Some rows were saved, but at least one request failed or was blocked. Saved rows remain available. |
SUCCEEDED | NO_RESULTS | eBay responded without failures, but no inspected page published a qualifying email. |
FAILED | FAILED | No row was saved and at least one request failed or was blocked. |
Example OUTPUT_SUMMARY from the 2026-10-25 run:
{"status": "SUCCEEDED","runStatus": "SUCCEEDED","dataStatus": "COMPLETE","hasData": true,"normalRecords": 3,"datasetItems": 3,"diagnosticItems": 0,"diagnosticRecords": 0,"diagnosticCount": 0,"requestErrorCount": 0,"blockedCount": 0,"noResultsCount": 7,"inspectedListings": 10,"searchCardsProcessed": 10,"requestedItemUrls": 0,"requestedKeywords": 1,"marketplace": "de","proxyUsed": true,"source": "ebay-public","finishedAt": "2026-10-25T20:48:34.850Z"}
Coverage and limitations
Seller email addresses are not a standard eBay field. Most listings never publish one, and many sellers expose contact only through eBay's own messaging flow, which this Actor does not use. Rows are limited to addresses that are already visible on public search cards, item pages, mailto: links, or the rendered legal-notice block. The Actor does not sign in, read order or account pages, reveal private contact data, or infer an address from a seller name, shop name, or domain pattern.
Search coverage is bounded: maxPages limits result pages per keyword, and maxListingsPerSearch limits card inspections per keyword. A card that already shows a qualifying email is saved directly; otherwise its item page is opened. maxResults caps the total number of email rows, so broad searches can stop before every card is inspected. customDomains is applied before a row is saved, so filtered addresses never appear in the dataset or in the row count.
The same seller address can appear on multiple item rows because rows are keyed by email and item URL, not by seller. noResultsCount counts both empty inspections and keyword-level misses, so it is a workload indicator rather than a count of failed requests. Blocked, empty, or unparseable pages are recorded in the run summary and logs; they never produce placeholder rows. If some rows were saved before a later failure, the run stays SUCCEEDED with dataStatus: "PARTIAL".
Usage and support
Cost depends on the number of search pages, inspected item pages, retries, and any proxy usage. Start with one keyword, maxPages: 1, and a small maxListingsPerSearch, then inspect OUTPUT_SUMMARY to see how often eBay publishes an address for your niche. Raise maxResults only after confirming the hit rate; inspecting more item pages rarely helps categories where sellers do not publish contact details.
Use the Actor Issues page to report a problem. Include the run ID, the input used, and the OUTPUT_SUMMARY; do not include proxy credentials, cookies, or the harvested addresses. This Actor is an independent community tool and is not affiliated with, endorsed by, or sponsored by eBay Inc. Use it only for public data and in accordance with eBay's terms, robots guidance, and applicable law. Public pages can contain personal information; collect and use email addresses only for lawful purposes and honor applicable privacy and marketing rules.
