Shopify logo

Shopify

Overview

The Ingest Shopify connector reads from the Shopify Admin REST API using a custom-app access token scoped to your store. This is Shopify's recommended pattern for first-party integrations — no app review, no public listing, no OAuth user-consent flow. The token is created once inside your Shopify admin and remains valid until you revoke it.

API version is pinned to 2026-01 (the current stable release as of 2026-04). Shopify rotates versions quarterly and gives ~12 months of overlap before retiring an old one; we'll bump the connector before each retirement.

Setup guide

Create the custom app

  1. In your Shopify admin, go to Settings → Apps and sales channels → Develop apps.
  2. If this is your first custom app, click Allow custom app development.
  3. Click Create an app, give it a name (e.g. ingest), and select an app developer (yourself).
  4. Open the Configuration tab → Admin API integrationConfigure, and select the read scopes for the data you want Ingest to pull. The most common picks are: read_products, read_orders, read_customers, read_inventory, read_locations, read_discounts, read_marketing_events, read_content, read_themes, read_fulfillments, read_returns, read_payment_gateways, read_shipping. Add others as your endpoint selection grows.
  5. Save, then open the API credentials tab and click Install app. Confirm the install on the next screen.
  6. After install, the Admin API access token is shown once. Copy it immediately — Shopify will not show it again.

Find your shop subdomain

Your shop's myshopify.com handle is the value before .myshopify.com in the admin URL — for example, acme-co if your admin URL is https://acme-co.myshopify.com/admin. This is the shop value the connector substitutes into every endpoint URL at runtime.

Add the token to Ingest

In the Ingest UI under Connectors → Shopify, fill in:

  • Shop subdomain — e.g. acme-co (no .myshopify.com, no https://).
  • Access token — the value from step 6 (stored in AWS Secrets Manager as access_token).

Mind the limits

Shopify's standard REST API gives you a 40-call leaky bucket that refills at 2 calls per second per store — about 7,200 calls/hour. Shopify Plus stores get a higher limit (typically 4× standard). The Ingest runtime dispatches at 1 req/sec by default, watches the X-Shopify-Shop-Api-Call-Limit response header, and uses AIMD backoff on 429s.

Errors with status 401 (bad/expired token), 403 (scope missing or feature not licensed — e.g. Shopify Plus-only endpoints on a standard plan), and 404 (resource not found) are treated as fatal — fix the cause before retrying.

Pick endpoints

The Shopify catalog spans 33 endpoints across the storefront, fulfillment, content, and Plus-only payments domains. Most customers want:

  • Catalog: products, variants, product_images, collections (custom_collections + smart_collections), collects, inventory_levels, locations
  • Sales: orders, draft_orders, transactions, refunds, fulfillments, checkouts
  • Customers & marketing: customers, discount_codes, price_rules, marketing_events, events, gift_cards (Shopify Plus)
  • Storefront content: blogs, articles, pages, redirects, policies
  • Store metadata: shop, currencies, webhooks
  • Shopify Payments (Plus / payments-enrolled stores): balance_transactions, disputes, payouts, tender_transactions
  • Shopify Plus only: users, gift_cards

Several endpoints fan out per-parent — inventory_levels per location, transactions/refunds/fulfillments per order, articles per blog, product_images/variants per product. The generator models handle that fanout automatically.

Supported streams

25 endpoints are available out of the box. Each endpoint syncs into its own Iceberg table in Snowflake.

EndpointDescriptionReference
articles
articles
blogs
blogs
collects
collects
custom_collections
custom_collections
customers
customers
discount_codes
discount_codes
draft_orders
draft_orders
events
events
fulfillments
fulfillments
inventory_levels
inventory_levels
locations
locations
marketing_events
marketing_events
orders
orders
pages
pages
policies
policies
price_rules
price_rules
product_images
product_images
products
products
redirects
redirects
refunds
refunds
shop
shop
smart_collections
smart_collections
transactions
transactions
variants
variants
webhooks
webhooks

Authentication

Auth type
API Key
Sent as header
X-Shopify-Access-Token
Provider docs
shopify.dev

Performance & limits

Rate limit
40 requests/store/minute with a 2 req/s leaky-bucket refill on the standard REST plan; higher on Shopify Plus. Ingest dispatches at 1 req/s by default and lets AIMD tune up. Pagination is Link-header based, max 250 records per page.
Automatic backoff
Ingest throttles requests to the published rate limit and retries with exponential backoff on transient errors. You don't need to handle 429s, retries, or pagination yourself.

Resources