July 19, 2026 · StoreSentry Team

The /products.json Trick: See Any Shopify Store's Full Catalog

Here's one of the most useful open secrets in e-commerce: every Shopify storefront serves its product catalog as structured JSON, publicly, by design. No API key, no login, no scraping tools. If you compete with Shopify stores — or research a niche before entering it — this is the single highest-leverage trick you can learn, and it takes thirty seconds.

The trick itself

Take any Shopify store's URL and append /products.json:

https://any-shopify-store.com/products.json

Open it in your browser. You'll see the store's products as JSON — the same catalog data their storefront theme renders into pretty pages. By default you get 30 products; bump it with a parameter:

https://any-shopify-store.com/products.json?limit=250&page=2

limit maxes out at 250 per page, and page lets you walk through the whole catalog. A store with 900 products is four requests.

What's inside (and why it's gold)

Each product object contains, among other fields:

Translated into competitive questions this answers:

Two useful variants of the endpoint

Per-collection catalogs

https://store.com/collections/best-sellers/products.json

If the store maintains a "best sellers" or "new arrivals" collection, this hands you their own curation — you're reading what they consider their top products.

Single product detail

https://store.com/products/product-handle.json

Everything about one product, useful when you only track a few head-to-head items.

A minimal price-diff script

For the technically inclined: snapshot the catalog daily and diff. Here's the idea in ~20 lines of PHP (the same logic works in any language):

$url  = 'https://competitor.com/products.json?limit=250';
$data = json_decode(file_get_contents($url), true);

$today = [];
foreach ($data['products'] as $p) {
    foreach ($p['variants'] as $v) {
        $today[$p['handle'].'|'.$v['title']] = [
            'price' => $v['price'],
            'available' => $v['available'],
        ];
    }
}

$yesterday = json_decode(@file_get_contents('snapshot.json'), true) ?: [];
foreach ($today as $key => $now) {
    $was = $yesterday[$key] ?? null;
    if ($was && $was['price'] !== $now['price'])
        echo "PRICE $key: {$was['price']} -> {$now['price']}\n";
    if ($was && $was['available'] && !$now['available'])
        echo "SOLD OUT $key\n";
}
file_put_contents('snapshot.json', json_encode($today));

Run it on a daily cron, pipe the output to email, and you've built a tiny competitor radar. This is genuinely how far a free DIY solution gets you — and for one or two competitors it might be all you need.

The limits (read before you build a business on it)

Is this legal/ethical? This endpoint serves the same public data any shopper sees, in a different format. It exists by design and has for a decade. Reading it at low frequency is no different from visiting the store — you're just faster at taking notes. Don't log in anywhere, don't bypass protections, don't overload anyone's server, and you're in standard price-intelligence territory.

From trick to system

The trick gives you the data. The value comes from the diffing over time: what changed, when, and a notification you actually see. That means snapshots, storage, comparison logic, alert delivery, and handling the boring edge cases (variants renamed, products deleted, pagination). It's a fun weekend project — we'd know, because that weekend project is how StoreSentry started.

Want this automated?

StoreSentry runs the snapshots, does the diffing, and sends you a clean digest — price changes, new launches, restocks and sellouts across all your competitors. Email or Telegram. Free plan for 1 competitor.

Install the beta — free for 1 competitor →

Related reading