E-commerce
Connect Shopify to Excel, Sheets and AI
Orders, products, customers and inventory as SQL tables — 36 tables across 8 categories, without a nightly CSV dump.
One connection, every surface
Where your Shopify data can go
Connect Shopify once and the same read-only connection feeds all of these — no second setup, no second copy of the data. 8 of 11 have a step-by-step guide.
Shopify naar Excel
Microsoft Excel · Excel add-in
Pull live Shopify results straight into a worksheet and refresh them on demand — desktop Excel, Excel Online, Microsoft 365.
Read the guideShopify naar Google Spreadsheets
Sheets add-on
Run a saved Shopify query from the sidebar and drop the rows into the sheet. Shared collaborators can refresh it themselves.
Read the guideShopify MCP server
Claude, Cursor and MCP clients
Give an AI assistant read-only access to Shopify with the schema it needs to write correct SQL — no credentials in the chat.
Read the guideShopify REST API
HTTP endpoint
Publish a Shopify query as an authenticated JSON endpoint any application can call, with an OpenAPI 3.1 spec and ready-made Postman, Insomnia and Hoppscotch collections. No database port is opened.
How REST API works no Shopify walkthrough written yetShopify to Airtable
Automation platform
Sync Shopify rows into an Airtable base on a schedule, or fetch them inside an Airtable automation script.
Read the guideShopify to Baserow
Automation platform
Feed a Baserow table from Shopify over the REST endpoint — self-hosted or Baserow cloud.
Read the guideShopify to SeaTable
Automation platform
Keep a SeaTable base current with Shopify data without exporting a file or exposing the database.
Read the guideShopify to Smartsheet
Automation platform
Push Shopify results into a Smartsheet grid so plans and reports read from the source system, not last week's export.
Read the guideShopify to Anvil
Anvil Works · App platform
Back an Anvil Python app with Shopify through the REST endpoint instead of embedding database credentials in the app.
Read the guideShopify to Power BI
Power Query M
Paste the generated Power Query M into the Power BI Advanced Editor and the report reads live Shopify results over HTTPS — no ODBC driver, no database port opened.
How Power BI works no Shopify walkthrough written yetShopify alerts and reports
Slack · Discord · Email · Webhook
Put a Shopify query on a schedule and have the rows delivered to Slack, Discord, email or a signed webhook — or hold the message until a row count, threshold or percentage change crosses the line you set.
How alerts and reports work no Shopify walkthrough written yetHoe het werkt
5 steps, no inbound firewall change
Create a custom app in your Shopify admin with read scopes for the resources you want.
Install the Network Agent and give it your store domain and the app's credentials. They stay on the agent; Shopify only ever hears from your own network.
Choose which of the 36 tables to sync and how often. Orders, line items, products, variants, customers, inventory levels, locations and shop are on by default.
Write ordinary SQL against shopify.orders, shopify.order_line_items and the rest — or let Nova write it.
Read it from Excel, Sheets, Power BI, MCP or REST, and join it to your ERP or warehouse in the same statement.
Feature deep-dive
What Shopify gives you
Line items and variants are their own tables
This is the difference between a Shopify export and a Shopify database. An order in Shopify's API is a nested object with its line items inside it; here the nesting is unwound as the data lands.
- shopify.order_line_items is one row per line, joined back to the order, so revenue by product or by SKU is an ordinary aggregate.
- shopify.variants is one row per variant, joined back to the product, so price and inventory per option are queryable directly.
- Both ride the parent's incremental cursor, so editing an order updates its lines too.
- Everything the columns do not name is kept in a raw_data JSON column on the same row rather than dropped.
36 tables, eight categories
- Core — orders, order_line_items, products, variants, customers, shop.
- Verkoop — transactions, refunds, draft_orders, abandoned_checkouts, gift_cards, order_risks.
- Inventaris — inventory_levels, inventory_items, locations.
- Fulfillment — fulfillments, fulfillment_orders, shipping_zones, carrier_services.
- Catalogue — collections, smart_collections, custom_collections, metafields.
- Marketing — price_rules, discount_codes.
- Shopify Payments — payouts, disputes.
- Content and settings — blogs, articles, pages, themes, policies, countries, customer_addresses, events, webhooks.
Throttling that reads Shopify's own meter
Shopify's Admin API runs a leaky bucket: you get a burst, then a steady drip, and going over it earns a 429 that affects everything else talking to the store. The agent tracks the bucket rather than guessing at it.
- Shopify reports how full the bucket is on every response, and the agent reads that and waits before it gets close, instead of retrying after the fact.
- A Shopify Plus store has a bucket ten times the size, and that is detected rather than configured.
- A handful of resources need one request per record on Shopify's side — order risks, fulfillment orders, customer addresses, discount codes. They are off by default and worth a long interval when you turn them on.
- The REST Admin API version is pinned by the connector, so a Shopify version change does not silently reshape your columns.
Shared by every API connector
How every API connector works
- Your account becomes tables — endpoints are mapped to typed SQL tables with primary keys and indexes, so you write SELECT, JOIN and GROUP BY instead of paging through JSON.
- You choose what syncs, and how often — each table has its own interval, or none at all. Where the vendor's API supports it, only records that changed since the last run are fetched.
- The copy is yours — it lives in an AES-256-GCM encrypted DuckDB file next to the agent, on your machine. Not in our cloud.
- The vendor only ever hears from you — the agent calls the API directly from your own network, so your token is not needed by Query Streams to answer a query.
Good to know
- It is a synced copy, not a live proxy — a query reads what has already been fetched, so it returns at SQL speed and never spends your API rate limit. Selected tables can additionally refresh a stale row as you read it.
- Rate limits are respected for you — each connector paces itself well inside the vendor's published limits, so a report cannot get your account throttled for everything else that uses it.
- Nothing is thrown away — fields the table does not name are kept in a raw_data JSON column you can still query.
- Join it to your databases — an API table and a SQL Server table in the same statement is an ordinary query here, not an integration project.
Cross-source SQL
Join Shopify to the rest of your data
One statement can span Shopify and your other connections at once. Each source runs only the part it can, streams the result back, and the join happens centrally — the sources never talk to each other and nothing is copied anywhere.
3 connections · 3 agents
One statement
-- nothing copied, nothing merged, nothing scheduled
SELECT c.region, COUNT(*) AS orders, SUM(i.amount_due) AS invoiced
VAN storefront.shopify.orders1 f
JOIN pg_crm.publieke.klanten2 c ON c.id = f.customer_id
JOIN facturering.stripe.invoices3 i ON i.customer = c.stripe_id
GROEP DOOR c.region
ORDER BY invoiced DESC;
The three parts are connection, schema and table — and the connection name is whatever you called it. Illustrative columns; your tables will be your tables. Read-only applies to every piece: SELECT, WITH and EXPLAIN only, with a ceiling on how much any one source may hand over for a single query. Hoe werken gefedereerde query's?
Connection details
What Shopify needs
- Authentication
- A custom app's credentials from your Shopify admin, held on the agent
- Store
- Your myshopify.com domain, normalised for you if you paste the full URL
- Reached over
- HTTPS from your network to Shopify. Nothing inbound, and no webhook endpoint to host
- Schema
- shopify — so shopify.orders, shopify.order_line_items, shopify.variants
- Tabellen
- 36, of which eight are on by default: orders, order_line_items, products, variants, customers, inventory_levels, locations, shop
- Incremental
- On last-updated time where Shopify supports it, so an edited order is re-read, not just a new one
- Live refresh
- Available on orders, customers and products — a query keyed to one record checks it against Shopify before answering
- Rate limits
- Tracked against Shopify's reported bucket level, with the Plus multiplier detected
- Local copy
- An AES-256-GCM encrypted DuckDB file beside the agent, on your machine
A cancelled order is still an order. Shopify does not delete it, and neither does this — the row stays with its cancelled_at set, which is what you want when the question is how much was cancelled last month. A record genuinely removed at Shopify does disappear from your tables.
Read-only is structural. The only request the connector makes that is not a read is the one that refreshes its own access token; there is no Shopify write call in it at all, so a query cannot change an order or edit a product.
Vendor documentation: www.shopify.com
FAQ
Questions about Shopify
Which tools can read Shopify data through Query Streams?
All of them, from one connection: Excel, Google Sheets, MCP, REST API, Airtable, Baserow, SeaTable, Smartsheet, Anvil, Power BI, scheduled alerts and reports. Connect the account once and every surface reads the same read-only connection — there is no per-tool setup and no second copy of the data.
Do I have to open a firewall port to my Shopify account?
No. The Query Streams Network Agent runs inside your network and opens a single outbound encrypted connection. Nothing listens for inbound traffic, no VPN is required, and the account keeps its existing firewall rules.
Can Query Streams change data in Shopify?
No. The agent enforces read-only at the point of execution — one statement at a time, SELECT and friends only. Credentials stay on the agent and are never sent to Query Streams.
What does Query Streams need to connect to Shopify?
A reachable host, a role and its password — the agent carries the driver, so nothing is installed on the account. Authentication: A custom app's credentials from your Shopify admin, held on the agent. Store: Your myshopify.com domain, normalised for you if you paste the full URL. Reached over: HTTPS from your network to Shopify. Nothing inbound, and no webhook endpoint to host. Schema: shopify — so shopify.orders, shopify.order_line_items, shopify.variants.
Can I join Shopify to another database in the same query?
Yes — that is a federated query. One statement can reference Shopify and your other connections at once, written as connection.schema.table. Each source runs only the part it can and streams the result back; the join happens centrally, so the sources never connect to each other and nothing is copied or scheduled. Read-only applies to every piece — SELECT, WITH and EXPLAIN only — and there is a ceiling on how much any one source may hand over for a single query. Federated queries are a plan feature; the federated queries page carries the current source and size limits.
Put Shopify where the work happens
Install the agent, point it at your account, and pick a destination.
Alleen-lezen Alleen uitgaand Credentials stay on the agent

