For dropshippers and DTC owners who study a competing Shopify store

Shopify store spy: 7 free checks, no tool

A Shopify store shows more than most spy tools resell. Add ?sort_by=best-selling to its /collections/all page to see its products in sales order, and ?sort_by=created-descending to see its newest ones. Open /products/<handle>.js to read the price, the compare-at price and the date the product was created. Then search the store's page in the Meta Ad Library to see every active ad, and paste each ad into Playhead to get its hook, beats and claims with the second of each. What no public page shows is revenue, orders or traffic.

By The Playhead team

We build the video layer these numbers are measured on. Every figure about Playhead comes from the source file it lives in.

Published 8 min read

The short version

  • Shopify's collection pages sort by 8 options, and best-selling is one of them. /collections/all?sort_by=best-selling lists a store's products in its own sales order.
  • Every product has a public JSON at /products/<handle>.js with 10 fields worth reading, including created_at, price and compare_at_price.
  • Prices in that JSON are in the smallest unit of the currency: 12900 means 129.00.
  • The Meta Ad Library keeps an ad that reached the EU for 1 year after its last impression, so an EU country filter shows ads the store has already stopped.
  • No public page shows a store's revenue, orders or traffic. A tool that shows them is showing an estimate.

What is on this page and on no other

Every page about these products carries the same prices and the same feature lists. These are the facts this one produced itself, and how each one was made.

  • Shopify's public product JSON carries 10 fields a competitor can read with no tool: available, compare_at_price, created_at, price, price_min, price_max, published_at, tags, type and vendor.

    Counted Counted in the example response of Shopify's Ajax API product reference on shopify.dev, read on 26 September 2026.

  • Shopify collections sort by 8 options: manual, best-selling, title ascending and descending, price ascending and descending, and created ascending and descending. 2 of the 8 are the ones a competitor needs.

    Counted Counted in the sort options of Shopify's Liquid collection reference on shopify.dev, read on 26 September 2026.

  • Of the 5 questions a store spy is asked, 3 have a public answer and 2 do not: best sellers, launch dates and ads are public, revenue and traffic are not.

    Counted Each question checked against what Shopify's storefront and Meta's Ad Library publish, on 26 September 2026.

What a Shopify store shows, and what it hides

Most of what a spy tool sells is on the store's own pages. The rest is an estimate.

What a competing Shopify store publishes, checked against Shopify's and Meta's own documentation on 26 September 2026
The questionPublic?Where to look
Which products sell bestYes, as a rank/collections/all?sort_by=best-selling
Which products are newYes, with a date/collections/all?sort_by=created-descending, then created_at in the product JSON
The price and the discountYesprice and compare_at_price in /products/<handle>.js
Which ads the store runsYesThe Meta Ad Library, by the store's page name
What happens inside each adYes, if you watch itPaste the ad into Playhead for the hook, beats and claims
Revenue and ordersNoNot published anywhere. Every figure is an estimate
TrafficNoNot published by the store. Every figure is a panel estimate

The 7 checks, in order

About 20 minutes for one store, with a browser and nothing else.

  1. Confirm the store runs on Shopify

    Open the page source and search for cdn.shopify.com. The same source holds a Shopify.theme object with the name of the theme the store uses.

  2. List the best sellers

    Open the store's /collections/all?sort_by=best-selling. The first row is what sells best in the store's own count. Write down the first 10 product handles, the last part of each product URL.

  3. List the newest products

    Open /collections/all?sort_by=created-descending. A product that is both new and high in the best-selling list is the one the store is scaling now.

  4. Read each product's JSON

    Open /products/<handle>.js for each handle. Note created_at, price and compare_at_price. Divide by 100: 12900 is 129.00. A compare_at_price above the price is the discount the store shows.

  5. Find every ad the store runs

    Open the Meta Ad Library, choose All ads, and search the store's Facebook page name. Filter by active status. Each ad shows the date it started running.

  6. See the ads it stopped

    Set the country filter to an EU country. Meta keeps an ad that reached the EU for 1 year after its last impression, with its reach and the age and gender split.

  7. Read each ad, second by second

    Paste each ad link into Playhead. The answer names the hook, every beat with its start and length, every claim at the second it is legible, and the second the product first appears.

What the checks tell you

Three signals, and each one comes from a public field.

An ad that runs for 30 days or more
It paysA store rarely keeps paying for an ad that loses money for 30 days. The start date is on every ad in the Ad Library
A product created in the last 30 days, high in best-selling
It scalesCompare created_at in the product JSON with the product's place in the best-selling sort
compare_at_price above price
A shown discountDivide the difference by compare_at_price for the discount the page shows, for example 12900 against 17900 is 28 per cent
The same creative in 5 or more ads
A winner being testedThe Ad Library groups ads that use the same creative. More versions usually mean more budget behind one idea

The checks tell you which product and which ad. They do not tell you why the ad works. That answer is inside the video: what the first 3 seconds show, when the price appears, how long the proof runs, whether it works with the sound off. Paste up to 10 of the store's ads into one Playhead set, and the same fields come back for each one, so what the long-running ads share is visible row by row.

A Playhead beat sheet of a video ad. Seven rows, each with a frame, the beat name, its start and length, what is on screen and what is said.
A Playhead beat sheet: every beat of an ad, with its start, its length, what is on screen and what is said.

Keep what you find

A free account keeps every teardown, so the next question costs less.

The verdict

A competing Shopify store is mostly an open book: 2 URLs give its best sellers and its newest products, 1 JSON per product gives prices and launch dates, and the Meta Ad Library gives every ad for up to 1 year. Revenue and traffic are the 2 things no public page holds, so treat any figure for them as a guess. The step people skip is the ad itself. Once the checks have named the ad that runs longest, paste it into Playhead and read what it does second by second, which is the part a store never publishes and every copy of its product needs.

Common questions

How can I see the best-selling products of a Shopify store?

Add ?sort_by=best-selling to the store's /collections/all page. Shopify sorts a collection by 8 options, and best-selling is one of them, so the first products on that page are the ones that sell best in the store's own count. The page gives a rank, not a number of sales.

Can I see the sales or revenue of a Shopify store?

No public page shows a Shopify store's revenue or its number of orders. A figure for either is an estimate made outside the store. The best-selling sort and the start dates of its ads are the two public signals that come closest.

Is there a free Shopify store spy extension?

An extension is not needed for the 7 checks on this page. The theme is in the page source, the best sellers and new products are one URL each, the product data is in /products/<handle>.js, and every ad is in the Meta Ad Library.

How do I find out when a Shopify product was launched?

Open /products/<handle>.js on the store and read created_at and published_at. Both are part of the public product JSON that Shopify documents in its Ajax API reference.

How do I see the ads a Shopify store stopped running?

Set the country filter in the Meta Ad Library to an EU country. Meta keeps an ad that reached the EU for 1 year after its last impression, so an ad the store stopped last month is still there, with its reach.

Written by

The Playhead team

We build the video layer these numbers are measured on. Every figure about Playhead comes from the source file it lives in.

How we write these articles, and how to send a correction