Skip to main content

Shopify Source

Connect Shopify as a source to sync commerce data from a single Shopify store into your warehouse.

For an overview of capabilities and use cases, see the Shopify connector page. To run pipelines natively inside Snowflake, see Snowflake Native ETL.

At a Glance

This connector syncs Products, Orders, and Customers from one Shopify store per source. It authenticates with a custom app Admin API access token. Other commerce resources (inventory, fulfillments, transactions, refunds, and similar) are not yet supported -- see Not Yet Supported.

Prerequisites

Before you begin, ensure you have:

  • A Shopify store and admin access sufficient to create and manage custom apps
  • Your store's *.myshopify.com URL (the permanent store URL, not a custom storefront domain)
  • A Shopify custom app Admin API access token
  • The token's scopes include: read_products, read_orders, read_all_orders, read_customers

Supported Objects

ObjectSync ModeDescription
ProductsIncrementalProduct catalog records.
OrdersIncrementalOrder records, including order-level commerce data.
CustomersIncrementalCustomer records.

Not Yet Supported

This connector does not sync:

  • Multiple Shopify stores per source (one store per source)
  • The Shopify Partner API
  • Inventory
  • Collections
  • Discounts
  • Fulfillments as a separate object
  • Metafields
  • Locations
  • Transactions
  • Refunds as a separate object
  • Gift cards
  • Draft orders

Contact us with the objects you need -- expansion is prioritized by customer demand.

Incremental Sync

Products, Orders, and Customers all sync incrementally. On each run, the connector fetches only records that have changed since the last sync.

  • Start Date controls the initial backfill window. Leave it blank to sync all available history, or set it to the earliest date you want to load.
  • Order Status Filter applies only to Orders. Products and Customers are unaffected by this setting.
  • Shopify returns only the last 60 days of order history by default. Syncing older orders requires the read_all_orders scope on your access token (see Authentication).

Authentication

Supaflow authenticates with a Shopify custom app Admin API access token.

Create a Custom App and Generate a Token

  1. In your Shopify admin, go to Settings > Apps and sales channels > Develop apps
  2. Click Create an app and give it a descriptive name (for example, "Supaflow")
  3. Open Configuration > Admin API integration and grant the required scopes:
    • read_products
    • read_orders
    • read_all_orders
    • read_customers
  4. Save the configuration, then go to API credentials and click Install app
  5. Copy the Admin API access token (starts with shpat_) -- Shopify will show it only once

The connector is read-only. Do not grant write scopes.

read_all_orders requires approval from Shopify

read_all_orders is a protected Shopify scope. It is required to sync orders older than roughly 60 days, and Shopify requires additional approval before you can add it to your app. See Shopify's API access scopes documentation for the current approval process.

Shop URL Format

Use the store's permanent *.myshopify.com URL as the Shop URL. For example:

  • Correct: https://my-store.myshopify.com
  • Not accepted: a custom storefront domain such as https://shop.example.com
  • Not accepted: a Shopify admin URL such as https://admin.shopify.com/store/my-store

The Admin API only responds on the *.myshopify.com hostname. Custom primary domains and admin URLs will fail the connection test.

Configuration

In Supaflow, create a new Shopify source with these settings:

Authentication

Shop URL*

Your store's permanent *.myshopify.com URL. Custom domains and admin.shopify.com/store/... URLs are not accepted.
Example: https://my-store.myshopify.com

Admin API Access Token*

The Admin API access token from the Shopify custom app you installed. Starts with shpat_.
Stored encrypted


Sync Settings (Optional)

Start Date

Earliest date to sync records from on the initial sync. Leave blank to sync all available history.
Example: 2024-01-01
Default: empty (all history)

Order Status Filter

Which orders to sync, by order status. Applies to Orders only.
Options:

  • any - All orders regardless of status
  • open - Open orders only
  • closed - Closed orders only
  • cancelled - Cancelled orders only

Default: any


Advanced Settings (Optional)

Schema Refresh Interval

Interval in minutes for schema metadata refresh.
Options:

  • 0 - Refresh schema before every pipeline execution
  • -1 - Disable automatic schema refresh (use for static schemas)
  • Positive value - Refresh interval in minutes (e.g., 60 = hourly, 1440 = daily)

Default: 0

Items Per Page

Records fetched per Shopify API page. Smaller values produce more API calls with smaller payloads; larger values reduce round-trips at the cost of peak memory per batch.
Range: 1 to 250
Default: 250


Test & Save

After configuring the Shop URL and Admin API access token, click Test & Save to verify your credentials and save the source.

Rate Limiting

Shopify applies API rate limits to the Admin API. Supaflow handles transient rate limiting automatically with retry and backoff, but very large syncs may take longer or may need off-peak scheduling and a narrower Start Date to stay comfortably inside your plan's limits. See Shopify's API rate limits for current thresholds and plan-specific details.

Troubleshooting

Invalid Shop URL

Problem:

  • "Invalid Shop URL" or connection test fails immediately on save

Solutions:

  1. Use the permanent *.myshopify.com URL (for example, https://my-store.myshopify.com). You can find it in Shopify admin under Settings > Domains, listed as the store's default .myshopify.com URL.
  2. Do not paste a custom storefront domain (e.g., https://shop.example.com). The Admin API only responds on *.myshopify.com.
  3. Do not paste an admin.shopify.com/store/... URL. That is the admin UI, not the store's API hostname.

Authentication failed

Problem:

  • "Authentication failed" or a 401 response on Test & Save

Solutions:

  1. Confirm the token starts with shpat_ and was copied from your custom app under Settings > Apps and sales channels > Develop apps > API credentials. Storefront API tokens, API keys, and API secret keys are not valid here.
  2. If the custom app was uninstalled or its token rotated, reinstall the app and generate a new token.
  3. Confirm the token was issued from the same store whose *.myshopify.com URL is in the Shop URL field.

Missing scopes

Problem:

  • Test & Save fails with a missing-scope error naming one or more of read_products, read_orders, read_all_orders, or read_customers

Solutions:

  1. Open the custom app in Shopify and verify all four required scopes are granted: read_products, read_orders, read_all_orders, read_customers. Supaflow validates scopes at Test & Save, so missing scopes block the source from saving rather than producing empty results later.
  2. If read_all_orders is the missing scope, you must request access from Shopify before it becomes available on the custom app. See the note under Authentication.
  3. If you edit scopes after the app is already installed, Shopify requires you to re-approve the app and will issue a new access token. Paste the new token into Supaflow and run Test & Save again.

Orders missing beyond recent history

Problem:

  • Orders older than roughly 60 days are missing from the destination, even though they exist in Shopify

Solutions:

  1. Shopify limits access to the last 60 days of orders unless your app has the read_all_orders scope. Add the scope to the custom app, re-approve it, and paste the new token into Supaflow.
  2. After updating the scope and token, re-run the pipeline so the initial backfill can reach older orders.
  3. Confirm Start Date is not unintentionally restricting the window. Clearing it syncs all available history (subject to Shopify's scope rules).

Rate limit exhausted

Problem:

  • The sync is slow or the job log shows rate-limit responses from Shopify

Solutions:

  1. Supaflow retries rate-limited requests automatically. Transient throttling should self-recover on the next attempt.
  2. If syncs are consistently hitting limits, schedule them during off-peak hours or narrow the initial window using Start Date.
  3. If other tools are also hitting the same store's Admin API, their traffic counts against the same rate limit. Coordinate schedules across tools if needed.
  4. See Shopify's API rate limits for current thresholds and plan-specific details.

Need a Shopify object that is not listed

Problem:

  • You need inventory, fulfillments, transactions, refunds, metafields, or another resource that does not appear in the schema

Solutions:

  1. The current connector syncs only Products, Orders, and Customers. See Not Yet Supported for the full list of resources that are not available today.
  2. Contact support with the object names you need -- expansion is prioritized by customer demand.

Support

Need help? Contact us at support@supa-flow.io