How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
handmade mugin Keyword searches. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
You need your own approved Etsy app. Every user of this Actor needs their own app at etsy.com/developers/your-apps. Etsy must approve it first, then you paste its keystring and shared secret into the input. Without them the Actor saves one free notice row and stops.
Good for
- Price and demand research for a product idea: compare price, views and favorites across many listings.
- Shop research: export all active listings of shops you want to study.
- Tag and keyword research: see which tags and materials sellers use for a search.
Who uses it
Etsy sellers
Compare price, views and favorites for a product idea.
Product researchers
See which tags and materials sellers use for a search.
Shop watchers
Export the active listings of shops you study.
Price
Prices will be shown after release.
Questions
Do I need my own Etsy app?
Yes. Create an app on Etsy and wait for approval. Then paste its keystring and shared secret.
Does it open etsy.com pages?
No. It reads the Etsy Open API. There is no browser and no proxy.
Why do results differ from the Etsy website?
The API ranks results in its own way. Prices are base prices, not sale prices.
Is my key safe?
Key fields are secret inputs. They are not saved in rows, logs or the run summary.
How fresh is the data?
Each row is read from Etsy during your run; fetchedAt shows when. Nothing is kept between runs. Etsy's API Terms ask you not to show listing data older than 6 hours, so run again for fresh data.
Details
Step by step on Apify
- Open the Input tab.
- Paste your keystring into Etsy API keystring (
apiKey) and your shared secret into Etsy shared secret (sharedSecret). - Keep the prefilled search
handmade mugand Max listings per search or shop = 10. - Click Start.
- Open the Output tab and check
title,price,viewsandfavorites.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Price and demand research | keywords | Listing | price, currency, views, favorites | Sort or chart in a spreadsheet |
| Shop research | mode: shop, shopNames | Listing | title, price, quantity, createdAt | Export to CSV or Excel |
| Tag research | keywords | Listing | tags, materials, rank | Count tags in your own tool |
| Seller comparison | keywords | Listing | shopName, shopRating, shopSales | Join with your own data by shopId |
Tips for better results
- Start with a small search of 10 listings to test your keys.
- Count the tags column in a spreadsheet to find common tags.
- Run again for fresh data. Etsy asks you not to show data older than 6 hours.
Limits and good to know
The term 'Etsy' is a trademark of Etsy, Inc. This Application uses Etsy's API, but is not endorsed or certified by Etsy.
- Your own Etsy app is required. The Actor has no shared key, no demo mode and no sample data
- Active listings only. Sold, expired, draft and private listings are not in the public API. There are no reviews, sales history, ad slots or "in carts" counts
- Price is the base listing price in the shop's currency. It is not converted to USD. The price on etsy.com can differ when a listing has variations or a sale
- Search order is the API's order. It is not the same as the order on etsy.com search pages, so the top results can differ
- Up to 10,000 listings per search or shop, 50 searches or 200 shops per run. One search of 10,000 listings took about 2 minutes in our tests; it can take longer when Etsy answers slowly, and the default run timeout is 10 minutes. For several large searches, raise the run timeout; when time runs out the run ends with
PARTIALandTIME_LIMITand keeps the saved rows - Etsy request limit. Every 100 listings use 2 requests of your app's daily limit (5,000 per day for a new app). When the limit runs out mid-run, the run ends with
PARTIALandQUOTA_LIMIT - Not a drop-in replacement for Etsy scrapers that read etsy.com pages: some field names differ, and the source is the API, not the website
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"status": "listing",
"mode": "search",
"query": "handmade mug",
"rank": 1,
"listingId": 1389148459,
"title": "Vintage pottery mug, handmade mug, ceramic mug, ...",
"price": 24,
"currency": "USD",
"quantity": 4,
"shopName": "msvintagenicole",
"shopRating": 4.96,
"shopReviewCount": 225,
"shopSales": 794,
"shopCountry": "US",
"views": 1670,
"favorites": 65,
"tags": ["vintage mugs", "handmade mugs", "pottery mug"],
"materials": [],
"whoMade": "someone_else",
"isDigital": false,
"url": "https://www.etsy.com/listing/1389148459/vintage-pottery-mug-handmade-mug-ceramic",
"mainImageUrl": "https://i.etsystatic.com/7160843/r/il/ecdd09/4549836599/il_fullxfull.4549836599_8pxs.jpg",
"createdAt": "2023-01-08T23:00:19.000Z",
"source": "etsy-open-api-v3",
"fetchedAt": "2026-10-22T11:08:41.815Z",
"message": null
}Data fields (37)
| Field | Type | Meaning |
|---|---|---|
status | string | listing = an active Etsy listing; api_key_required = free notice row when the Etsy keystring or shared secret is missing. |
mode | string | search = found by keyword search; shop = exported from a shop. |
query | string | The keyword search or shop name this listing came from. |
rank | integer | Position of the listing within its search or shop, in the sort order you chose (1 = first). |
listingId | integer | Etsy listing id, as in etsy.com/listing/<id>. |
title | string | Listing title. |
description | string | Full listing description written by the seller. |
price | number | Price in the listing currency (for example 34.5); null when Etsy sent none, never a made-up 0. |
currency | string | ISO currency code of the price, for example USD or EUR. |
quantity | integer | Units available. |
shopId | integer | Etsy shop id. |
shopName | string | Shop name, as in etsy.com/shop/<name>. |
shopUrl | string | Link to the shop. |
shopRating | number | Average shop review rating, 1-5. |
shopReviewCount | integer | Number of shop reviews. |
shopSales | integer | Total sales the shop shows publicly. |
shopCountry | string | Shop country, ISO code. |
views | integer | Listing views Etsy reports. |
favorites | integer | How many buyers added the listing to favorites. |
tags | array | Seller tags (up to 13): the search terms the seller targets. |
materials | array | Materials the seller listed. |
taxonomyId | integer | Etsy category (taxonomy) id. |
whoMade | string | Who made it: i_did, someone_else or collective. |
whenMade | string | When it was made, for example made_to_order or 2020_2025. |
isCustomizable | boolean | The seller accepts custom requests. |
isPersonalizable | boolean | The listing offers personalization. |
hasVariations | boolean | The listing has variations such as size or color. |
isDigital | boolean | Digital download. |
state | string | Listing state; active for every exported listing. |
url | string | Link to the listing, without tracking parameters. |
mainImageUrl | string | First listing photo, full size. |
images | array | All listing photo URLs, full size, in the seller order. |
createdAt | string | When the listing was first created (UTC, ISO 8601). |
updatedAt | string | When the listing was last changed (UTC, ISO 8601). |
source | string | Always etsy-open-api-v3. |
fetchedAt | string | When the Actor read the listing (UTC, ISO 8601). |
message | string | Explanation on the api_key_required row; null on listings. |
Input settings (10)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Etsy API keystring | apiKey | string | |
| Etsy shared secret | sharedSecret | string | |
| What to export | mode | string | "search" |
| Keyword searches | keywords | array | ["handmade mug"] |
| Shop names | shopNames | array | |
| Max listings per search or shop | maxItems | integer | 10 |
| Sort by | sortBy | string | "relevance" |
| Min price | minPrice | number | |
| Max price | maxPrice | number | |
| Shop location | shopLocation | string |


