Track any Etsy shop's sales velocity in 5 minutes (no proxy)
2026-10-02
Disclosure: I publish and maintain the Actor this tutorial uses (publicrecords/etsy-shop-velocity on Apify).
You have a shortlist of Etsy shops — competitors, peers, or targets — and you need a number for how fast each one is selling, not a one-off screenshot of the shop page. Opening tabs by hand does not leave a history you can compare week over week.
The method
- Read the public sales counter on the shop page. Etsy shows lifetime sales (exact or rounded) on
etsy.com/shop/<ShopName>. Note the count and the precision. - Repeat on a fixed cadence. A second read of the same counter is what turns a lifetime total into a rate. Keep the timestamps.
- Compute deltas and rates from successive reads. Measured change ÷ days between reads = sales/day. Short windows (7d) and medium windows (28d) need that many days of history before they are defined.
- Do not invent velocity. Until history exists, report the counters and leave rate fields empty. Breakout flags need at least 7 days of history.
- Prefer a hosted panel when you do not want to run a browser or proxy. A pre-built snapshot of many shops removes the need for your own proxy for shop-page reads.
Doing it at scale (measured run)
Etsy Shop Sales Tracker & Scraper (publicrecords/etsy-shop-velocity) serves one row per shop from a hosted panel of public shop counters. No proxy configuration is required for this path.
Proof run (2026-10-02)
| Field | Value |
|---|---|
| Actor | publicrecords/etsy-shop-velocity |
| Build | latest (listing build 0.2.5) |
| Run ID | lWWrFPgwZcu6DYYKe |
| Status | SUCCEEDED |
| Runtime | 5.314 s |
| Dataset | w4HG8g4gRIbzDRLIx (2 items) |
| RUN_SUMMARY | panel=313, matched=2, served=2, charged_rows=2, snapshot_date=2026-09-30, stale=true |
| Console pricing (PPE) | actor-start $0.005 + shop-row $0.003 each → $0.011 for this 2-shop run |
Input used (Store prefill shops):
{ "shops": ["OrelCeramics", "Bestickend"], "maxShops": 2 }
Output rows (abbreviated; full fields in the dataset):
[
{
"shop": "OrelCeramics",
"shop_url": "https://www.etsy.com/shop/OrelCeramics",
"as_of": "2026-09-30",
"sales_count": 111,
"sales_precision": "exact",
"reviews_count": 34,
"rating": 5,
"admirers": 252,
"listings_active": 44,
"history_days": 1,
"delta_last": null,
"sales_per_day": null,
"delta_7d": null,
"delta_28d": null,
"units_day": null,
"breakout": false,
"snapshot_date": "2026-09-30",
"snapshot_stale": true,
"source": "etsy.com public shop page"
},
{
"shop": "Bestickend",
"shop_url": "https://www.etsy.com/shop/Bestickend",
"as_of": "2026-09-30",
"sales_count": 11400,
"sales_precision": "rounded",
"reviews_count": 1830,
"rating": 5,
"admirers": 771,
"listings_active": 44,
"history_days": 1,
"delta_last": null,
"sales_per_day": null,
"delta_7d": null,
"delta_28d": null,
"units_day": null,
"breakout": false,
"snapshot_date": "2026-09-30",
"snapshot_stale": true,
"source": "etsy.com public shop page"
}
]
What those nulls mean (measured, not marketing)
On this run every shop had history_days: 1. The Actor therefore left delta_last, sales_per_day, delta_7d, delta_28d, and units_day as null. That is correct: velocity and breakout flags are not filled until successive panel reads accumulate. The README states breakouts need 7 days of history. The panel snapshot date was 2026-09-30 and the run marked snapshot_stale: true on 2026-10-02.
A second proof run the same night (5dCSPEknPT5wtoCLH, input minSales: 1000, maxShops: 5) returned in 4.59 s, charged 5 shop-rows ($0.020 at Console rates), and showed the same pattern: e.g. PersonalizationMall sales_count=829600 (rounded), history_days=1, velocity fields null, snapshot_stale=true.
Cost math you can recompute
- 1 shop: $0.005 + $0.003 = $0.008
- 2 shops (this tutorial): $0.005 + 2×$0.003 = $0.011
- 5 shops (second proof): $0.005 + 5×$0.003 = $0.020
Prices are Console PPE as of the listing read on 2026-10-02 (actor-start $0.005, shop-row $0.003). Quote Console if they change.
Store + MCP
Actor (Store): https://apify.com/publicrecords/etsy-shop-velocity
MCP for Claude Desktop / Cursor: https://mcp.apify.com/?tools=publicrecords/etsy-shop-velocity
Disclosure: published by the maintainer of this Actor (publicrecords on Apify).