Etsy Email Scraper avatar

Etsy Email Scraper

Under maintenance

Pricing

from $2.99 / 1,000 emails

Go to Apify Store
Etsy Email Scraper

Etsy Email Scraper

Under maintenance

Read bounded public Etsy pages and return publicly visible contact evidence, shop links, and listing links without inferring or fabricating seller emails.

Pricing

from $2.99 / 1,000 emails

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Categories

Share

Inspect bounded public Etsy pages for email addresses that are explicitly visible in the page text or in a mailto: link. Each saved row also returns the public page title, unique shop and listing links found on the page, and a short evidence excerpt for every email. The Actor does not infer an address from a shop name, a domain, or an account record.

Get started

  1. Open the Actor Store page and select Try for free, or open the Input tab.
  2. Add public Etsy shop, listing, search, market, or homepage URLs to startUrls.
  3. Keep maxItems small: it caps how many of those URLs are inspected, and each URL costs one request plus limited retries.
  4. Start the Actor, inspect the dataset, and open Run summary (OUTPUT) to see how many pages were verified, how many emails were found, and whether any page failed. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Input

All fields are optional, and the defaults below are ready to use. Unsupported field names and out-of-range values are rejected before requests start.

FieldTypeRequired?DefaultMeaning
startUrlsstring arrayOptional["https://www.etsy.com/shop/GeekTropicalOfficial"]Public HTTPS Etsy shop, listing, search, market, or homepage URLs. Duplicate strings are ignored.
maxItemsintegerOptional10Maximum number of source URLs inspected, from 1 to 100. URLs beyond this cap are not requested.
timeoutSecsintegerOptional30Per-URL request timeout, from 5 to 120 seconds.
requestDelayMsintegerOptional500Polite pause between consecutive Etsy requests, from 0 to 5,000 ms.
maxRequestRetriesintegerOptional1Retries for ordinary request failures, from 0 to 2.
proxyConfigurationobjectOptional{"useApifyProxy":true}Standard Apify Proxy configuration. Direct access is attempted when the object is omitted; no challenge bypass is attempted.

Example input used for the saved run:

{
"startUrls": [
"https://www.etsy.com/shop/GeekTropicalOfficial"
],
"maxItems": 1,
"timeoutSecs": 30,
"requestDelayMs": 0,
"maxRequestRetries": 1,
"proxyConfiguration": {
"useApifyProxy": true
}
}

The saved run inspected one shop page; the schema default is ten pages. Requests are serialized and separated by requestDelayMs, with retries limited to transient failures. The Actor reads public HTTPS Etsy HTML only. It does not sign in, submit contact forms, follow external links, call private endpoints, solve CAPTCHAs, or bypass an access decision. Optional Apify Proxy settings are used when supplied. Diagnostic detail for blocked or failed pages is kept in the run logs and summary, never in a dataset row.

Shorter variations use the same fields:

{
"startUrls": [
"https://www.etsy.com/shop/GeekTropicalOfficial",
"https://www.etsy.com/market/best_sellers"
],
"maxItems": 2
}
{
"startUrls": [
"https://www.etsy.com/listing/1461506381/24-day-elf-kit-2025-best-seller"
],
"maxItems": 1,
"includeDiagnostics": true
}
{
"startUrls": [
"https://www.etsy.com/shop/GeekTropicalOfficial"
],
"maxItems": 1,
"timeoutSecs": 45,
"maxRequestRetries": 0
}

Output

The dataset contains one row per verified public page that was successfully fetched. A page with no visible email still produces a row, with emails and emailEvidence set to null, emailCount set to 0, and publicContactFound set to false. A page that cannot be verified produces no row and is counted in diagnosticCount.

FieldTypeAvailabilityMeaning
platformstring | nullAlwaysSource platform; Etsy.
pageTypestring | nullAlwaysVerified page kind; public_contact_page for saved rows.
sourceUrlstring | nullAlwaysExact public Etsy URL submitted in startUrls.
pageUrlstring | nullAlwaysFinal public URL after ordinary redirects, such as a regional Etsy host. When the URL was read from a public Internet Archive capture, this is the Wayback replay address.
pageTitlestring | nullWhen the page has a titlePublic HTML title, trimmed to a readable length.
emailsstring array | nullWhen a visible email is foundUnique lowercased email addresses found in visible text or mailto: links, up to 50 per page.
emailCountinteger | nullAlwaysNumber of addresses in emails; 0 when the page exposes none.
publicContactFoundboolean | nullAlwaysWhether at least one visible public email was found on the page.
emailEvidenceobject array | nullWhen a visible email is foundOne evidence record per unique address, with the location and surrounding text.
shopLinksstring array | nullWhen shop links are presentUnique public Etsy shop links found in the page HTML, capped at 100.
shopLinkCountinteger | nullAlwaysNumber of entries in shopLinks; 0 when none were found.
listingLinksstring array | nullWhen listing links are presentUnique public Etsy listing links found in the page HTML, capped at 100.
listingLinkCountinteger | nullAlwaysNumber of entries in listingLinks; 0 when none were found.
scrapedAtstring | nullAlwaysTime the row was saved, in ISO UTC.

Each emailEvidence entry contains email, evidenceType, sourceUrl, and context. evidenceType is mailto when the address came from a link target or visible_text when it appeared as plain text. context is a bounded excerpt around the first occurrence, or null when the visible excerpt could not be located. emails, shopLinks, and listingLinks are plain string arrays.

The example below is a real saved row from the 2026-10-25 run. The shop-link and listing-link arrays are shortened to three entries each for readability; shopLinkCount and listingLinkCount reflect the complete arrays.

{
"platform": "Etsy",
"pageType": "public_contact_page",
"sourceUrl": "https://www.etsy.com/shop/GeekTropicalOfficial",
"pageUrl": "https://www.etsy.com/in-en/shop/GeekTropicalOfficial",
"pageTitle": "GeekTropicalOfficial - Etsy India",
"emails": [
"aloha@geektropical.com"
],
"emailCount": 1,
"publicContactFound": true,
"emailEvidence": [
{
"email": "aloha@geektropical.com",
"evidenceType": "visible_text",
"sourceUrl": "https://www.etsy.com/shop/GeekTropicalOfficial",
"context": "a protection authority. How to Contact Me You may reach me with any concerns relating to privacy at aloha@geektropical.com , or by mail at my physical address 4535 E. McKellips Rd #1016, Mesa, AZ 85215 addressed to Geek Tropical. For purposes of EU data protection law, I, GeekTropi"
}
],
"shopLinks": [
"https://www.etsy.com/in-en/shop/GeekTropicalOfficial",
"https://www.etsy.com/shop/GeekTropicalOfficial",
"https://www.etsy.com/in-en/shop/GeekTropicalOfficial/reviews?ref=pagination&page=1"
],
"shopLinkCount": 7,
"listingLinks": [
"https://www.etsy.com/in-en/listing/1433538267/dinosaur-chicken-nuggets-blue-button-up?ref=shop_review",
"https://www.etsy.com/in-en/listing/1173516903/astronaut-pixels-outer-space-purple-blue?ref=shop_review",
"https://www.etsy.com/in-en/listing/1419395394/dnd-dice-critters-colors-button-up?ref=shop_review"
],
"listingLinkCount": 10,
"scrapedAt": "2026-10-25T20:41:26.016Z"
}

The email in this row appeared in the shop's visible privacy text and was lowercased; the evidence excerpt still shows its original casing and surrounding wording. The shop links include regional and review-page variants, and the listing links point to products shown on the page.

The row below was produced from the public Internet Archive capture 20221001023956 of the same shop page when the live request was blocked; link arrays are omitted for brevity. pageUrl is the Wayback replay address, so the capture timestamp is visible in the row.

{
"platform": "Etsy",
"pageType": "public_contact_page",
"sourceUrl": "https://www.etsy.com/shop/GeekTropicalOfficial",
"pageUrl": "https://web.archive.org/web/20221001023956id_/https://www.etsy.com/shop/GeekTropicalOfficial",
"pageTitle": "GeekTropicalOfficial - Etsy",
"emails": [
"aloha@geektropical.com"
],
"emailCount": 1,
"publicContactFound": true,
"emailEvidence": [
{
"email": "aloha@geektropical.com",
"evidenceType": "visible_text",
"sourceUrl": "https://www.etsy.com/shop/GeekTropicalOfficial",
"context": "a protection authority. How to Contact Me You may reach me with any concerns relating to privacy at aloha@geektropical.com , or by mail at my physical address 4535 E. McKellips Rd #1016, Mesa, AZ 85215 addressed to Geek Tropical. For purposes of EU data protection law, I, GeekTropi"
}
],
"shopLinkCount": 46,
"listingLinkCount": 47,
"scrapedAt": "2026-10-31T19:02:07.497Z"
}

Run summary

Run summary is stored separately from the dataset in the run's key-value store under OUTPUT.

FieldMeaning
statusActor process outcome: SUCCEEDED or FAILED.
runStatusCanonical run status; matches status.
dataStatusCompleteness of the saved rows: COMPLETE, PARTIAL, NO_RESULTS, or FAILED.
sourceUrlsPublic Etsy URLs selected for the run after deduplication and the maxItems cap.
pagesRequestedNumber of source URLs the run selected to inspect.
pagesProcessedPages fetched and verified into dataset rows.
datasetItemsRows present in the dataset.
normalRowsWrittenSource-backed rows written; equals datasetItems.
diagnosticCountOperational issues recorded, including blocked, failed, unverifiable, or unsaveable pages.
diagnosticItemsDiagnostic dataset rows; always 0.
diagnosticRowsWrittenDiagnostic rows written; always 0.
emailsFoundTotal email addresses across all saved rows.
shopLinksTotal shop links across all saved rows, as a count rather than a list.
listingLinksTotal listing links across all saved rows, as a count rather than a list.
includeDiagnosticsWhether diagnostic detail was retained for the run; true for the saved run and for runs that do not set the internal compatibility field.
finishedAtTime the summary was written, in ISO UTC.
StatusData statusMeaning
SUCCEEDEDCOMPLETEAt least one page was verified and no operational issue was recorded.
SUCCEEDEDPARTIALAt least one page was saved, but another page was blocked, failed, or could not be saved.
SUCCEEDEDNO_RESULTSNo page produced a row and no diagnostic was recorded, for example when no URL was supplied.
FAILEDFAILEDNo page produced a row and at least one diagnostic was recorded.

Example OUTPUT from the 2026-10-25 run:

{
"status": "SUCCEEDED",
"runStatus": "SUCCEEDED",
"dataStatus": "COMPLETE",
"sourceUrls": [
"https://www.etsy.com/shop/GeekTropicalOfficial"
],
"pagesRequested": 1,
"pagesProcessed": 1,
"datasetItems": 1,
"normalRowsWritten": 1,
"diagnosticCount": 0,
"diagnosticItems": 0,
"diagnosticRowsWritten": 0,
"emailsFound": 1,
"shopLinks": 7,
"listingLinks": 10,
"includeDiagnostics": true,
"finishedAt": "2026-10-25T20:41:26.127Z"
}

Coverage and limitations

The Actor reports only addresses that the fetched public page shows in visible text or in a mailto: link. It does not click through to contact forms, seller profiles, or external websites, and it does not decode deliberately obfuscated addresses, images, or script-only values. Addresses on platform domains and obvious placeholder domains are excluded. The visible-text scan is bounded, so an address far down a very long page may be missed; at most 50 unique emails and 100 shop links and 100 listing links are retained per page.

A saved row means the page was fetched and verified, not that an email exists. When publicContactFound is false, the page simply exposed no qualifying address during the run. Addresses can be stale, role-based, or shared, and the Actor does not send mail or verify deliverability. Regional redirects, locale, and generated markup can change the page URL and link set between runs.

Blocked or failed pages are counted in diagnosticCount and described in logs; they are never converted into rows or placeholder values. When Etsy answers a live request with a bot-check, the Actor also checks the public Internet Archive for a capture of the same URL through the Wayback CDX and availability APIs and, if one exists, reads its raw id_ HTML with the same parser. The row's pageUrl is then the Wayback replay address, which carries the capture timestamp, so archived addresses can be older than the run. A URL with no public capture remains a diagnostic. Optional Apify Proxy settings are supported when supplied. Use the data only for lawful contact where you have a documented basis, and honor consent, anti-spam, and privacy rules that apply to your jurisdiction.

Usage and support

Cost depends on the number of source URLs, timeout and delay settings, retries, response size, and any proxy usage. One request is made per selected URL, so start with a handful of URLs and maxItems below the default when testing. See the Actor's Pricing tab for current account rates.

Use the Actor Issues page to report a problem. Include the run ID, the input used (with private addresses or tokens removed), and the run summary. This Actor is an independent community tool and is not affiliated with, endorsed by, or sponsored by Etsy, Inc. Use it only for public data and in accordance with Etsy's terms, robots guidance, and applicable law.