collections /etsy /shop-scraper
S

Etsy Shop Scraper

astravalabs/etsy-shop-catalog-scraper

Submit bare shop names or Etsy shop URLs and receive one clean row per catalog listing. Shops run in parallel, prices are localized across 32 markets, and separate per-shop and whole-run ceilings make catalog exports predictable.

// run this actor

Use the Apify CLI for a quick local run, or the HTTP API from any language or automation platform.

Option 01 / Apify CLICLI docs ↗
apify call astravalabs/etsy-shop-catalog-scraper --input '{"shops":["ArtFablePets","WilshireGoodsShop"],"country":"US","maxTotalResults":5000}'
Option 02 / HTTP API + cURLAPI reference ↗
# Set API token
API_TOKEN=<YOUR_API_TOKEN>

# Prepare Actor input
cat > input.json << 'EOF'
{
  "shops": [
    "ArtFablePets",
    "WilshireGoodsShop"
  ],
  "country": "US",
  "maxTotalResults": 5000
}
EOF

# Run the Actor using the HTTP API
# Full API reference: https://docs.apify.com/api/v2
curl "https://api.apify.com/v2/acts/astravalabs~etsy-shop-catalog-scraper/runs?token=$API_TOKEN" \
  -X POST \
  -d @input.json \
  -H 'Content-Type: application/json'

// Replace <YOUR_API_TOKEN> before running the cURL example. Keep tokens out of committed files.

inputtypebehavior
shops *string[]1–50 shop names or full Etsy shop URLs.
maxListingsintegerOptional ceiling for each shop; 0 means the full catalog.
maxTotalResultsintegerExact whole-run result ceiling. Default: 5000.
catalogSortenumShop order, newest, price, or relevance. Default: custom.
countrystringOne of 32 price-localization markets. Default: US.

// output — 10 top-level fields per listing

catalog listing
shopstringNormalized shop slug
shop_idintEtsy shop identifier
listing_idstringEtsy listing identifier
titlestringCatalog-card title
urlstringDirect listing URL
pricefloatLocalized displayed price
currencystringISO currency code
image_urlstringCatalog image URL
positionintPosition in the chosen catalog sort
scraped_atdatetimeUTC collection timestamp

// use cases

  • Competitor catalog tracking
  • Assortment and pricing research
  • Seller discovery
  • Product-enrichment pipeline input

// boundaries

  • Optimized for catalog rows; it does not return shop profile statistics or reviews.
  • maxListings is a ceiling, not a guaranteed row count for smaller catalogs.
measured performance / 2026-07-18

Measured 50-shop runs returned 1,720/1,720 rows in 8.0–10.5 seconds with zero failed shops across eight concurrency samples.

last tested / 2026-07-18

What “last tested” means

The published input contract, output field list, pricing unit, and documentation were checked against the current actor, and a sample run completed on the date shown. This is a dated product check, not an uptime guarantee; public source behavior can change after testing.

Inspect representative JSON →

// sanitized illustrative values; field names and nesting follow the published output contract

// use in a workflow

// companion actors