# Legacy RudderStack App vs. Shopify Source Solution

<p>RudderStack offers two ways to track events from your Shopify store:</p>
<ul>
<li>The <a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/legacy-app/" >legacy RudderStack app</a>, which injects a tracking script into your storefront and listens to Shopify webhooks.</li>
<li>The <a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/" >Shopify Source Solution</a>, which uses Shopify&rsquo;s <a href="https://shopify.dev/docs/api/web-pixels-api" >Web Pixels API</a> through the <a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/products/#rudderstack-pixel" >RudderStack Pixel</a> app or the <a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/products/#shopify-custom-pixel" >Shopify Custom Pixel</a>.</li>
</ul>

<blockquote class="warning">
  <div class="tip-quote">
    
    <div class="tip-text">RudderStack recommends the <strong>Shopify Source Solution</strong> for all new setups. The legacy app is affected by <a href="#shopify-is-deprecating-script-tags" >Shopify&rsquo;s script tag deprecation</a>. If you are using the legacy app, see the <a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/migration/" >Migration Guide</a> to switch.</div>
  </div>
</blockquote>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="comparison">Comparison</h2><table>
  <thead>
      <tr>
          <th>Capability</th>
          <th>Legacy RudderStack app</th>
          <th>Shopify Source Solution (RudderStack Pixel / Shopify Custom Pixel)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Client-side tracking mechanism</td>
          <td>Tracking script injected through a Shopify script tag, which reads the theme&rsquo;s page markup (for example, add-to-cart and login forms)</td>
          <td>Shopify <a href="https://shopify.dev/docs/api/web-pixels-api" >Web Pixels API</a></td>
      </tr>
      <tr>
          <td>Works independently of the store theme</td>
          <td><i class="fa-solid fa-circle-xmark fa-xl"></i></td>
          <td><i class="fa-solid fa-circle-check fa-xl"></i></td>
      </tr>
      <tr>
          <td>Client-side checkout events</td>
          <td><i class="fa-solid fa-circle-xmark fa-xl"></i></td>
          <td><i class="fa-solid fa-circle-check fa-xl"></i></td>
      </tr>
      <tr>
          <td>Tracking on the Order Status / Thank You page</td>
          <td><i class="fa-solid fa-circle-xmark fa-xl"></i></td>
          <td><i class="fa-solid fa-circle-check fa-xl"></i></td>
      </tr>
      <tr>
          <td>JavaScript SDK</td>
          <td>Legacy JavaScript SDK (v1.1) with custom auto-tracking code</td>
          <td><strong>RudderStack Pixel</strong>: Not required — events are sent directly to RudderStack<br><strong>Shopify Custom Pixel</strong>: Loads the <a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/" >RudderStack JavaScript SDK</a> v3</td>
      </tr>
      <tr>
          <td>Server-side events</td>
          <td>Shopify webhooks</td>
          <td>Shopify webhooks</td>
      </tr>
      <tr>
          <td>Affected by Shopify&rsquo;s <a href="#shopify-is-deprecating-script-tags" >script tag deprecation</a></td>
          <td>Yes — client-side tracking stops on March 1, 2027</td>
          <td>No</td>
      </tr>
      <tr>
          <td>Future support</td>
          <td>Will be deprecated</td>
          <td>Actively developed</td>
      </tr>
  </tbody>
</table>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="why-use-the-shopify-source-solution">Why use the Shopify Source Solution</h2><!-- end-chunk -->
<!-- begin-chunk -->
<h3 id="works-with-any-shopify-theme">Works with any Shopify theme</h3><p>The legacy app&rsquo;s tracking script detects user actions by reading your theme&rsquo;s page markup — for example, add-to-cart forms and login or registration forms — so its client-side tracking depends on how your theme structures these pages. The Shopify Source Solution uses Shopify&rsquo;s Web Pixels API, which works independently of your store&rsquo;s theme — no theme-specific adjustments are needed.</p>
<!-- end-chunk -->
<!-- begin-chunk -->
<h3 id="tracks-the-checkout-flow">Tracks the checkout flow</h3><p>Tracking the checkout flow was restricted with the legacy app&rsquo;s tracking script. With Shopify&rsquo;s <a href="https://shopify.dev/docs/apps/build/checkout" >Checkout Extensibility</a>, the Shopify Source Solution captures checkout events directly from the client side, resulting in more accurate event capture and less maintenance overhead.</p>
<!-- end-chunk -->
<!-- begin-chunk -->
<h3 id="shopify-is-deprecating-script-tags">Shopify is deprecating script tags</h3><p>The legacy app loads its <a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/legacy-app/#track-client-side-events" >client-side tracking</a> script through Shopify <a href="https://shopify.dev/docs/api/admin-rest/latest/resources/scripttag" >script tags</a>, which Shopify has <a href="https://shopify.dev/changelog/posts/online-store-script-tags-deprecation" >deprecated</a> in favor of Web Pixels and app embed blocks:</p>
<table>
  <thead>
      <tr>
          <th>Date</th>
          <th>Shopify change</th>
          <th>Impact on the legacy app</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>October 1, 2026</td>
          <td>Apps can no longer create or update script tags.</td>
          <td>Setting up the legacy app on a new store fails with a <code>script tag register failed</code> error. Changing the write key or data plane URL in the app returns a <code>script tag update failed</code> error — the webhook settings are updated, but the client-side tracking script keeps using the old values.</td>
      </tr>
      <tr>
          <td>March 1, 2027</td>
          <td>Shopify stops loading existing script tags on storefronts.</td>
          <td>Client-side tracking stops for all stores using the legacy app.</td>
      </tr>
  </tbody>
</table>
<p>The legacy app&rsquo;s tracking script also does not track the Order Status and Thank You pages, and it uses an older version of the RudderStack JavaScript SDK (v1.1). The Shopify Source Solution does not use script tags, so it is not affected by the script tag deprecation.</p>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="next-steps">Next steps</h2><ul>
<li><a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/products/" >Products</a>: Choose between the RudderStack Pixel app and the Shopify Custom Pixel.</li>
<li><a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/scenarios/" >Shopify Store Scenarios</a>: Find the recommended setup for your store.</li>
<li><a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/migration/" >Migration Guide</a>: Migrate from the legacy app.</li>
</ul>

