<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: zhaoheng588-tech</title>
    <description>The latest articles on DEV Community by zhaoheng588-tech (@zhaoheng588tech).</description>
    <link>https://dev.to/zhaoheng588tech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4079989%2F8fed0c9a-e40b-4dd8-8812-1fe0812754ee.png</url>
      <title>DEV Community: zhaoheng588-tech</title>
      <link>https://dev.to/zhaoheng588tech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zhaoheng588tech"/>
    <language>en</language>
    <item>
      <title>How to Scrape Any Shopify Store in Seconds (No API Key, No Captcha)</title>
      <dc:creator>zhaoheng588-tech</dc:creator>
      <pubDate>Sun, 16 Aug 2026 10:30:13 +0000</pubDate>
      <link>https://dev.to/zhaoheng588tech/how-to-scrape-any-shopify-store-in-seconds-no-api-key-no-captcha-2j0p</link>
      <guid>https://dev.to/zhaoheng588tech/how-to-scrape-any-shopify-store-in-seconds-no-api-key-no-captcha-2j0p</guid>
      <description>&lt;p&gt;Every Shopify storefront exposes its full product catalog through a public endpoint — and most paid "product research tools" just repackage it for $50+/month. Here's how to do it yourself, for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  The secret: /products.json
&lt;/h2&gt;

&lt;p&gt;Every Shopify store has a public endpoint:&lt;/p&gt;

&lt;p&gt;https:///products.json&lt;/p&gt;

&lt;p&gt;No auth. No API key. No captcha. The store's own frontend uses this endpoint to render — so it's open by default.&lt;/p&gt;

&lt;p&gt;Try it right now — open this in your browser:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://allbirds.com/products.json?limit=5" rel="noopener noreferrer"&gt;https://allbirds.com/products.json?limit=5&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll see JSON with products, prices, variants, compare-at values, tags, and images.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;250 products per page — paginate with ?page=2, ?page=3...&lt;/li&gt;
&lt;li&gt;Compare-at price = the sale signal. When compare_at &amp;gt; price, that product is actively on sale — the clearest "this seller is pushing a winner" signal in product research.&lt;/li&gt;
&lt;li&gt;Works on huge stores — I tested gymshark.com: 9,466 products / 57,532 SKUs, paginated cleanly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A minimal scraper (Python, ~40 lines)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_products&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_pages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_pages&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/products.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;limit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;
        &lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;products&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;
        &lt;span class="n"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;

&lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_products&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;allbirds.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;products&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; products fetched&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What you can do with it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Dropshipping research: scan competitor stores → find price gaps and what they're pushing&lt;/li&gt;
&lt;li&gt;Competitor price monitoring: snapshot daily, diff the data → catch price changes within 24h&lt;/li&gt;
&lt;li&gt;Product research: full catalog audits with price distribution&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Production-ready version
&lt;/h2&gt;

&lt;p&gt;I packaged this into an open-source tool: Shopify Scout&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic pagination (handles 10,000+ product stores)&lt;/li&gt;
&lt;li&gt;Price intelligence: range, median, average&lt;/li&gt;
&lt;li&gt;Compare-at sale signal detection&lt;/li&gt;
&lt;li&gt;Keyword and price filters&lt;/li&gt;
&lt;li&gt;Clean Markdown report output&lt;/li&gt;
&lt;li&gt;MIT licensed — free to use and modify
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;requests
python shopify_scout.py allbirds.com &lt;span class="nt"&gt;--sort&lt;/span&gt; price-desc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Caveats
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Some stores disable the endpoint — the script tells you clearly.&lt;/li&gt;
&lt;li&gt;Use only for stores you have permission to research, and respect their terms.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this saved you time, star the repo: &lt;a href="https://github.com/zhaoheng588-tech/shopify-scout" rel="noopener noreferrer"&gt;https://github.com/zhaoheng588-tech/shopify-scout&lt;/a&gt; 🚀&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
