Shopify's Open Secret: Every Store Exposes /products.json
Build in public: how I turned a 10-line trick into a working Shopify scraper — no login, no CAPTCHA, no anti-bot.
If you've ever tried scraping an e-commerce site, you know the drill: Cloudflare walls, CAPTCHAs, session tokens, cat-and-mouse games with anti-bot teams.
Then I discovered that most Shopify stores hand you their entire product catalog on a silver platter.
The trick
Every Shopify store has a public JSON endpoint:
https://STORE.com/products.json?limit=250&page=1
No auth. No CAPTCHA. Just clean JSON — title, price, variants, SKUs, inventory, tags. For the store, it's the API behind their own product pages. For us, it's a gift.
The whole scraper in 10 lines
import requests
def get_products(store_url, max_pages=4):
base = store_url.rstrip("/") + "/products.json"
products = []
for page in range(1, max_pages + 1):
data = requests.get(f"{base}?limit=250&page={page}", timeout=20).json()
items = data.get("products", [])
if not items:
break
products.extend(items)
return products
That's it. Paginate until empty, and you have a store's full catalog.
Real result: kith.com
I ran it against a real store while writing this. One page, 250 products, 215 variants in the response — including this:
{
"title": "Nike WMNS Moon Shoe - Sail / Chlorophyll",
"price": 105.0,
"sku": "14318102",
"inventory": null,
"available": false,
"tags": "sneaker, nike, footwear, ..."
}
Every variant has its own SKU, price, and compare-at price. That's competitor intelligence data — prices, stock, product launches — sitting behind a single GET request.
Try it yourself (30 seconds)
Don't take my word for it — run this and see the live response:
curl -s "https://kith.com/products.json?limit=5&page=1" | head -c 2000
If you get JSON back, the store is scrapeable the easy way. (Not all stores leave it open — test before you commit to a project.)
What's it good for?
- Competitor monitoring — track when a rival changes prices or restocks
- Dropshipping / product research — find what's trending across stores
- Catalog snapshots — for analytics, dashboards, or AI training data
The honest limits
- Only works on Shopify stores (non-Shopify sites return nothing — check
https://store.com/products.jsonfirst) - Some big stores disable it or rate-limit aggressively (usually the ones with the most aggressive bot protection)
- Inventory data is sometimes null — the store decides what to expose
The polished version
Full disclosure: I built this and I maintain it — it's the tool I use for my own competitor monitoring.
If you want this packaged and ready-to-run, I published it as a free-to-try Apify actor — handles pagination, normalization, and exports clean CSV/JSON/Excel. No Docker setup, no proxy management, runs on demand. Otherwise the 10 lines above are all you need.
If you're doing competitor research or building a price tracker, try the endpoint first — you might not need a battle against anti-bot at all.
Have you found other public endpoints like this? Drop them in the comments — the good ones deserve a thread.
Top comments (0)