LUCENTCOMMERCEGET A FREE STORE AUDITFREE AUDIT

DATA · ANALYTICS · INTEGRATIONS · 24 MARCH 2026 · 8 MIN READ

The data warehouse question for a mid-market merchant

Most stores asking for a warehouse want four numbers nobody agrees on. A warehouse will not settle the argument — it will just host it at higher cost.

An order moving from storefront to ERP through a queue

Probably not yet, and the question to answer first is which decision you cannot make today. A data warehouse earns its keep when facts have to be joined across systems that no single tool owns — orders in Shopify, cost price in an ERP, spend in ad platforms, tickets in a helpdesk — and when more than one team needs the same answer to mean the same thing. If what you actually want is a better view of Shopify data, Shopify already holds it, exposes it through ShopifyQL and bulk exports, and will hand you the whole catalogue or order history as a file for the cost of a scheduled job.

IN SHORT

  • A warehouse buys three things: joins across systems, history that outlives the tools that produced it, and one agreed definition per metric. It does not buy insight.
  • Shopify exposes its own analytics as a query language, ShopifyQL, runnable in the admin editor or through the `shopifyqlQuery` field on the Admin GraphQL API.
  • Bulk operations return whole collections as JSONL rather than paged pages: as of API version 2026-01 an app can run up to five bulk queries per shop at once, and the signed result URL expires after one week.
  • The expensive part of a warehouse is not storage or the pipeline. It is modelling — deciding what counts as revenue once returns, cancellations, gift cards and multi-currency are in the room.
  • A pipeline nobody owns fails silently, and a dashboard built on a silently failed pipeline is worse than no dashboard.
  • The honest trigger for building one is a second consumer: when two teams need the same number and currently compute it differently.

What a warehouse actually buys you

Three things, and it is worth being precise because the sales pitch usually promises a fourth that does not exist.

Joins across systems. Shopify knows what you sold and for how much. It does not know landed cost, which is in your ERP or a spreadsheet. It does not know what you paid to acquire the customer, which is in three ad platforms with three attribution models. It does not know that the same customer opened four support tickets about the same product. Every genuinely interesting commerce question is a join, and a warehouse is the only place where the join is cheap to write.

History that outlives its tools. This is the one people notice late. Your email platform holds three years of engagement data; the day you switch platforms, most of it does not come with you. Same for a subscription platform, a reviews app, a helpdesk. A warehouse that has been copying those facts nightly still has them after the contract ends. If you have ever migrated an app and lost the before-and-after comparison that would have told you whether the migration was worth it, that is the cost.

One definition per metric. Finance, marketing and the merchandising team all report revenue, and all three numbers differ. Somebody has to write down whether revenue is gross or net of returns, whether it includes shipping and tax, whether a cancelled order that was refunded the following month comes out of the month it was placed or the month it was refunded. A warehouse is where that decision gets encoded once. It does not make the decision for you — and if nobody is willing to make it, the warehouse will host three definitions instead of settling on one.

What it does not buy is insight. A warehouse is plumbing. Plumbing has never once told anybody which product to reorder.

The test: name the decision you cannot make

Before anyone scopes anything, write down the questions you want answered. Not "we need better visibility" — the actual questions, in the words the person asking uses. Then mark each one.

  • Answerable in Shopify admin today. More of these than anyone expects. If the honest reason nobody looks is that the report is three clicks deep, a warehouse will not fix that.
  • Answerable from Shopify data, but not in the shape Shopify gives it. A ShopifyQL query, or a scheduled export into a spreadsheet, usually settles these in an afternoon.
  • Needs one other system. Shopify plus the ERP, or Shopify plus ad spend. One join. Worth checking whether the other system will simply export to the same spreadsheet before you build anything.
  • Needs three or more systems, or history a source no longer holds. This is the warehouse case, and it is the only one.

How far the platform gets you on its own

Two mechanisms, and most teams asking for a warehouse have used neither.

ShopifyQL is Shopify’s own analytics query language — SQL-shaped, over commerce data including sales, orders, customers, marketing, inventory and payments. It runs in an editor inside the admin and is also exposed as shopifyqlQuery on the Admin GraphQL API, so a scheduled job can run the same query your analyst wrote by hand. For "what happened, sliced by something Shopify already knows about", this is the shortest path there is, and it involves no infrastructure at all.

Bulk operations are how you get everything out. Instead of paging a connection thousands of times, you submit a query and Shopify runs it asynchronously, producing a JSONL file — one JSON object per line, streamable rather than loaded whole. Shopify’s documentation sets out the constraints: as of API version 2026-01 an app can run up to five bulk query operations per shop simultaneously, where earlier versions allowed one of each type; a query may include at most five connections, nested no more than two levels deep; the operation must complete within ten days or it is marked failed; and the signed result URL expires after one week. The initiating mutation counts against your rate limit, the execution does not.

That last point is the one worth internalising. A nightly extract of every order, product and customer costs you almost nothing in rate limit terms, which is why a perfectly serviceable export pipeline is a few hundred lines of code and a scheduler — not a platform, not a vendor, not a per-row bill. If someone is quoting you a data integration project to get Shopify data out of Shopify, this is what they are building.

The cost that is not on the quote

Warehouse pricing is conspicuous and, for a mid-market catalogue, rarely the problem. Commerce data is small — a store doing tens of thousands of orders a year produces less data in a year than one team’s video calls produce in a week. The three costs that decide whether the project works are all human.

Modelling. Raw Shopify orders are not a revenue table. Somebody has to decide how refunds attach to the original order, how discounts are allocated across line items, what happens to an exchange, which currency the reporting is in and at which exchange rate, and whether a draft order that was never paid exists. Each of those is a half-day conversation and a permanent decision. Skip it and every dashboard disagrees with the admin, at which point people stop trusting the warehouse and go back to the admin — which is the actual failure mode, not an outage.

Ownership. Pipelines break quietly. An API version is deprecated, a field is renamed, a job silently returns zero rows for a fortnight, and nobody notices because the chart still renders — it just bends. A warehouse needs someone whose job includes noticing, and "the agency that built it" is not an answer unless that is written into a retainer.

The second tool. A warehouse has no interface. You will also buy or build the BI layer on top, and that tool has its own modelling layer, its own definitions and its own seat cost. Count it in the decision, because a warehouse without a way to look at it is a bill with no benefit.

The middle ground most mid-market stores should take

There is a version of this that is neither a spreadsheet nor a platform, and it is where we would put most stores in the $2M–$50M range.

Run a scheduled bulk export of the handful of Shopify objects you actually report on — orders with line items, products with variants, customers, inventory levels. Land each one as its own table, keyed by Shopify’s ID, and pull incrementally on updatedAt rather than re-extracting the world every night. Add exactly one other source: whichever system holds the fact you most often cannot join, usually cost price. Point whatever BI tool your finance team already has at the result.

That is a warehouse in every sense that matters, built in a week or two, and it has the property that matters most at this size: you can stop. Nothing about it commits you to a modelling framework, a transformation tool, or a contract. When a third and fourth source arrive and the SQL starts repeating itself, that is the moment to introduce a transformation layer — and by then you will know exactly which models you need, because you will have written them badly once already.

The alternative pattern we see often enough to warn about: a full modern data stack bought up front, with orchestration, transformation, reverse ETL and a semantic layer, serving four dashboards that two people open. Every component is defensible; the total is a part-time job nobody was hired for.

When the answer is genuinely yes

These are the shapes where we would argue for building it properly, and they are mostly about the number of places a fact can live.

  • You sell through more than one channel — storefront, marketplaces, retail, wholesale — and nobody can produce a single view of what a product sold across all of them.
  • An ERP or finance system owns cost price and stock valuation, and margin is the number your decisions actually turn on.
  • You run subscriptions or a loyalty programme, where the value of a customer is a curve over time rather than an order total, and the platform that holds it is one you might one day leave.
  • You operate across markets with separate stores, and "group revenue" currently means someone merging exports by hand each month.
  • Two or more teams compute the same metric independently and get different answers, and the disagreement has started costing more than the fix.
  • You are being asked for board or lender reporting that has to reconcile to the accounts, in which case the modelling conversation is happening whether or not you build a warehouse.

The honest position

We build data integrations, and this is one of the engagements we most often talk clients down from. The pattern is consistent: the request arrives as "we need a data warehouse", and four conversations later it turns out there are three questions that matter, two of them are answerable from Shopify alone, and the third needs one file a month from the ERP.

That is not a reason to never build one. It is a reason to build it when you can name what it is for, because a warehouse scoped from real questions is a small, boring, durable thing, and a warehouse scoped from ambition is a platform migration that never quite lands. If you want help working out which one you are looking at, that conversation is cheaper than either.

Questions this raises

Does a mid-market Shopify store need a data warehouse?

Usually not at first. A warehouse pays for itself when facts must be joined across three or more systems, when you need history that outlives the tools producing it, or when two teams need the same metric to mean the same thing. If the questions you want answered are about Shopify data alone, ShopifyQL and a scheduled bulk export will answer them without any new infrastructure.

How do you get all your data out of Shopify?

Bulk operations. You submit a GraphQL query, Shopify runs it asynchronously, and the result comes back as a JSONL file — one object per line — rather than as thousands of paged requests. Shopify documents the constraints: a query may contain at most five connections nested up to two levels deep, the operation must finish within ten days, and the signed download URL expires after one week.

What is ShopifyQL?

Shopify’s own commerce analytics query language. It has SQL-like syntax and covers sales, orders, customers, marketing, inventory and payments. You can run it in an editor in the Shopify admin, and also through the `shopifyqlQuery` field on the Admin GraphQL API, which means a scheduled job can run the same query an analyst wrote by hand.

What actually makes a warehouse project expensive?

Not storage, and not the extract. Commerce data at mid-market volume is small. The cost is modelling — agreeing how refunds, discounts, exchanges, cancellations and currency are treated, so the numbers reconcile with the admin — plus somebody owning the pipeline afterwards, because pipelines fail quietly and a chart built on a broken job still renders.

Can you start small and grow into a warehouse later?

Yes, and you should. A nightly bulk export of orders, products, customers and inventory into tables keyed by Shopify ID, pulled incrementally on `updatedAt`, is a real warehouse built in a week or two. Add a transformation layer when the SQL starts repeating itself across more than two sources — by then you will know which models you need.

Will a warehouse fix conflicting reports between teams?

Only if somebody is willing to decide which definition wins. The conflict is almost never technical: it is that finance nets off returns and marketing does not. A warehouse is a good place to encode the answer once everyone has agreed on it, and an expensive place to host three versions of it if they have not.

NEXT STEP

Free store audit

A senior Shopify engineer reviews your storefront, theme performance and checkout, then sends a prioritised list of fixes.