> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sideshift.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect your own Shopify app

> A complete guide to connecting Shopify, installing checkout tracking, and checking products, samples, orders, and automatic token renewal.

Connect an app that **you own in the same Shopify organization as your store**. This connects your catalog, samples, and verified orders to SideShift while the SideShift public Shopify app is unavailable.

There are two required parts: **connect the app credentials**, then **install the checkout pixel**. A green store connection confirms the first part. It does not confirm that checkout tracking works.

## Keep these pages open

| Page | What you do there |
| - | - |
| [SideShift → Settings → Integrations](https://app.sideshift.app/settings?tab=integrations) | Add your store, connect its app, sync products, and inspect tracking. Connecting Shopify does not require a paid SideShift plan or payment card. |
| [Shopify Dev Dashboard](https://dev.shopify.com/dashboard) | Create and release the app, install it, and copy its credentials. |
| [Shopify admin](https://admin.shopify.com/) | Confirm the store, install the custom pixel, and run a checkout test. |
| [Shopify custom-pixel instructions](https://help.shopify.com/en/manual/promoting-marketing/pixels/custom-pixels) | Shopify’s reference for creating and connecting custom pixels. |

<Note>
  Use the **same store and organization** in all three tabs. The app belongs to your Shopify organization; the SideShift connection belongs to the company selected in SideShift. A personal Shopify login can have access to several organizations, so check the selected organization before creating the app.
</Note>

## Before you start

* You can create and install apps in the Shopify organization that owns the store. If these controls are missing, ask the store owner to perform the Shopify steps or grant the required access.
* You can manage integrations for the correct SideShift company.
* You know the store’s `your-store.myshopify.com` domain. Find it in **Shopify → Settings → Domains**. Use this domain to connect, even if customers shop at a different custom domain.
* For a practice run, use a development store or Shopify’s test-payment mode. Do not test a real payment or fulfillment by accident.

You do not need a Meta ad account just to connect Shopify, sync products, or track creator sales. Connect Shopify for free from **Settings → Integrations** — no paid SideShift plan or payment card is required. [Managed advertising setup](/pixel/advertising) is a separate step.

## Part 1: connect the app

<Steps>
  <Step title="Add the store in SideShift">
    Open [Settings → Integrations](https://app.sideshift.app/settings?tab=integrations), select **Shopify → Connect → Use your own app**, then enter the store name and `myshopify.com` domain. Click **Continue to app credentials**.

    You can also start from the campaign builder’s **Connect Shopify** action. If the store already exists in SideShift, open that store and choose **Connect your own Shopify app**. Keep this page open.
  </Step>

  <Step title="Create the app in the correct Shopify organization">
    Open the [Dev Dashboard](https://dev.shopify.com/dashboard). Select the organization that contains your store, then **Apps → Create app → Create app manually**.

    Suggested app name: **SideShift Store Connection**. The name is for your team; it does not have to match the store name.

    If Shopify asks for an **App URL**, use `https://app.sideshift.app/ads`. Turn off **Embed app in Shopify admin**. This connection uses server-side app credentials, so it does not need an OAuth redirect URL or the legacy install flow.
  </Step>

  <Step title="Set the five required scopes">
    In the app form or version editor, find **API access → Scopes**. Paste this exact list:

    ```text theme={"system"}
    read_products,read_inventory,read_orders,write_orders,read_fulfillments
    ```

    | Scope | Why SideShift needs it |
    | - | - |
    | `read_products` | Import products and variants for creator campaigns. |
    | `read_inventory` | Read inventory information for products and samples. |
    | `read_orders` | Verify Shopify orders and their payment state. |
    | `write_orders` | Create approved, free creator sample orders. |
    | `read_fulfillments` | Read fulfillment and tracking updates for samples. |

    These scopes do not grant unlimited order history. Shopify’s standard order-history limits still apply. For details, see [Shopify access scopes](https://shopify.dev/docs/api/usage/access-scopes).
  </Step>

  <Step title="Release the version and install it on the store">
    Create or release the version. A version name such as **sideshift-1** is sufficient.

    Return to **Apps** in the Dev Dashboard. Open the **Actions** menu beside your app and select **Install app**. Choose the intended store, review the requested access, and click **Install**.

    **Check:** the version is active and the app is installed on the store. Creating an app or saving a version without installing it is not enough.
  </Step>

  <Step title="Copy the Client ID and Client secret into SideShift">
    Open your app’s **App settings → Credentials** in the Dev Dashboard. Copy **Client ID** and **Client secret** into the matching SideShift fields, then click **Connect app**.

    Use the app’s Client ID and Client secret—not an Admin API access token, Storefront token, Shopify password, or SideShift API key. Keep the secret in the credential field. Do not paste it into pixel code, a theme, a support message, or a shared document.

    **Check:** SideShift shows **Connected** and opens the **Tracking** instructions. SideShift validates the app’s scopes and registers the order, refund, fulfillment, and uninstall webhooks. If registration fails, resolve **Needs attention** before proceeding.
  </Step>

  <Step title="Sync and check the catalog">
    Click **Sync products**, then open **Products**. Confirm the completion message and look for a product you recognize, including its variants and price.

    **Check:** the **Last synced** time is current. A connected store with an old sync time is not proof that a fresh Shopify request succeeded.

    If you connected from the campaign builder, complete the tracking setup and use **Return to campaign** to keep working on the existing campaign.
  </Step>
</Steps>

## Part 2: install checkout tracking

The merchant-owned app does **not** install SideShift’s public app pixel extension. Install the custom checkout pixel from the connected store’s **Tracking** tab.

<Steps>
  <Step title="Check for an existing SideShift pixel">
    Open [Shopify admin](https://admin.shopify.com/), choose the store, and go to **Settings → Customer events**.

    If SideShift is already listed, identify whether it is an app pixel or a custom pixel before adding another. Run one active SideShift checkout installation for this connection. A previous public-app pixel is managed by its app; do not assume deleting a custom pixel disables an app pixel. Contact SideShift before switching a live store if you cannot disable the old installation.
  </Step>

  <Step title="Add a custom pixel">
    Select **Add custom pixel**, name it **SideShift**, and open its editor.

    Keep **Marketing** and **Analytics** consent required. Review Shopify’s data-sale setting for your store. Use [Shopify’s pixel privacy guidance](https://shopify.dev/docs/api/web-pixels-api/pixel-privacy); do not remove consent requirements to make a test pass.
  </Step>

  <Step title="Paste the exact code from this SideShift store">
    In SideShift, open the store’s **Tracking** tab and click **Copy checkout pixel**. Replace the example code in Shopify’s custom-pixel editor with that snippet.

    Click **Save**, then **Connect** in Shopify. Review any confirmation Shopify presents.

    Copy from the correct SideShift company and store. The code contains that store’s pixel ID and destination; do not copy a snippet from another store or replace it with an example from a guide. It must not contain your Client secret.
  </Step>

  <Step title="Test a complete checkout with consent">
    Use Shopify’s **Test** action for this pixel. In the test storefront, grant analytics and marketing consent, view a product, add it to the cart, and complete a test checkout.

    Follow [Shopify’s test-order instructions](https://help.shopify.com/en/manual/checkout-settings/test-orders). Confirm that test-payment mode is active before submitting payment.

    In SideShift, click **Refresh diagnostics**. Check for new events from this test, not older events already listed: **product view**, **add to cart**, **checkout started**, and **checkout completed**.
  </Step>
</Steps>

**A page view is not a checkout test.** Browser checkout events carry the checkout identity. SideShift separately reads the order from Shopify to verify payment, refunds, and sample status. Browser code never proves that money was paid.

## Check the result you actually need

| Result | Evidence to check |
| - | - |
| **App connected** | SideShift says **Connected**, and a fresh product sync succeeds. |
| **Pixel connected** | The custom pixel says **Connected** in Shopify. |
| **Browser funnel works** | The current test produces product, cart, checkout-start, and checkout-completion events in SideShift. |
| **Creator attribution works** | Start from a generated creator tracking link for an approved submission; keep the same browser and consent through checkout. Verify the corresponding imported order is attributed to that creator. |
| **Order verified** | The order came from Shopify’s server-side verification, not only a browser event. |
| **Commission correct** | An eligible, accepted store-commission rule applies, the click is within the attribution window, and the verified order is payable. Check the creator earnings and refund adjustment. |
| **Managed-ad purchase delivery works** | The separate advertising setup and the matching provider purchase are verified. A Shopify checkout pixel alone does not prove this. |

Shopify test-payment orders and free sample orders **must not create payable sales commission**. A successful simulated checkout proves the browser path and test-order exclusion; it does not prove a real paid commission. Use a deliberately approved real order and eligible creator terms when verifying that final accounting step. See [the complete attribution test guide](/pixel/testing).

## Set up creators and samples

1. Open the campaign in SideShift and choose products from the connected Shopify catalog.
2. Enable sample requests only for the products and variants you want creators to request.
3. Review a creator’s request before approving it. Approval can create a free Shopify order, affect inventory, and start the store’s fulfillment process.
4. Check the sample’s order reference and fulfillment/tracking updates in SideShift against Shopify.

Free samples are excluded from sales commission. See [Shopify campaign setup and commission rules](/platform/shopify-integration).

## Token renewal: no daily reconnect

Shopify normally gives this merchant-app connection a **24-hour access token**. SideShift uses Shopify’s returned expiry, starts renewal when 15 minutes or less remain, and checks enabled connections in the background every five minutes. API requests use the same renewal logic.

This flow renews the access token by exchanging your **Client ID and Client secret** again. It is different from the rotating OAuth refresh token used by SideShift’s public app. You do not need to copy a new token each day.

Keep the app installed, its required permissions active, and its Client secret current in SideShift. If you rotate the secret, remove the app, or revoke access, automatic renewal cannot restore that access: reconnect the app in SideShift. See [Shopify’s client-credentials reference](https://shopify.dev/docs/apps/build/authentication-authorization/client-credentials-grant).

## Troubleshooting

| What you see | What to do |
| - | - |
| **No Create app or Install app action** | Confirm the selected organization and your Shopify permissions. The store owner can complete these steps. |
| **Credentials rejected** | Check that the app is released, installed on this exact store, and owned by the same Shopify organization. Copy the Client ID and Client secret again. |
| **Missing scopes** | Add the scopes named by SideShift, release the updated version, approve the updated installation if Shopify asks, then reconnect. |
| **Needs attention / webhook setup failed** | Reconnect after fixing the reported problem. Do not treat a saved credential as a complete installation. |
| **Connected but no products** | Run **Sync products**, inspect the completion message, and confirm the selected store. Check that Shopify contains products and the app has product/inventory access. |
| **No events** | Confirm **Save and Connect** in Shopify, the correct snippet, consent, and the storefront domain. Then run the pixel’s **Test** action and refresh diagnostics. |
| **Only old events are visible** | Check event timestamps. A green badge from an earlier installation is not evidence for the new pixel. |
| **Page views but no checkout completion** | Test through the order-confirmation page using Shopify’s pixel tester. Confirm the custom pixel is installed under **Customer events**, not only in the theme. |
| **Checkout event but no commission** | Check Shopify test/sample status, server order verification, creator link/identity, accepted commission terms, store, seven-day click window, and payout cap. |
| **Duplicate tracking after switching apps** | Check for both an old SideShift app pixel and the new custom pixel. Resolve the old installation before relying on attribution. |
| **The connection fails after secret rotation** | Open the store in SideShift, choose **Connect your own Shopify app**, and save the current credentials. |
| **Headless storefront** | Follow [Headless Shopify](/platform/shopify-integration#headless-shopify) to preserve visitor identity into checkout. |

## What this connection does not do

* It does not install SideShift’s public embedded Shopify app.
* It does not launch ads, connect Meta, or charge an advertising account.
* It does not grant unlimited historical-order access.
* It does not inherit the public app’s privacy-compliance subscriptions. Manage your merchant app’s privacy requests and data-retention responsibilities.
* Disconnecting or uninstalling the app does not automatically remove a separately installed custom pixel. Manage that pixel in Shopify **Customer events** too.

For separate advertising attribution, use [Advertising setup](/pixel/advertising). For custom websites outside Shopify, use [SideShift Pixel and Orders API](/platform/store-attribution); do not submit a connected Shopify order through both integrations.
