Ebay Email Scraper avatar

Ebay Email Scraper

Under maintenance

Pricing

from $2.99 / 1,000 emails

Go to Apify Store
Ebay Email Scraper

Ebay Email Scraper

Under maintenance

Extract 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

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

7 days ago

Last modified

Categories

Security

Limited permissions

Share

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

  1. Open the Actor Store page and select Try for free or open the Input tab.
  2. Provide one or both target types: public eBay /itm/ URLs in startUrls, or search terms in keywords.
  3. Keep maxResults, maxPages, and maxListingsPerSearch small for the first run. Add customDomains if you only want particular mailbox providers.
  4. 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.

FieldTypeRequired?DefaultMeaning
startUrlsobject arrayOptionalOne eBay.de item URLPublic eBay /itm/ pages to inspect directly, written as { "url": "..." }. Up to 50 URLs; only http(s) eBay item paths are accepted.
keywordsstring arrayOptional[]Search terms used to build eBay result pages, up to 10 entries of 1 to 200 characters each.
locationstringOptionalNot suppliedLocation 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.
marketstring enumOptional"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.
customDomainsstring arrayOptional[]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.
maxResultsintegerOptional3Maximum email rows saved across direct item URLs and keyword searches, from 1 to 500.
maxPagesintegerOptional1Maximum result pages read per keyword, from 1 to 10.
maxListingsPerSearchintegerOptional3Maximum 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.
timeoutMsintegerOptional30000Timeout for each public request in milliseconds, from 5,000 to 120,000.
maxBytesintegerOptional5000000Maximum decompressed response size retained per request, from 100,000 to 10,000,000 bytes.
maxRetriesintegerOptional1Retries for transient request failures, from 0 to 3.
userAgentstringOptionalNot suppliedTransparent HTTP user-agent string to send, from 1 to 300 characters. Leave empty to use the Actor's default.
proxyConfigurationobjectOptional{"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.

FieldTypeAvailabilityMeaning
urlstringAlwaysPublic eBay item URL where the address was observed; one of the four required row fields.
searchUrlstringWhen publishedeBay search result page that led to the listing, or the item URL itself when an explicit startUrls entry was inspected directly.
scrapedAtstringAlwaysTime the observation was saved, in ISO UTC.
keywordstringWhen publishedKeyword whose search produced the row; absent for direct startUrls inspections.
locationstringWhen publishedLocation text that was sent to the search as _stpos; absent when no location was supplied.
titlestringWhen publishedListing title from the search card or item page.
descriptionstringWhen publishedSearch-card subtitle on card rows; the item page's meta description when one exists, otherwise the card subtitle carried into the row.
sellerNamestringWhen publishedVisible seller username from the card or item page.
sellerUrlstringWhen publishedPublic seller shop or profile URL.
emailstringAlwaysLower-cased email address found on the public page.
emailDomainstringAlwaysDomain portion of email, used by the customDomains filter.
pageintegerWhen publishedOne-based search result page where the listing appeared; 1 for a direct item inspection.
contextstring enumWhen publishedsearch_result when the address was read from a result card, or item_page when it was read from an item page.
extractionMethodstring enumWhen publishedExact 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.
marketplacestring enumWhen publishedMarketplace resolved from the item or final host, falling back to the selected market for search rows.
isPubliclyPublishedbooleanWhen publishedProvenance marker; true on every saved row because only visible addresses are emitted.
isGuessedbooleanWhen publishedProvenance 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.

FieldMeaning
statusActor process outcome: SUCCEEDED or FAILED.
runStatusCanonical run status; matches status.
dataStatusCompleteness of the saved rows: COMPLETE, PARTIAL, NO_RESULTS, or FAILED.
hasDataWhether at least one email row was saved.
normalRecordsEmail rows written to the dataset.
datasetItemsDataset item count reported for the run; matches normalRecords.
diagnosticItemsDiagnostic rows written to the dataset; always 0.
diagnosticRecordsOperational issues recorded in the summary.
diagnosticCountNumber of diagnostics; matches diagnosticRecords.
requestErrorCountOperational issues other than access blocks, including request, parse, missing-target, and dataset-write failures.
blockedCountRequests rejected by an eBay access block or challenge.
noResultsCountInspected item pages or keyword searches that produced no qualifying email. It can exceed the number of inspected listings because keywords themselves also count.
inspectedListingsItem pages opened to look for a published address.
searchCardsProcessedSearch result cards parsed, whether or not they contained an address.
requestedItemUrlsDirect item URLs supplied in startUrls.
requestedKeywordsKeywords supplied for search.
marketplaceMarketplace code used for keyword searches.
proxyUsedWhether Apify Proxy or custom proxy URLs were used.
sourcePublic source label; always ebay-public.
finishedAtTime the summary was written, in ISO UTC.
StatusData statusMeaning
SUCCEEDEDCOMPLETERows were saved and no request or access-block failure was recorded.
SUCCEEDEDPARTIALSome rows were saved, but at least one request failed or was blocked. Saved rows remain available.
SUCCEEDEDNO_RESULTSeBay responded without failures, but no inspected page published a qualifying email.
FAILEDFAILEDNo 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.