The e-commerce analytics stack: Shopify + Klaviyo + GA + Stripe
Your data lives in four places. Here's how to query across all of them in one conversation without building a unified data model.
Your e-commerce data lives in four places: Shopify for orders, Klaviyo for email, Google Analytics for traffic, and Stripe for payments. Answering "which email campaign drove the most revenue last month" needs all four. Here is how to set that up in an afternoon.

The stack
- Shopify + Klaviyo → Airbyte → your warehouse (BigQuery or Snowflake)
- Stripe + Google Analytics → Contextflo, direct API connection
- Warehouse + APIs → all queryable from Claude in one conversation
The thing worth noticing is step 2. You do not have to ETL everything into the warehouse before you can ask a question about it. Sources that have a decent API can be queried directly, which means less pipeline to build and less pipeline to maintain later.
What you can ask once it is connected
Which Klaviyo campaign drove the most Stripe revenue last month?
What's our blended CAC when I combine Google Analytics acquisition data with Stripe revenue?
Show me the customer journey: GA source → Shopify first order → Klaviyo email engagement → repeat purchase rate.
Which products have the highest refund rate in Stripe but the best reviews in Shopify?
Each of these used to need someone who knew all four schemas and had an afternoon free. That is the actual bottleneck in most e-commerce teams, and it is not analysis, it is joining.
The joins that will bite you
Cross-source questions are only as good as the key you join on, and in this stack the key is almost always email or customer ID, both of which are messier than they look.
Shopify and Stripe will disagree on order count, because Shopify records an order at checkout and Stripe records a charge, and those diverge on failed payments, retries, and partial refunds. Klaviyo identifies people by email, while Shopify has both guest checkouts and accounts, so the same human shows up twice. Google Analytics does not know who anyone is at all, so anything joining GA to revenue is attribution, not fact.
None of this makes the questions unanswerable. It means the first time you ask one, check the answer against a number you already trust. Once you have settled how orders map to charges and how guest checkouts are resolved, save that as a definition so every later answer uses the same logic instead of re-deriving it.
Why this stack works
Most e-commerce teams do one of two things. They build a dashboard inside each tool, which gives four fragmented views and no way to ask across them. Or they hire someone to build a unified data model, which is correct and takes a quarter.
This is the middle path: a unified view without the unified model. You ask a question that spans sources, and the model works out where to pull from and how to combine it, using definitions you have written down once.
It is not free of tradeoffs. A real dimensional model is still better if you have the team to build and maintain one. Most stores under a certain size never will, and the choice is not between this and a warehouse model, it is between this and a spreadsheet.
Connect your store data and ask questions across all of it in Claude. Free for one user and one data source.