Every Shopify store ships with a JSON endpoint at /products.json, paginated with a limit and page parameter (up to 250 products per page). It was built for theme development - so a storefront’s JavaScript can fetch product data without a full page reload - but it’s public by default, and readable by anyone unless the store is password-protected.

It only lists active, published products - drafts and archived items don’t appear. Each entry includes the full variant list, images, description HTML, vendor, type and tags, but no exact stock counts and no currency (see our page on what data is and isn’t public).

This tool exists entirely to turn that feed into something usable - a CSV - without you needing to fetch or paginate it by hand.

Because it’s a standard part of every Shopify storefront rather than a special feature a merchant has to switch on, it behaves the same way across virtually every store you’ll encounter - the only real variable from store to store is whether it’s public at all, or hidden behind a launch password.