Linking Shopify as a source
The Shopify connector can sync your Shopify store data into PostHog.
To sync Shopify data:
In Shopify
- Go to your Shopify store's admin panel at
https://admin.shopify.com/store/your-store-id - Click Settings.
- Click Apps and sales channels.
- Click Develop apps.
- IMPORTANT: Click Build apps in Dev Dashboard (legacy apps will be deprecated January 1 2026).
- Click Create app.
- Give your app a name and click Create.
- You will be redirected to a screen for releasing a new version of your app. Here, you need to:
- Set the app URL. Use the default value
https://shopify.dev/apps/default-app-home. - Choose the app scopes. We recommend selecting all read options for the simplest setup, but only
read_ordersis required to sync core order data. See scope requirements for details. - Click Release and fill in the optional release details.
- Go to Home in the Dev Dashboard and click Install app to install the app in your store.
- Go to Settings in the Dev Dashboard and note your
Client IDandSecretfor later.
For more information about creating apps in Dev Dashboard see the Shopify docs.
In PostHog
- Go to the data pipelines page, and select the Sources tab.
- Click the + New source button and select Shopify by clicking the + Create button.
- Fill in your Shopify Store ID – enter your store subdomain (the
my-storepart ofmy-store.myshopify.com) or paste your full store URL. Also fill in the Client ID and Secret from above. - Optional: Add a prefix to your table names.
- Click Next.
- Select the Shopify objects you want to sync, and make any sync configuration changes you need.
- Click Import.
After these setup steps, your Shopify data will be automatically synced to the PostHog data warehouse. You can see details and progress in the data pipelines sources tab.
Configuration
| Option | Description |
|---|---|
Store idType: text Required: True | Your store subdomain — the |
Client IDType: text Required: True | |
SecretType: password Required: True |
Scope requirements
The read_orders scope is sufficient to sync core order data. However, some fields in the orders table require additional scopes:
| Field | Required scope (any one) |
|---|---|
fulfillmentOrders | read_merchant_managed_fulfillment_orders, read_third_party_fulfillment_orders, or read_assigned_fulfillment_orders |
paymentTerms | read_payment_terms |
Note: If your token doesn't have these additional scopes, the orders sync still succeeds — those fields are simply omitted from the synced data. You don't need to grant extra permissions for data you don't need.
Supported tables
| Table | Description | Sync method | Incremental field | Primary key |
|---|---|---|---|---|
abandonedCheckouts | A checkout a customer started but did not complete, leaving items in their cart. | Incremental, Full refresh | createdAt | — |
articles | A blog post (article) published to one of the shop's online store blogs. | Incremental, Full refresh | updatedAt | — |
blogs | A blog on the shop's online store that groups together articles. | Full refresh | — | — |
catalogs | A catalog that maps a set of products and prices to a market, company location, or app. | Full refresh | — | — |
collections | A grouping of products that can be displayed and merchandised together in the store. | Incremental, Full refresh | updatedAt | — |
customers | A customer of the shop, holding contact details and order history. | Incremental, Full refresh | updatedAt | — |
discountCodes | A discount and its application rules — a code or automatic discount applied at checkout. | Incremental, Full refresh | updatedAt | — |
orders | A customer's completed request to purchase one or more products from the shop. | Incremental, Full refresh | updatedAt | — |
products | A product the shop sells, grouping its variants, media, and selling details. | Incremental, Full refresh | updatedAt | — |