# Shopify

![Shopify_logo.png](https://assets.relyanceuat.xyz/images/docs/34563796696333/34563796691469.png)
Shopify is a subscription-based eCommerce platform that you can use to build an online store. It helps businesses of all sizes sell physical and digital products.

In order to integrate Shopify with Relyance AI you will need your **Shop Domain** and **Access Token**.

#### In Shopify:

To generate an Admin API access token, you'll create and install a custom app within your store's admin panel. Shopify has deprecated legacy "private apps" — all custom integrations are now managed through the "Develop apps" dashboard.

Watch the walkthrough: [https://www.youtube.com/watch?v=8dymQjcylv8](https://www.youtube.com/watch?v=8dymQjcylv8)

1. Login to your Shopify account.
2. Your **Shop Domain** will be your store subdomain in your Shopify URL:

![Shopify-7.png](https://assets.relyanceuat.xyz/images/docs/34563796696333/34563796691725.png)

##### Step 1: Enable Custom App Development

1. Click **Settings** (the gear icon at the bottom of the left sidebar).
2. Click on **Apps and sales channels** from the menu.
3. Click the **Develop apps** button in the top right area.
4. Click **Allow custom app development** and confirm your choice. *Note: You must be the store owner or have explicit staff permissions to do this.*

##### Step 2: Create a Custom App

1. Click the **Create an app** button.
2. Enter an **App name** (e.g. "Relyance Scan").
3. Select your email from the **App developer** dropdown menu.
4. Click **Create app**.

![Shopify-3.png](https://assets.relyanceuat.xyz/images/docs/34563796696333/34563796691853.png)

##### Step 3: Configure the Redirect URL and API Scopes

1. Go to the **Configuration** tab of your new app.
2. Under **App URLs**, set the **Redirect URL(s)** field to `https://root.relyance.ai/api/oauth2`. This is required for Relyance to complete the OAuth authorization flow.
3. Under the **Admin API integration** section, and click it to open its connections.
4. Check the boxes next to the following permission scopes required for the Relyance integration: Use the scope search feature.
    - read_content
    - read_customers
    - read_customer_events
    - read_draft_orders
    - read_fulfillments
    - read_locations
    - read_orders
    - read_shipping
    - write_customer_data_erasure (only if processing DSRs)
5. Scroll to the bottom and click **Save**.

![Shopify-4.png](https://assets.relyanceuat.xyz/images/docs/34563796696333/34563810974733.png)

##### Step 4: Install the App and Copy the Token

1. Switch to the **API credentials** tab.
2. Click the **Install app** button, then click **Install** again to confirm.
3. Under the **Admin API access token** section, click **Reveal token once** and copy the **Access Token** to be used in Relyance.
4. **Important:** Copy this token immediately and paste it into a secure password manager. Shopify will only display this token once — if you close the page, you cannot view it again and will need to reinstall the app to get a new one.

![Shopify-5.png](https://assets.relyanceuat.xyz/images/docs/34563796696333/34563796692237.png)

![Shopify-6.png](https://assets.relyanceuat.xyz/images/docs/34563796696333/34563796692749.png)

#### In the Relyance AI application:

1. Login to your Relyance AI account.
2. Navigate to the **Settings** (bottom-left corner).
3. Select **Integrations**.
4. Search and locate the **Shopify** integration card and click on it.
5. Click on the **Add Connection** button on the top right.
6. Provide a meaningful name for the integration and click on the **Add** button.
7. In the **Overview** section, select the integration features you wish to enable for the integration, review the **Scope and Permission**, and **Endpoint** details and click on **Continue**. For more details, see[Integration Features](/docs/introduction-to-relyance-ai/integration-features/).
8. In the **Connection** section, provide the appropriate values and click on **Continue**,
    - **Connection Name**: This property allows you to update the integration specified in Step 6. If you have multiple integrations for the same vendor, you may want to assign distinct names to each. This helps streamline filtering by **Discovery Source** across the **Inventory**, **Visual** **Maps**, **Assets**, and **Data Flow Analysis** pages.
    - **Rescan Frequency**: This property allows you to configure how often Relyance executes scans against this Vendor connection.
    - **Business Atlas Associations** (required): the business entities or products that newly discovered third parties, services and assets from this integration are attributed to. Choose at least one from the **Select Associations** dropdown — the wizard will not advance past this step without one. For more details, see [Business Atlas](/docs/other-settings/business-atlas-overview/).
9. In the **Authentication** section, provide the **Shop Domain** and **Access Token** information retrieved from the **Shopify** section and click on **Continue**. Enable Shopify Plus account if applicable.
10. This step applies only if the **Data Inspection** check box was enabled in Step 7. In the Data Inspection section, provide the appropriate values and click on **Continue**,
    - **Minimum Confidence Level:** This property adjusts the sensitivity of the Data Inspection feature. Lower likelihoods (e.g., unlikely) offer more coverage but may produce false positives, while higher sensitivity (e.g., very likely) provides greater accuracy but less coverage.
11. Review the configuration summary from the **Completion** section and click on **Finish.**
12. Confirm the integration Status reflects **Connected.**

![Screenshot](https://assets.relyanceuat.xyz/images/docs/34563796696333/34643148178317.png)

![Screenshot 2025-11-04 105728.png](https://assets.relyanceuat.xyz/images/docs/34563796696333/40850272992525.png)

![Screenshot](https://assets.relyanceuat.xyz/images/docs/34563796696333/34563810975885.png)

![Screenshot](https://assets.relyanceuat.xyz/images/docs/34563796696333/34563810976269.png)

![Screenshot](https://assets.relyanceuat.xyz/images/docs/34563796696333/34563810976653.png)

![Screenshot](https://assets.relyanceuat.xyz/images/docs/34563796696333/40806557874829.png)

### Verify the connection is really working

The connection uses a custom app access token with ten read scopes: `read_apps`,
`read_content`, `read_customers`, `read_customer_events`, `read_draft_orders`,
`read_fulfillments`, `read_locations`, `read_orders`, `read_shipping` and
`read_users`.

1. **Customer data needs Shopify's approval, not just the scope.** Shopify gates
   customer PII behind its protected customer data request: `read_customers` can be
   ticked and still return nothing until that request is approved for the app. This
   is the usual reason orders appear and customers do not.
2. **The custom app has to be installed, not just created.** A token from an
   uninstalled app authenticates and returns empty collections.
3. **Shop Domain is the `.myshopify.com` host**, not your customer-facing domain. A
   custom domain resolves but is not the API host, so the failure looks like a
   network problem.
4. **`read_users` only exists on Shopify Plus.** On a non-Plus store that scope is
   unavailable, which is what the **Enable Shopify Plus account?** switch is for —
   set it to match the store or staff-account discovery comes back empty.

<!-- terraform-examples:begin (generated from the integration catalog; do not hand-edit) -->

## Manage this integration with Terraform

Connections for this integration can be managed as code with the [Relyance Terraform provider](https://registry.terraform.io/providers/Relyance/relyance/latest). Non-secret fields go in `auth.params`; secret fields go in `auth.secrets_wo`, which is write-only — never stored in Terraform state. Rotate secrets by bumping `auth.secrets_wo_version`.

```hcl
resource "relyance_integration_connection" "shopify" {
  vendor = "shopify"
  name   = "<your connection name>"

  auth = {
    method = "access-token"
    params = {
      shop = "<shop>"
      data_storage_location = "us"
    }
    # Secret fields are write-only: sent to Relyance, never stored in state.
    secrets_wo = {
      access_token = var.shopify_access_token
      is_enable_shopify_plus = "false"
    }
    secrets_wo_version = 1
  }

  scans = { "data-inspection" = { enabled = true } }
}
```

<!-- terraform-examples:end -->
