How to build BigCommerce dashboards in Metabase
BigCommerce is an open-SaaS commerce platform that runs storefronts and headless builds alike, holding the record of every order, product, and customer. Metabase is where you turn that activity into shared, trustworthy dashboards. This guide covers two complementary paths: a lightweight MCP + CLI route that pulls live data with the BigCommerce MCP and loads a CSV into Metabase with the Metabase CLI for quick analysis, and a durable pipeline route that syncs BigCommerce into a database so you can build dashboards anyone can read.
How do you connect BigCommerce to Metabase?
Most teams combine both routes: use the BigCommerce MCP and Metabase CLI route to pull live data and stand up a quick analysis, and the pipeline route for the dashboards people depend on.
Live data in, quick analysis out
Pair a BigCommerce MCP server (to read live order, catalog, and customer data) with the Metabase CLI, whose upload command loads a CSV into Metabase as a ready-to-query table and model.
- Quick lookups like "top products this week?"
- Loading a BigCommerce CSV export into Metabase in seconds
- Spot-checks on orders, catalog, and customers without a warehouse
- Great for exploration, not governed reporting
- Use read-only mode on the BigCommerce MCP to avoid accidental writes
- CSV uploads are snapshots — refresh or move to the pipeline for history
Durable dashboards with history
Sync BigCommerce into a database or warehouse with a managed connector, dlt, or the REST/GraphQL API, then point Metabase at it.
- Sales, AOV, and cohort dashboards leaders depend on
- Joining orders with marketing, support, and finance data
- Peak-season comparisons across quarters and years
- You own the refresh schedule and the data model
- Reconcile refunds, taxes, and discounts to report net revenue
- Capture order products to analyze basket and catalog behavior
What can you analyze from BigCommerce data in Metabase?
- Sales — net revenue, orders, and AOV over time
- Repeat purchase — how many buyers come back, and how fast
- Catalog performance — top SKUs, units, and refund rate
- Sales channels — revenue split across storefronts and channels
- Customer groups — B2B/wholesale vs. retail revenue mix
- Discounts & refunds — depth, coupons, and where revenue returns
Which BigCommerce dashboards should you build in Metabase?
Store overview
The daily pulse of sales and demand.
- Net revenue vs. prior period (number + trend)
- Orders per day (line)
- Average order value (number + trend)
- New vs. returning customer revenue (bar)
Catalog performance
What's selling across the catalog.
- Top products by net revenue (bar)
- Units sold by SKU (table)
- Refund rate by product (bar)
- Inventory on hand vs. sell-through (table)
Customers & repeat purchase
Are buyers coming back?
- Repeat-purchase rate by cohort (line)
- Orders per customer distribution (bar)
- Customer group revenue mix (bar)
- Revenue by acquisition month (cohort table)
Channels & margin
Where sales come from, and what's left.
- Revenue by sales channel (bar)
- Discount depth as % of gross (line)
- Refunds by week (line)
- Shipping and handling as % of order (table)
How do you use the BigCommerce MCP server with the Metabase CLI?
Pair a BigCommerce MCP server with the Metabase CLI for fast, hands-on analysis. There's no first-party BigCommerce MCP today, so most teams connect the BigCommerce API through a managed MCP such as Pipedream to read live order, catalog, and customer data; the Metabase CLI's uploadcommand loads a CSV into Metabase and creates a ready-to-query table and model. For analysis, connect BigCommerce in read-only mode.
Example workflow
- Ask the BigCommerce MCP which products drove the most revenue this week.
- Export the orders or catalog performance you want to keep as a CSV.
- Run
mb upload csvto load it into Metabase as a table and model, then build questions and dashboards on top.
Be honest about the limits
- The BigCommerce MCP is great for live lookups — not for scheduled or audited reporting.
- A CSV upload is a point-in-time snapshot; refresh it with
mb upload replaceor move to the pipeline for real history. - No first-party MCP exists yet; a managed connector such as Pipedream fills the gap, so use its read-only option so analysis can't trigger writes.
mb upload csvneeds an uploads database configured under Admin → Settings → Uploads.
How do you set up the BigCommerce MCP server and the Metabase CLI?
BigCommerce MCPmanaged
- Endpoint
https://mcp.pipedream.net/v2- Transport
- Streamable HTTP
- Auth
- Connect BigCommerce inside Pipedream, then use the URL
- Scope
- REST API actions — orders, products, customers
Metabase CLIofficial
- Install
npm install -g @metabase/cli- Auth
mb auth login(browser OAuth on v62+, or an API key)- Load data
mb upload csv --file data.csv- Requires
- An uploads database (Admin → Settings → Uploads)
{
"mcpServers": {
"bigcommerce": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.pipedream.net/v2"
]
}
}
}# Install the Metabase CLI
npm install -g @metabase/cli
# Log in (opens your browser; requires Metabase v62+)
mb auth login --url https://your-metabase.example.com
# Load a BigCommerce CSV export — creates a table AND a model
mb upload csv --file bigcommerce-orders.csv --collection root
# Refresh that same table later from a new export
mb upload replace <table-id> --file bigcommerce-orders.csvConnect your BigCommerce store inside Pipedream first, then use the static MCP URL; on first connection the server opens a browser window to authorize. The Metabase CLI stores its credentials securely after mb auth login.
Can you generate a BigCommerce dashboard with AI?
Yes. Use the prompt below with any assistant that can run the BigCommerce MCP server and the Metabase CLI. It works end to end: if BigCommerce tables already exist in Metabase it analyzes those; otherwise it pulls the data over the BigCommerce MCP, loads it with mb upload csv, then builds the dashboard — reporting net revenue and skipping cards it has no data for.
Create a polished Metabase dashboard for BigCommerce ecommerce analytics.
Work end to end: get the data into Metabase if it isn't there yet, then build.
Goal: Help store operators understand sales, average order value, repeat purchase,
catalog performance, and discounts/refunds from BigCommerce data.
Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for BigCommerce tables and
models). If durable BigCommerce data is already present — synced from a warehouse
or uploaded earlier — use it and skip to Step 2.
- If nothing is there, pull it with the BigCommerce MCP server in read-only mode:
orders, order products (line items), products, customers, and (if present) sales
channels and inventory. Write each result to a CSV, then load it with the Metabase
CLI — run "mb upload csv --file <export>.csv" so each upload creates a table and a
ready-to-query model. Use "mb upload replace <table-id> --file <export>.csv" to
refresh an existing table instead of creating duplicates.
Step 2 — Inspect before querying:
BigCommerce CSV exports are usually flat and pre-aggregated (one row per order or
product, with columns like order total, refunded amount, units, and net revenue).
Warehouse tables are raw and order-grained (join orders to order_products for
line-item detail, filter by status_id for paid orders). Inspect the actual tables
and column names first; do not assume exact names.
Important:
- Build on whatever data is present; don't claim Metabase connects natively to
BigCommerce — it reads a database or CLI-uploaded tables.
- Report NET revenue: subtract refunds, discounts, and (per your policy) taxes and
shipping. State the definition on the dashboard.
- Use order-level grain for AOV.
- Count only completed/awaiting-fulfillment orders, not incomplete or cancelled.
- Define a "repeat customer" once (2+ paid orders) and reuse it everywhere.
- Only build a card if its underlying column/metric exists in the data.
- A single CSV is a point-in-time snapshot: only build trend cards if there is a
usable date column or multiple periods have been uploaded.
Dashboard title: BigCommerce Store Overview
Sections:
1. Executive summary (KPI cards): Net revenue last 30 days; Orders; AOV; Repeat-
purchase rate; Refund rate.
2. Sales & demand: Net revenue by day; Orders by day; AOV trend; New vs returning
revenue.
3. Catalog performance: Top products by net revenue; Units by SKU; Refund rate by
product.
4. Customers & retention: Repeat-purchase rate by cohort; Orders per customer;
Revenue by acquisition month; Customer group mix.
5. Channels & margin: Revenue by sales channel; Discount depth; Refunds by week.
Filters: Date range, Sales channel, Product category, Customer group, Coupon.
Reuse the models Metabase auto-created from uploaded CSVs, or (for a warehouse)
create reusable models: modeled_bc_orders, modeled_bc_order_products,
modeled_bc_products, and modeled_bc_customers.
Output: Build the dashboard if you have permission; otherwise provide the exact
questions, SQL, model definitions, and layout. Include caveats for any metric
that cannot be calculated from the available data. Keep it practical, dense,
and executive-readable. Avoid vanity metrics.How do you sync BigCommerce data into a database or warehouse?
For dashboards that need history and reliability, land BigCommerce data in a database first, then connect Metabase to that database.
Connector options
- Managed ETL — check whether your ETL vendor (Fivetran, Airbyte, and others) offers a BigCommerce source; availability varies, so confirm before relying on it.
- dlt(code) — write a Python pipeline against the BigCommerce API for full control over tables and refresh.
- BigCommerce REST/GraphQL API(raw) — the source of truth; paginate orders, order products, products, and customers and upsert on a schedule.
- Store alongside adjacent data — sync ad spend, support, and finance so you can join orders to acquisition and service.
Notes
- Land raw tables first, then build clean models on top.
- Capture refunds and discounts so you can report net — not gross — revenue.
- The Orders API and the separate Order Products endpoint together give you line-item detail.
How should you model BigCommerce data in Metabase?
Core tables
| Table | Grain | Key columns |
|---|---|---|
orders | one row per order | id, customer_id, date_created, total_inc_tax, status_id, refunded_amount |
order_products | one row per line | order_id, product_id, sku, quantity, total_inc_tax |
products | one row per product | id, name, sku, categories |
customers | one row per customer | id, email, customer_group_id, date_created |
transactions | one row per transaction | order_id, amount, gateway, status |
Modeling advice
- Normalize
status_idto labels (Completed, Awaiting Fulfillment, Refunded, Cancelled) and decide which count as "paid." - Define net revenue once (gross − discounts − refunds) and reuse it.
- Compute AOV at the order grain, not by averaging line prices.
- Treat
order_productsas the bridge between orders and products for basket analysis. - Use
customer_group_idto separate B2B/wholesale from retail.
Which BigCommerce metrics should you track in Metabase?
| Metric | Definition | Notes |
|---|---|---|
| Net revenue | Gross − discounts − refunds. | State whether taxes/shipping are included. |
| Average order value (AOV) | Net revenue ÷ orders. | Order grain; segment by channel/group. |
| Repeat-purchase rate | Customers with 2+ paid orders ÷ all. | Fixed window; watch by cohort. |
| Refund rate | Refunded amount ÷ gross. | Break out by product to find problem SKUs. |
| Channel mix | Revenue share by sales channel. | Useful for omnichannel and headless stores. |
What SQL powers BigCommerce dashboards in Metabase?
These assume synced tables in a warehouse (PostgreSQL dialect). Status IDs 10 and 11 are Completed and Awaiting Fulfillment — adjust to your definition of paid.
Order totals net of refunds over the last 30 days.
SELECT
date_trunc('day', o.date_created) AS day,
COUNT(*) AS orders,
SUM(o.total_inc_tax - COALESCE(o.refunded_amount, 0)) AS net_revenue
FROM orders o
WHERE o.status_id IN (10, 11) -- Completed, Awaiting Fulfillment
AND o.date_created >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY 1
ORDER BY 1;AOV computed at the order grain, on paid orders.
SELECT
date_trunc('week', o.date_created) AS week,
COUNT(*) AS orders,
ROUND(
SUM(o.total_inc_tax) / NULLIF(COUNT(*), 0),
2) AS aov
FROM orders o
WHERE o.status_id IN (10, 11)
GROUP BY 1
ORDER BY 1;Units and gross revenue by product over 90 days.
SELECT
op.name AS product,
SUM(op.quantity) AS units,
SUM(op.total_inc_tax) AS gross_revenue
FROM order_products op
JOIN orders o ON o.id = op.order_id
WHERE o.status_id IN (10, 11)
AND o.date_created >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY op.name
ORDER BY gross_revenue DESC
LIMIT 20;Share of customers with two or more paid orders.
WITH customer_orders AS (
SELECT
customer_id,
COUNT(*) AS paid_orders
FROM orders
WHERE status_id IN (10, 11)
AND customer_id IS NOT NULL
AND customer_id > 0
GROUP BY customer_id
)
SELECT
ROUND(
100.0 * COUNT(*) FILTER (WHERE paid_orders >= 2) / NULLIF(COUNT(*), 0),
2) AS repeat_purchase_rate_pct
FROM customer_orders;