Etsy Shop Scraper — Full Catalog Export avatar

Etsy Shop Scraper — Full Catalog Export

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Etsy Shop Scraper — Full Catalog Export

Etsy Shop Scraper — Full Catalog Export

Export complete Etsy product catalogs from up to 50 shops per run. Get listing IDs, titles, localized prices, images, URLs, and catalog positions with exact per-shop and whole-run result caps. No proxy setup or separate user start charge.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Astrava Labs

Astrava Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Export the complete product catalog from one Etsy shop or up to 50 shops in one run. Get one clean row per listing with its title, localized price, image, URL, catalog position, listing ID, and shop ID—without configuring proxies or CAPTCHA handling.

Use it for competitor catalog tracking, assortment analysis, pricing research, seller discovery, or as the first stage of a larger Etsy data pipeline.

Quick start

{
"shops": [
"ArtFablePets",
"https://www.etsy.com/shop/WilshireGoodsShop"
],
"country": "US",
"maxTotalResults": 5000
}

shops accepts bare shop names and full Etsy shop URLs. Duplicates and blank values are removed before the run starts.

What you get

Each default-dataset row represents one catalog listing:

{
"shop": "ArtFablePets",
"shop_id": 16875973,
"listing_id": "1234567890",
"title": "Personalized pet portrait",
"url": "https://www.etsy.com/listing/1234567890/personalized-pet-portrait",
"price": 24.95,
"currency": "USD",
"image_url": "https://i.etsystatic.com/.../il_794xN.jpg",
"position": 1,
"scraped_at": "2026-07-18T10:00:00+00:00"
}

Export the dataset as JSON, CSV, Excel, XML, RSS, or JSONL. Listing IDs can be passed directly to the companion Etsy Product Scraper for product-page details, variations, demand signals, shipping, and policies.

Inputs and cost controls

InputDefaultDescription
shopsrequired1–50 unique Etsy shop names or URLs
maxTotalResults5000Exact whole-run ceiling across every submitted shop
maxListingsallPer-shop ceiling; 0 or omitted means paginate until that catalog ends
catalogSortcustomShop order, newest, price low/high, or relevance
countryUSLocalizes returned prices and currency; 32 countries supported

The two limits work together. For example, maxListings: 100 and maxTotalResults: 1000 means no shop can contribute more than 100 rows and the entire batch can never save more than 1,000. Raise maxTotalResults when you intentionally want more than the default 5,000 rows.

The actor also stops cleanly if your Apify run spending limit is reached. The dataset and RUN_REPORT reflect the number actually persisted, including when Apify accepts only part of the final batch.

Pricing

The price is $3 per 1,000 saved listings ($0.003 per result). There is no separate actor-start charge to the user, and proxy handling is included.

Saved resultsResult charge
100$0.30
1,000$3.00
5,000 (default whole-run cap)$15.00

You pay only for rows saved to the dataset. RUN_REPORT is stored separately and is not a billed result.

Speed and scale

Shops run in parallel with one proxy session per active shop; pages inside a shop remain sequential for session stability. Live local measurements used the same 36-listing-per-shop workload for every concurrency comparison:

Run shapeTime rangeListingsSuccessful samples
1 shop × up to 36 listings4.6–14.5s362/2
10 shops × up to 36 listings6.2–8.9s3282/2
50 shops × up to 36 listings8.0–10.5s1,7202/2

In the 50-shop concurrency comparison, all 8 runs across 8, 16, 25, and 50 workers completed 1,720/1,720 rows with zero failed shops. Fifty workers was fastest on average at 9.29 seconds. Times vary with proxy warmup, Etsy response latency, catalog size, and pagination depth.

Sorting examples

Get the newest 25 products from each shop:

{
"shops": ["ArtFablePets", "WilshireGoodsShop"],
"catalogSort": "date_desc",
"maxListings": 25,
"maxTotalResults": 50
}

Get prices as shown to a visitor in Germany:

{
"shops": ["ArtFablePets"],
"country": "DE"
}

Run status and partial results

The key-value store record RUN_REPORT preserves input order and gives each shop an explicit status:

  • completed — the catalog ended normally or reached maxListings.
  • capped — the shop stopped at maxTotalResults or the Apify spending limit.
  • not_started — the whole-run limit was already reached before this shop began.
  • failed — shop resolution, retry recovery, pagination safety, or storage failed.

It also includes per-shop listing/page counts, the termination reason, run totals, concurrency, proxy sessions, recoveries, and fetch outcomes. Rows saved before a later page failure remain available and are counted accurately.

API example

curl -X POST \
"https://api.apify.com/v2/acts/astravalabs~etsy-shop-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"shops":["ArtFablePets"],"maxListings":100}'

For larger jobs, start the Actor asynchronously and read the default dataset after the run succeeds.

Companion Etsy actors

FAQ

Does this include shop profile statistics or reviews?

No. This actor is optimized for complete product catalogs. Use the Reviews Scraper for buyer feedback and the Product Scraper for listing-level enrichment.

Why did a shop return fewer rows than maxListings?

maxListings is a ceiling, not a target. The actor stops when Etsy has no more catalog items. Check RUN_REPORT for the exact status and reason.

Can I scrape more than 5,000 listings?

Yes. Set a higher maxTotalResults. The 5,000 default is a predictable cost guardrail, not the technical catalog limit.

Will duplicate listings be billed twice?

Listings are deduplicated by ID within each shop before being saved.

Unofficial. Not affiliated with, endorsed by, or sponsored by Etsy, Inc. “Etsy” is a trademark of Etsy, Inc., used here descriptively.