NetNet vs ShopifyQL
Shopify's own commerce analytics query language, included with your plan
ShopifyQL is a SQL-like query language for Shopify data, available free in the admin editor, the Admin API and a Python SDK. It can answer almost anything about sales, orders and customers. It cannot answer profit questions, because the costs that determine profit — carrier invoices, gateway fees, ad spend — are not Shopify data.
Written by Atul Tirkey · Co-founder, NetNet
Updated September 6, 2026 · 3 min read
ShopifyQL is not an app and does not compete with one. It is a query language, and comparing it to a profit tool is really a question about where your data lives.
What it is
A commerce analytics query language with SQL-like syntax, covering schemas for sales, orders, customers, marketing, inventory and payments. It runs in an editor inside the Shopify admin, through the GraphQL Admin API, and via a Python SDK and CLI.
For anyone comfortable writing queries it is genuinely useful, and free. Questions no packaged report anticipated — how did this collection perform in one region across two seasons, which customers bought product A then product B — are a query away rather than a feature request.
The boundary
ShopifyQL can return anything Shopify knows. The limitation is not the language; it is the data available to it.
Shopify does not know what your carrier invoiced. It records the shipping you charged the customer, which is a different number, and it never sees the surcharges and weight adjustments that arrive weeks later.
Shopify does not know your gateway’s fee structure — the percentage, the fixed component, the tax charged on the fee in some markets. Payment data exists; the fee model does not.
Shopify does not know what you spent on advertising. That is in Meta and Google.
Shopify does not know your landed costs — the freight and duty on imported goods that make cost per item an understatement.
No query reaches data the platform never received. This is a boundary of the system, not a shortcoming of the language.
What you can build with it
More than people assume, and less than enough.
Gross profit is reachable: net sales minus cost per item, cut by product, variant, region or period, with far more flexibility than the packaged profit reports offer. If gross margin analysis is your requirement, ShopifyQL does it well and costs nothing.
Below that line you would need to import carrier invoices, model gateway fee structures, pull ad spend from external APIs, attribute refunds back to originating orders, and maintain effective dates on supplier costs — then join all of it back to orders and keep it running.
That is not writing a query. That is building the application, and then maintaining it.
When the query language is the right answer
Three cases, and they are common enough to be worth naming.
One-off analysis. A specific question, asked once, that no report covers. Faster in a query than in any app.
You have a technical person and unusual questions. A team comfortable with the Admin API can go further than packaged reporting allows, and the flexibility is real.
Your margin is simple. Little advertising, predictable domestic shipping, one payment method. The gap between gross profit and net profit is close to constant, so gross margin queries tell you most of what you need.
The maintenance question
Anything built on queries has to be maintained by whoever wrote them, and that is the cost most often underestimated.
A query is written once and then depended on. Schemas change, definitions drift, the person who wrote it moves on, and a reporting layer made of saved queries quietly becomes something nobody wants to touch. That is a manageable cost for one-off analysis and a real one for a standing weekly number.
When it stops being enough
When the costs that move your margin are invoiced by somebody other than Shopify — and for most stores buying traffic and shipping parcels, that is the majority of them.
The tell is a query you cannot finish: any attempt to compute profit after advertising, or margin after real delivery costs, stops at a join to data that does not exist in the schema. At that point the choice is to build the pipeline yourself or use something that has already built it.
Either is defensible. What does not work is treating gross profit from a query as though it were profit, which is the failure this whole comparison exists to prevent.
What ShopifyQL does better
It is free, it is first-party, and it is genuinely powerful within its domain. SQL-like syntax across schemas covering sales, orders, customers, marketing, inventory and payments, available in the admin editor, through the Admin API, and via a Python SDK and CLI. For anyone comfortable writing queries, it answers questions no packaged report anticipates.
What NetNet does better
It is the pipeline the query cannot reach, already built and maintained. Carrier invoices matched back to orders by tracking number, gateway fee structures modelled as rate, flat component and tax on the fee, ad spend pulled from Meta and Google, refunds attributed to originating orders, and effective dates on supplier costs. Assembling that yourself is not writing a query — it is building an application and then owning it when the schema changes.
Capability comparison
| Capability | NetNet | ShopifyQL |
|---|---|---|
| What it is | A profit application | A query language and editor |
| Data it can reach | Shopify plus carriers, gateways and ad platforms | Shopify data only |
| Cost of goods | Landed cost per variant, with effective dates | Cost per item, as recorded in Shopify |
| Carrier invoice costs | Matched to orders by tracking number | Not available — Shopify records shipping charged |
| Gateway fee modelling | Rate, flat fee and tax on fee | Payment data available, fee structures not modelled |
| Ad spend | Synced from Meta and Google | Not Shopify data |
| Profit layers | Gross profit, contribution margin, marketing profit, net profit | Whatever you can express from Shopify data |
| Flexibility | Fixed reports plus exports | Any question expressible as a query |
| Skill required | Cost configuration | Comfort writing SQL-like queries |
| Where it runs | Embedded Shopify app | Admin editor, Admin API, Python SDK and CLI |
| Cost | From $15/month | Included with Shopify |
Pricing
| Tier | NetNet | ShopifyQL |
|---|---|---|
| Entry | $15/month, up to $5K monthly revenue ($49 at $25K) | Included with your Shopify plan |
| Mid | $99/month, up to $100K monthly revenue | Included |
| Upper | $199/month, up to $250K monthly revenue | Included |
| Trial | 14 days, full access | Not applicable |
ShopifyQL costs nothing beyond your existing plan, so price is not the comparison. The question is whether the data you need lives inside Shopify. If it does, the query language is free and capable. If your margin depends on carrier invoices and gateway deductions, no query reaches them.
Which one fits
Choose ShopifyQL if
- Your questions can be answered from data Shopify already holds
- You are comfortable writing SQL-like queries and want maximum flexibility
- You need one-off analysis rather than a standing report someone checks weekly
- You want to pull commerce data programmatically through the Admin API
Choose NetNet if
- The costs eroding your margin are invoiced by carriers and gateways, not by Shopify
- You need advertising spend measured against order margin
- You want contribution margin maintained continuously rather than queried
- Nobody on the team wants to maintain queries as a reporting layer
Frequently asked questions
Can ShopifyQL calculate net profit?
Not meaningfully. It queries Shopify data, and the costs that determine net profit — what a carrier actually invoiced, what a gateway deducted inside a payout, what you spent on advertising — are not in Shopify. A query cannot return data the platform never received.
What is ShopifyQL good for?
Any question answerable from commerce data: sales trends, order patterns, customer behaviour, inventory, marketing and payments. It covers ground packaged reports do not anticipate, and for one-off analysis it is often faster than any app.
Is ShopifyQL free?
Yes, it is part of Shopify. It is available in the admin editor, through the GraphQL Admin API, and via a Python SDK and CLI, with no additional subscription.
Could I build profit reporting on ShopifyQL myself?
Partially. You can get to gross profit using cost per item. Beyond that you would need to import carrier invoices, model gateway fees and pull ad spend from outside Shopify, then join it all back to orders — which is building the application rather than querying one.