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
- In your Shopify admin, go to Settings → Apps and sales channels → Develop apps.
- If this is your first custom app, click Allow custom app development.
- Click Create an app, give it a name (e.g.
ingest), and select an app developer (yourself). - Open the Configuration tab → Admin API integration → Configure, 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. - Save, then open the API credentials tab and click Install app. Confirm the install on the next screen.
- 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, nohttps://). - 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.
| Endpoint | Description | Reference |
|---|---|---|
| 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.