Export public Etsy listings and seller metadata from product searches or public Etsy URLs. This Etsy data scraper creates a structured listing dataset for assortment research, pricing comparisons, seller discovery, and catalog monitoring, with an Etsy API workflow through Apify.
What you get
- Canonical listing IDs, titles, URLs, images, displayed prices, currencies, availability, ratings, and seller links when public
- Public seller names and shop links on the associated listing records when Etsy exposes them
- Source URL, query/page position, and scrape timestamp for provenance
- Pagination, stable-ID deduplication, and a global persisted-record limit
Example input
{
"searchQueries": ["linen apron"],
"maxItems": 20,
"includeDetails": true,
"country": "US"
}
You can also provide public search, category, listing, or shop URLs:
{
"startUrls": [{ "url": "https://www.etsy.com/market/linen_apron" }],
"maxItems": 10
}
Input recipes
- Search monitoring: provide one or more
searchQueries, set a lowmaxItems, and keep details enabled. - Listing lookup: provide a public
/listing/…URL instartUrls. - Shop catalog: provide a public
/shop/…URL instartUrlsto export its visible listings, with public seller metadata on each listing when available.
Input settings
| Field | Type | Description |
|---|---|---|
searchQueries |
string[] | Etsy product searches to process. |
startUrls |
request[] | Public Etsy search, category, listing, or shop URLs. |
maxItems |
integer | Global cap across successfully persisted listing rows. |
includeDetails |
boolean | Request public listing pages for additional listing/shop fields. |
country |
string | Two-letter ship-to country used for localization. |
proxyConfiguration |
object | Optional Apify Proxy configuration. |
At least one query or URL is required. Etsy account, messages, and other private URLs are rejected.
Output
The Actor exposes one stable default dataset of listing records. Each record includes publicly visible seller identity and shop links when Etsy exposes them.
Listings
| Field | Description |
|---|---|
listingId, listingUrl |
Stable Etsy listing identity and canonical URL |
title, imageUrl |
Public product title and primary image |
shopName, shopUrl |
Public seller identity and link |
price, currencyCode, availability |
Displayed offer data |
rating, reviewCount |
Public aggregate rating data; not individual reviews |
position, page, sourceQuery |
Search provenance |
sourceUrl, scrapedAt |
Requested source and extraction timestamp |
Conditional fields are omitted when Etsy does not expose them; the Actor does not invent unsupported values.
Tips and limits
- Start with a low
maxItemsvalue to verify your target and expected fields. - Enable detail enrichment only when you need fields beyond public result cards.
- Etsy can vary fields by target and locale and may challenge automated requests. Partial output already saved is preserved.
- This release does not return individual review records or private/login-only data.
Who is it for?
- Etsy sellers comparing public prices, titles, and assortments in a niche
- Marketplace analysts building repeatable listing datasets for research
- Sourcing teams finding public shops and monitoring visible catalogs
- Developers and automation teams feeding Etsy data into APIs, agents, spreadsheets, or databases
API usage
JavaScript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/etsy-scraper').call({
searchQueries: ['linen apron'],
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/etsy-scraper').call(run_input={
'searchQueries': ['linen apron'],
'maxItems': 20,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~etsy-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["linen apron"],"maxItems":20}'
MCP and agents
Add the Actor to Claude-compatible clients:
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/etsy-scraper"
Or add an MCP server configuration:
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/etsy-scraper"
}
}
}
Example prompts:
- “Use Etsy Scraper to export 20 linen apron listings and compare displayed prices.”
- “Export listings from a public Etsy shop and return each listing’s source URL.”
- “Collect a small Etsy listing dataset for a daily catalog-monitoring workflow.”
Integrations
Send Actor output to Google Sheets, n8n, Zapier, Make, webhooks, cloud storage, or your own database through Apify integrations. Use schedules for repeated monitoring and keep the input small until you confirm the target returns the fields you need.
Support
For bugs or target-specific problems, open an issue from the Actor page and include the public input URL and run ID. Do not include Etsy credentials or private account data.