Shopify Store Report — Catalog, Pricing, Discounts & Growth
Pricing
from $15.00 / 1,000 stores
Shopify Store Report — Catalog, Pricing, Discounts & Growth
Profile any Shopify store in one row: catalog size, price range, how much of it is discounted right now, stock depth, how many products launched in the last 30 days, assortment mix and theme.
Pricing
from $15.00 / 1,000 stores
Rating
0.0
(0)
Developer
Beta Pos
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Paste a store address. Get one row that tells you how that business is actually trading.
Catalog size, price range, how much of it is discounted right now, how deep those discounts run, how much is still in stock, and how many products they launched in the last 30 days. Paste a list of competitors and profile them all in a single run.
No API key. No login. No proxies. Nothing estimated.
What one row tells you
Two real stores, read on the same day:
| allbirds.com | deathwishcoffee.com | |
|---|---|---|
| Products | 291 | 148 |
| Median price | $91 | $33 |
| % of catalog on sale | 53.3% | 18.2% |
| Average discount | 41.5% | 37.5% |
| % of variants in stock | 11.8% | 88.2% |
| New products, last 30 days | 0 | 5 |
| New products, last 90 days | 0 | 20 |
| Catalog age | 7.8 years | 12.8 years |
Read the first column: half the catalog marked down, discounts averaging 41%, nine variants in ten sold out, and nothing new launched in three months. Read the second: light discounting, shelves full, a steady trickle of new products.
Same category, same country, completely different trading positions — and you can see it in one line without opening a single product page.
What you get
One row per store.
| Group | Columns |
|---|---|
| Catalog | productCount, variantCount, avgVariantsPerProduct, avgImagesPerProduct |
| Pricing | priceMin, priceMedian, priceMax |
| Discounting | productsOnSale, percentOnSale, avgDiscountPercent, maxDiscountPercent |
| Stock | variantsInStock, percentInStock |
| Momentum | productsAdded30d, productsAdded90d, newestProductAt, oldestProductAt, catalogAgeDays |
| Assortment | topVendors, vendorCount, topProductTypes, productTypeCount |
| Storefront | themeName, socialInstagram, socialFacebook, socialTiktok, socialYoutube, analyticsGa4, analyticsGtm, detectedTools |
| Provenance | feedSource, usesCustomStorefront, catalogTruncated, status, scannedAt |
Nothing here is estimated
Every number is computed from the catalog the store publishes itself, then shown to you. There is no revenue model, no traffic guess, no risk score invented from a formula.
That is a deliberate limit, and it is the point: you can verify any figure in this report by opening the store yourself. A field this actor cannot read — a theme a headless storefront does not expose, a pixel loaded server-side — comes back blank rather than filled in with a guess.
What it costs
One charge per store profiled. A store that returns nothing is not billed.
Reading a store means walking its entire catalog, not sampling the front page — a 1,300-product store is 1,300 products of arithmetic behind that single row.
Typical uses
- Competitor screening — profile 50 stores, sort by discount depth or launch rate, then look closely at the three that matter.
- Sale-season watch — schedule it weekly and watch
percentOnSaleandavgDiscountPercentmove across a whole category. - Sourcing and partnerships — find stores that are actually launching product rather than clearing stock.
- Lead qualification — catalog size, price band and assortment tell you in one row whether a store is worth a pitch.
- Feeding an AI agent — callable over the API and through MCP, so an assistant can profile a store mid-task.
Input
| Field | What it does |
|---|---|
| Shopify store URLs | One or more addresses. A bare domain, a homepage, a product page or a .myshopify.com address all work. |
| Max products to read per store | How deep to read each catalog before summarising. Default 3000, which covers almost every store outright. Runs that hit the cap are flagged as catalogTruncated. |
| Include theme, socials and marketing tools | Reads the storefront page for theme, social profiles, analytics IDs and recognisable marketing apps. On by default. |
{"storeUrls": ["allbirds.com", "deathwishcoffee.com", "rothys.com"],"maxProductsScanned": 3000}
How it works
Shopify serves a public product feed at /products.json on every storefront. This actor walks that feed 250 products at a time, computes the profile from the whole catalog, and reads the storefront page once for theme and marketing signals.
Headless storefronts are followed to their real shop. A growing number of brands run a custom front end on their own domain, so brand.com/products.json answers with a web page instead of a feed. This actor reads the shop address the site publishes in its own markup and profiles the catalog from there — the row is marked usesCustomStorefront so you know.
Because it uses the store's own public feed it needs no proxies, and it does not break when a theme changes.
Honest limits
Worth knowing before you run it:
- Stock figures are what the feed publishes, from the United States. Shopify exposes an in-stock/out-of-stock flag per variant, never a quantity — and for stores running separate regional markets, that flag reflects the market the request lands in. Runs here originate from US servers, so stock reads as a US shopper sees it. Measured: one store reported 46.6% of variants in stock from the US and 0.1% from Asia on the same day. Price, discount, catalog and momentum figures are unaffected.
- Currency is not published in the feed, so prices are reported as plain numbers in the store's own currency.
- Theme, analytics IDs and marketing tools are best-effort. Modern storefronts load a lot of this server-side or through Shopify's pixel API, where it simply is not visible. Blank means "not readable", not "not used".
productsAdded30dcounts catalog records, not restocks. A product re-created or migrated will look new.- Password-protected, pre-launch and feed-disabled stores return nothing, with a per-store reason in the
statuscolumn. - A few brand domains sit behind bot protection. Those are reported rather than failing the run; the store's
.myshopify.comaddress usually works in their place.
Scheduling
Trading positions move. Schedule this weekly against a list of competitors and each run stores a dated snapshot — discount depth and launch rate over time is the shape of a category, and this is all it takes to record it.
Legal
This actor reads only data that a Shopify store publishes publicly, at addresses the store itself serves to anyone. It collects no personal data, requires no login, and bypasses no access control. You remain responsible for how you use the exported data.
Questions, or a store that behaves oddly? Open an issue on the actor — issues are read and answered.