Shopify logo

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.

1connection
0inbound ports
read-onlyenforced

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.

Guide

Shopify to 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 guide
Guide

Shopify to Google Sheets

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 guide
Guide

Shopify 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 guide
Supported

Shopify 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 yet
Guide

Shopify to Airtable

Automation platform

Sync Shopify rows into an Airtable base on a schedule, or fetch them inside an Airtable automation script.

Read the guide
Guide

Shopify to Baserow

Automation platform

Feed a Baserow table from Shopify over the REST endpoint — self-hosted or Baserow cloud.

Read the guide
Guide

Shopify to SeaTable

Automation platform

Keep a SeaTable base current with Shopify data without exporting a file or exposing the database.

Read the guide
Guide

Shopify 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 guide
Guide

Shopify 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 guide
Supported

Shopify 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 yet
Supported

Shopify 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 yet

How it works

5 steps, no inbound firewall change

01

Create a custom app in your Shopify admin with read scopes for the resources you want.

02

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.

03

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.

04

Write ordinary SQL against shopify.orders, shopify.order_line_items and the rest — or let Nova write it.

05

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.
  • Sales — transactions, refunds, draft_orders, abandoned_checkouts, gift_cards, order_risks.
  • Inventory — 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

Shopify E-commerce
PostgreSQL Relational engine
Stripe Payments & billing

One statement

-- nothing copied, nothing merged, nothing scheduled
SELECT   c.region, COUNT(*) AS orders, SUM(i.amount_due) AS invoiced
FROM     storefront.shopify.orders1 f
JOIN     pg_crm.public.customers2   c ON c.id = f.customer_id
JOIN     billing.stripe.invoices3   i ON i.customer = c.stripe_id
GROUP BY 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. How federated queries work

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
Tables
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.

Read-only Outbound only Credentials stay on the agent