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

# Connect Shopify Analytics for Jurni-Hosted Commerce

> Connect a Shopify Headless Storefront public access token so Jurni-hosted commerce can be represented in Shopify channel reporting, and understand how this differs from native Shopify Pages.

The **Shopify Analytics** integration is for Shopify brands that want Jurni-hosted commerce to appear as a Shopify Headless storefront/channel in Shopify reporting.

This is separate from Jurni's own analytics and attribution. It gives Shopify a Storefront API identity for the Jurni-hosted commerce flow.

## When this is useful

Use this setup when shoppers purchase through Jurni-hosted pages served through the Shopify app proxy or a Jurni custom subdomain and you want that Storefront API activity represented in Shopify's channel reporting.

Native **Shopify Pages** already run inside the Shopify Online Store theme, so they use a different storefront surface. Do not treat this Headless-channel token as the mechanism that makes Shopify Pages work.

## What Jurni needs

Jurni currently asks for one field:

**Shopify Storefront public access token**

The token is generated by Shopify's **Headless** sales channel after you create a storefront.

<Warning>
  Use the **public** Storefront API access token. Do not paste Shopify's private Storefront token into Jurni.
</Warning>

## Connect Shopify Analytics

<Steps>
  <Step title="Install Shopify's Headless channel">
    In Shopify admin, install/add the **Headless** sales channel if it is not already available for the store.
  </Step>

  <Step title="Create a storefront">
    Open **Sales channels → Headless** and create a storefront for the Jurni integration.
  </Step>

  <Step title="Give the storefront a clear name">
    A name such as **Jurni Headless Storefront** makes the channel easy to recognize in Shopify. The identifier Jurni actually stores is the public access token, so the display name is primarily an operational/reporting choice.
  </Step>

  <Step title="Copy the public access token">
    Open the Storefront API token settings for that Headless storefront and copy the **Public access token**.
  </Step>

  <Step title="Save it in Jurni">
    In **Settings → Integrations → Data Integrations → Shopify Analytics**, paste the public access token and choose **Save Changes**.
  </Step>
</Steps>

Jurni shows the integration as **Connected** when a Storefront public access token is saved.

## Verify in Shopify

After real Jurni-hosted traffic and commerce activity begins, use Shopify analytics/reports to inspect the Headless storefront/channel. Shopify reporting is not necessarily real-time, so allow its reporting pipeline to update before diagnosing a missing channel immediately after setup.

For order-level debugging, remember that Shopify **Sales channel** and Jurni **attribution** answer different questions. Jurni attribution is based on Jurni visit/cart/checkout evidence, not the Shopify channel label.

## Updating or disconnecting

The Jurni integration lets you:

* **Update token** when the Shopify Headless storefront/token changes
* **Disconnect** by removing the saved token

If you rotate or replace the public token in Shopify, update Jurni so new Jurni-hosted storefront activity continues using the intended Headless configuration.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Jurni does not show Connected">
    Confirm the value is the public Storefront API token from a Shopify Headless storefront and that it was saved in the correct Jurni workspace.
  </Accordion>

  <Accordion title="I only use native Shopify Pages">
    Shopify Pages are served by the Online Store theme. You do not need this Headless reporting setup simply to publish or render a Shopify Page.
  </Accordion>

  <Accordion title="Shopify and Jurni reports do not match">
    Compare the same date range/timezone and remember that channel reporting and Jurni attribution use different models. See **Analytics Differences** and **Shopify Sales Channel**.
  </Accordion>
</AccordionGroup>

## Related guides

* Shopify Setup Overview
* Shopify Sales Channel
* Attribution Overview
* Shopify Pages
* Analytics Differences


## Related topics

- [An integration is not working](/integrations/troubleshooting.md)
- [Connect the cart on Shopify Pages](/shopify-pages/cart-config.md)
- [Why Shopify Orders Show Jurni as the Sales Channel](/troubleshooting/jurni-sales-channel.md)
- [Shopify Setup Overview](/getting-started/shopify-setup-overview.md)
- [Connect your review provider](/integrations/review-integrations.md)
