Skip to content
adapters.io

Shopify to Snowflake integration for analytics-ready store data

The Shopify to Snowflake integration from Adapters loads orders, line items, customers, products, and refunds from Shopify into Snowflake tables on an incremental schedule, so cohort, LTV, and margin models run on a full order history instead of a manual export. Field mapping is no-code, so try it against sample records in the live demo.

No credit card required.

Field mapping auto-plugged · tap a port to rewire

5 sample records ready

Last updated September 2026

What running Shopify to Snowflake by hand costs you

  • The Shopify Admin API paginates by cursor and throttles by leaky bucket, so full-catalog and full-order backfills are slow to script.
  • Order edits, refunds, and cancellations change records after the fact, and a naive nightly dump misses those updates.
  • Blending Shopify with ad spend and payment fees for true margin means a warehouse, not a stack of exported CSVs.

The field mapping, out of the box

These cables are pre-wired when you pick the pair. Rewire any of them, or add your own, in the same visual data mapping tool you use for every adapter.

Input / SHOPIFY

order.id
FCT_ORDER.order_id
order.total_price
FCT_ORDER.total_price
order.created_at
FCT_ORDER.created_at
line_item.sku
FCT_ORDER_LINE.sku
customer.id
DIM_CUSTOMER.customer_id
order.updated_at
FCT_ORDER.loaded_at

Transforms included

Incremental loads use the Shopify updated_at watermark so edits, refunds, and cancellations flow through on the next run; money fields cast to Snowflake NUMBER, ISO 8601 timestamps land as TIMESTAMP_NTZ in UTC, and line items land in their own fact table so margin and cohort models read one clean, deduplicated order history.

Shopify to Snowflake in depth

Two things decide whether this pipeline works: how you get the history out of Shopify without spending a day throttled, and whether Snowflake keeps your cents. Read from Shopify and Snowflake documentation on 20 August 2026.

Shopify meters query cost, not requests

The GraphQL Admin API charges you calculated query cost in points per second: 100 on a Standard plan, 200 on Advanced, 1,000 on Shopify Plus and 2,000 on Enterprise. Two pipelines issuing the same number of requests can differ tenfold in throughput because one asks for six scalar fields and the other pulls every connected object. Every response returns requestedQueryCost, actualQueryCost and a throttleStatus block with currentlyAvailable and restoreRate. A loader that reads those paces itself and never sees a THROTTLED error. The full set of numbers is on Shopify API rate limits.

Backfill with a bulk operation, never paged queries

Paging through several years of orders fails twice. It burns points for hours, and it stops dead at the 25,000 object pagination ceiling. Bulk operations run asynchronously, are exempt from the normal cost limits, and hand back the entire result set as JSONL. From API version 2026-01 you can run five concurrent bulk queries per app per shop, up from one of each type. The signed download URL expires after one week, so collect the file as soon as the job reports complete or you rerun the whole thing.

Bulk queries allow five connections and two nesting levels

Orders to line items is fine. Orders to line items to variants to metafields is not. The shape constraint means a realistic Shopify extract is several bulk jobs rather than one, joined on IDs after they land in Snowflake. Plan the job list up front: orders with line items, customers, products with variants, inventory levels, and refunds. Trying to express all of it as one query is the most common reason a first backfill never starts.

Shopify money is a decimal string, not minor units

This is the opposite of Stripe and it catches teams who have built both. A Shopify MoneyV2 carries an amount as a Decimal, rendered like 12.99, plus a separate currencyCode. There is no divide by 100 anywhere. If you are also loading payments data, see Stripe to Snowflake, where amounts genuinely are integers in the smallest currency unit and the same loader logic would be wrong.

Snowflake NUMBER defaults to (38,0) and eats your cents

The single most expensive silent failure on this route. Snowflake NUMBER defaults to a scale of zero, so a column created without an explicit scale truncates 12.99 to 12. Nothing errors, no row is rejected, and revenue simply comes out low by a few percent. Declare money columns as NUMBER(18,2), or NUMBER(18,4) if you deal in fractional unit prices, and check the DDL rather than trusting an auto-created table.

Unquoted identifiers fold to UPPERCASE

Shopify field names arrive lowercase and camelCase. Snowflake folds unquoted identifiers to uppercase, which is the opposite of Postgres and Redshift. If you quote them to preserve the original casing, every downstream query has to quote them too, forever. Pick one convention before the first load: either accept uppercase and map explicitly, or quote everywhere. Changing your mind after the models are written is a rewrite. The same trap in the other direction is covered on Snowflake to Postgres.

Stage files at 100 to 250 MB compressed

Snowflake recommends compressed data files of 100 to 250 MB for loading and explicitly advises against files of 100 GB or more. A JSONL bulk export of a large store arrives as one big file, so split it before staging. The default COPY timeout is 24 hours, which sounds generous until a single unsplit file makes a load serial. If you need continuous rather than batch loading, Snowpipe lands data within about a minute of the notification.

Refunds and fulfillments arrive after the order

An order created in one period can be refunded in the next, and a fulfillment can land days later. A pipeline that keys incremental extraction on order creation time will never see either. Filter on updated_at rather than created_at, treat refunds as their own stream with their own timestamps, and expect to restate a period. If the same data has to reach the ledger as well as the warehouse, the mapping decisions are on Shopify integration tools.

How it goes live

Three steps, minutes end to end, covered by flat data integration pricing from $49 a month.

STEP 01

Pick the pair

Connect Shopify and Snowflake with scoped credentials. About a minute each.

STEP 02

Confirm the mapping

The cables above are pre-wired. Adjust any field, preview the transform on sample records, done.

STEP 03

Schedule the sync

Hourly down to every minute, with retries, alerting, and a full log on every run.

Try it in the live demo Preloads SHOPIFY → SNOWFLAKE with sample records

Shopify to Snowflake sync: common questions

How do I connect Shopify to Snowflake?

Install a custom app in your Shopify admin to get an access token, pick the resources to replicate (orders, line items, customers, products, inventory), map fields to Snowflake columns, and schedule an incremental run on updated_at. The first run backfills history and every run after it moves only changed records.

Does Shopify have API rate limits?

Yes. The REST Admin API uses a leaky bucket with a 40 request capacity that drains at 2 requests per second on standard plans, 4 per second on Advanced and 20 per second on Shopify Plus. A bulk backfill has to respect that budget, which is why a first full load of a large store is measured in hours rather than minutes.

Which Shopify data should you load into Snowflake?

Orders and line items first, because unit economics live at the line level and an order-header-only copy cannot answer product questions. Add customers for cohort analysis, products and variants for the SKU dimension, and inventory levels if operations reads the warehouse.

How do you handle Shopify order edits and refunds in the warehouse?

Treat orders as mutable and refunds as separate events. An order edited three days after purchase changes its updated_at, so the incremental load picks it up and a MERGE on order ID replaces the row. Refunds and returns should land in their own table keyed to the order, so gross and net stay separately reportable.

How does the Shopify to Snowflake sync work?

The Shopify to Snowflake integration from Adapters loads orders, line items, customers, products, and refunds from Shopify into Snowflake tables on an incremental schedule, so cohort, LTV, and margin models run on a full order history instead of a manual export. Field mapping is no-code, so try it against sample records in the live demo.

Is there a prebuilt Shopify connector for Snowflake?

Yes. This Shopify to Snowflake connector ships prebuilt: the field mapping is wired the moment you pick the pair, transforms are included, and you can try it against sample records in the live demo. No code or engineering sprint required.

How much does the Shopify Snowflake integration cost?

Pricing is flat and monthly: Starter at $49, Growth at $149, Scale at $399. Every plan includes this pair, visual field mapping, and per-record logs. There are no per-task or per-row fees, so the bill stays the same as volume grows.

How often can Adapters sync Shopify to Snowflake?

Hourly on Starter, every 5 minutes on Growth, and down to every minute on Scale. Failed records retry automatically with backoff, and alerting plus a full per-record log come standard on every run.

Do I need to write code to connect Shopify and Snowflake?

No. Fields are auto-mapped the moment you pick the pair, and you can rewire any mapping visually before the first sync. Incremental loads use the Shopify updated_at watermark so edits, refunds, and cancellations flow through on the next run; money fields cast to Snowflake NUMBER, ISO 8601 timestamps land as TIMESTAMP_NTZ in UTC, and line items land in their own fact table so margin and cohort models read one clean, deduplicated order history.

More pairs from the API connector library

stripe quickbooks integration shopify netsuite integration salesforce hubspot integration airtable google sheets sync postgres to snowflake sync shopify quickbooks integration salesforce netsuite integration paypal quickbooks integration square quickbooks integration stripe netsuite integration hubspot quickbooks integration quickbooks to xero migration shopify xero integration salesforce to snowflake integration square netsuite integration hubspot xero integration salesforce to bigquery integration postgres to bigquery netsuite to snowflake integration quickbooks to bigquery integration stripe to snowflake integration quickbooks to snowflake integration hubspot to snowflake integration netsuite to bigquery integration stripe to bigquery integration shopify to bigquery integration paypal to snowflake integration square to snowflake integration square to bigquery integration netsuite to postgres integration salesforce to postgres integration xero to snowflake integration hubspot to bigquery integration xero to bigquery integration paypal to bigquery integration stripe to postgres integration snowflake to bigquery migration shopify to postgres integration hubspot to postgres integration bigquery to snowflake migration quickbooks to postgres integration xero to postgres integration square to postgres integration paypal to postgres integration snowflake to postgres mysql to postgres migration mysql to snowflake redshift to snowflake migration mysql to bigquery sql server to snowflake sql server to postgresql migration

Browse the full api connector library, or request a pair you do not see.

Shopify and Snowflake, finally in agreement

Map the pair once and let it sync on schedule. Flat price from $49 a month, no per-task fees.

Try the live demo

No credit card required.