Shopify to Snowflake
Shopify is usually the order record for a DTC brand. Getting it into Snowflake is quick. Getting numbers that match Shopify reports, finance and marketing takes deliberate modeling.
The short answer
What you can load from Shopify
- Orders and order lines
- Item sales, discounts, shipping, tax, customer ID and the store time zone. Keep line level and order level separate so totals are not repeated.
- Refunds and sales reversals
- Each refund with its own processing date and parent order ID. One order can have several partial refunds, and each one is real.
- Customers and emails
- The Shopify customer ID and email, used to join Klaviyo and Recharge into one customer view.
- Products and variants
- Native product and variant IDs plus SKU text, mapped to a canonical product so cost and margin line up with Amazon and TikTok listings.
How we set it up
- 1
Load the full history
Shopify only exposes the last 60 days of orders unless the app has all-orders access. We confirm that access before the backfill so history is not cut short.
- 2
Keep raw records and every date
We keep order, refund and load timestamps with their time zones in raw tables, so later corrections do not mean reloading from Shopify.
- 3
Model named revenue metrics
We build separate measures for sales by activity date and value by order cohort, each with a written definition, a time zone and an owner.
- 4
Reconcile one month to Shopify
We bridge a closed month from the Shopify sales report to the warehouse total, with shipping, tax and late refunds in their own columns.
What breaks, and how we handle it
- Refund date versus order date
- Shopify records a sale on the day it was made and a reversal on the day it was processed. We keep both views and label which one each report uses.
- Store time zone versus UTC
- An order placed late on the last day of the month in New York falls in the next month in UTC. We convert once, with a named rule, using the store time zone.
- Orders copied from other channels
- A TikTok Shop purchase can create a Shopify order and an Amazon fulfillment record. We store sales channel, fulfillment provider and source system separately and link copies to one business order.
- Joins that repeat totals
- Joining order lines to shipments or refunds can multiply rows. We aggregate each table to its own level before joining and test totals before and after.
- Subscription renewals counted twice
- A Recharge charge can point to a Shopify order. We take money from Shopify and use Recharge only to label the order as a first order or a renewal.
What we build on top of the Shopify data
- Net sales by activity date and by order cohort
- Business order crosswalk across Shopify, Amazon and TikTok Shop
- Product crosswalk with dated costs and pack quantities
- Customer timeline joining Shopify, Klaviyo and Recharge
- Monthly reconciliation bridge to Shopify reports
Common questions
Why does my Snowflake revenue not match the Shopify sales report?
Usually the date, time zone or population differs. Shopify puts refunds on the day they were processed and uses the store time zone, while a warehouse query may tie refunds to the order and use UTC. Reconcile one closed month line by line before changing any formula.
Can I load more than 60 days of Shopify order history?
Yes, but the app needs all-orders access. Without it, the Shopify Order object only exposes the last 60 days, so a backfill can stop early without an error.
How do I stop TikTok Shop and Amazon orders being counted twice in Shopify data?
Record where the customer bought separately from who fulfilled the order and which system sent the record. Then link each copy to one business order and count sales only from the originating order.
Should refunds reduce the month of the sale or the month of the refund?
Both views are valid for different questions. Activity reporting puts the refund in the month it was processed. Order cohort reporting ties it back to the order. Name both measures and say which date each one uses.
Do I need dbt to model Shopify data in Snowflake?
No. What matters is that each metric has one written definition, grain, date rule and owner. We often build those in dbt, but Snowflake semantic views or your BI tool model can hold them too.
Guides
Want Shopify data you can trust?
Bring the Shopify reports that don't match. We'll trace them to the source and show you where to start.