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

# Shopify

> Create a read-only custom app and connect your Shopify store so Pavo can learn your catalog, discounts, and monthly sales.

Pavo reads your store through the GraphQL Admin API. It never writes to Shopify and never reads customer data.

| Source      | Used for                                                                                                                                        |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| Products    | Catalog: title, description, vendor, type, category, tags, options, price range, variants (SKU, price, compare-at price), collection membership |
| Collections | Manual and automated collections: rules, product count, sample products                                                                         |
| Discounts   | Codes and automatic discounts: method, codes, summary, schedule, usage limits, combinability, usage count                                       |
| Orders      | Monthly sales summaries computed by Pavo: orders, gross and net sales, discounts, refunds, average order value, units, top products, top codes  |
| Shop        | Store profile: name, domain, currency, timezone, plan, country                                                                                  |

Not read: customer names, emails, or addresses; individual orders; inventory quantities; images; fulfillments.

## Step 1: Create a Custom App

You need the store owner account, or a staff account with the **App development → Develop** permission.

1. In Shopify admin, go to **Settings → Apps → Develop apps → Build apps in Dev Dashboard**. The Dev Dashboard ([dev.shopify.com/dashboard](https://dev.shopify.com/dashboard/)) opens.
2. On **Apps**, click **Create app → Start from Dev Dashboard**, name it `Pavo`, and click **Create**.
3. Open **Versions**. Under **API access → Scopes**, click **Select scopes** and pick exactly these four (or paste them as a comma-separated list). Leave **Optional scopes** empty.

| Scope             | Why                                                                        |
| ----------------- | -------------------------------------------------------------------------- |
| `read_products`   | Products, variants, collections                                            |
| `read_orders`     | Orders for the sales summaries                                             |
| `read_all_orders` | Orders older than 60 days. Without it Shopify serves only the last 60 days |
| `read_discounts`  | Discount codes and automatic discounts                                     |

```text theme={null}
read_products,read_orders,read_all_orders,read_discounts
```

4. Click **Release**. Because the app only acts on stores in your own organization, you approve the scopes yourself here. No merchant consent screen follows.

<Warning>
  All four scopes are required. Pavo checks the granted scopes on **Connect** and rejects the connector if any is missing.
</Warning>

## Step 2: Install the App on Your Store

1. In the Dev Dashboard, open the app. On the overview page, click **Install app** and pick the store if asked.
2. Shopify admin opens an **Install app** page listing the access the app needs, with a banner "This app hasn't been reviewed". That banner is normal for a custom app. Click **Install**.

The app and the store must belong to the same Shopify organization.

## Step 3: Share Connection Details

1. In the Dev Dashboard, open the app → **App settings**. Copy the **Client ID** and **Client secret**.
2. In Pavo, go to **Connectors → Shopify**, fill in the fields below and click **Connect**. Pavo verifies the credentials and the four scopes on save.

| Field             | Example                                                                           | Required |
| ----------------- | --------------------------------------------------------------------------------- | -------- |
| **Shop domain**   | `acme-store.myshopify.com` (the `.myshopify.com` address, not your custom domain) | Yes      |
| **Client ID**     | from the app's **App settings** page                                              | Yes      |
| **Client secret** | from the app's **App settings** page                                              | Yes      |

Pavo uses the client ID and secret to request short-lived access tokens from Shopify and refreshes them itself. To find your `.myshopify.com` domain: **Settings → Domains** in Shopify admin.

<Note>
  Already have a custom app created in Shopify admin before 2026? Its **Admin API access token** (starts with `shpat_`, under **Settings → Apps → Develop apps → your app → API credentials**) works too, as long as the app has the four scopes above. Share **Shop domain** and **Access token** instead of the client ID and secret. Use one method or the other, not both.
</Note>

## What to Expect

* **Sales summaries are computed by Pavo**, not read from Shopify Analytics. Orders are bucketed by processed date in the store timezone, test and cancelled orders are excluded, and refunds are netted into the month of the original sale. Totals can differ slightly from the Shopify dashboard.
* **13-month window.** Each scan recomputes the last 13 months of sales. The current month is flagged as in progress. Changes to orders older than 13 months are not reflected.
* **Re-scan to stay current.** Products, collections, and discounts are refreshed on every scan; removed items drop out of the index.
