Square × Metabase

How to build Square sales dashboards in Metabase

Square processes your in-person and online payments and holds your orders, catalog, and payouts. Metabase is where you turn that sales activity into shared dashboards for revenue, products, refunds, and settlement. This guide covers two complementary paths: a lightweightMCP + CLI route that pulls live data with the Square MCP server and loads a CSV into Metabase with the Metabase CLI for quick analysis, and a durable pipeline route that syncs Square into a database so you can build sales, refund, and payout dashboards anyone can read.

Heads up: Metabase connects to databases and warehouses — it does not ship a native Square connector. For dashboards that need history and reliability, you'll sync Square into a database first (covered below).

How do you connect Square to Metabase?

Most teams combine both routes: use the Square MCP server and Metabase CLI route to pull live data and stand up a quick analysis, and the pipeline route for the sales dashboards finance depends on.

1 · MCP + CLI route (AI-assisted)

Live data in, quick analysis out

Pair the Square MCP server (to look up live payments, orders, and payouts) with the Metabase CLI, whose upload command loads a CSV into Metabase as a ready-to-query table and model.

Best for
  • Quick lookups like "what did we take at each location yesterday?"
  • Loading a Square CSV export into Metabase in seconds
  • Spot-checks and one-off analyses without a warehouse
Trade-offs
  • Great for exploration, not governed financial reporting
  • Grant read-only Square scopes so analysis can't trigger writes
  • CSV uploads are snapshots — refresh or move to the pipeline for history
2 · Pipeline route (warehouse-backed)

Durable dashboards with history

Sync Square via its APIs (Payments, Orders, Payouts) or a managed connector into a database, then point Metabase at it.

Best for
  • Sales, net-revenue, and payout dashboards finance relies on
  • Location, catalog, and refund trends over time
  • Joining sales with inventory, staffing, and marketing data
Trade-offs
  • Requires a destination database and a sync to maintain
  • Processing fees and refunds affect net — model them explicitly
  • Reconcile against Square Dashboard before anyone trusts the numbers

What can you analyze from Square data in Metabase?

  • Gross and net sales — revenue before and after fees
  • Products and catalog — top items, categories, and units sold
  • Locations — performance across stores and registers
  • Refunds and disputes — refund rate, chargebacks, and reasons
  • Fees — processing cost as a share of sales
  • Payouts — settlement timing and net deposits

Which Square dashboards should you build in Metabase?

For: Founders, finance

Sales & net revenue

Gross sales and what lands after fees and refunds.

  • Gross sales by day (line)
  • Net sales after fees and refunds (line)
  • Average order value (number)
  • Sales by location (bar)
For: Ops, retail

Products & catalog

What sells and where.

  • Top items and categories by revenue (bar)
  • Units sold by item (table)
  • Sales by hour and day-of-week (heatmap)
  • Discounts applied and their impact (table)
For: Finance, ops

Refunds & disputes

Where money leaks back out.

  • Refund rate and refunded amount (number + line)
  • Disputes/chargebacks by month (bar)
  • Refund reasons (bar)
  • Payment success rate (line)
For: Finance, leadership

Fees & payouts

Cost of processing and cash landing in your account.

  • Processing fees as a share of sales (line)
  • Payouts and settlement timing (table)
  • Net settlement by month (number)
  • Tips and taxes collected (table)

How do you use the Square MCP server with the Metabase CLI?

Pair the Square MCP server with the Metabase CLI for fast, hands-on analysis. Square hosts a first-party remote MCP server that looks up live payments, orders, and payouts; the Metabase CLI's upload command loads a CSV into Metabase and creates a ready-to-query table and model. For analysis, grant read-only scopes.

Example workflow

  • Ask the Square MCP what each location took yesterday, or which payments were refunded today.
  • Export the payments, orders, and refunds you want to keep as CSVs.
  • Run mb upload csv to load them into Metabase as tables and models, then build questions and dashboards on top.

Be honest about the limits

  • The Square MCP is great for live lookups — not for scheduled or audited financial reporting.
  • A CSV upload is a point-in-time snapshot; sales and refund trends still need a warehouse sync, or refresh with mb upload replace.
  • Grant read-only scopes so analysis can't trigger writes, and respect Square API rate limits.
  • mb upload csv needs an uploads database configured under Admin → Settings → Uploads.

How do you set up the Square MCP server and the Metabase CLI?

Square MCPofficial

Endpoint
https://mcp.squareup.com/sse
Transport
Remote (SSE via mcp-remote)
Auth
OAuth (browser) or an access token
Scope
Grant read scopes for analysis work

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)
ClaudeClaude Code CLI
# Square (remote, OAuth in browser)
claude mcp add square -- npx -y mcp-remote https://mcp.squareup.com/sse
Cursor~/.cursor/mcp.json or .cursor/mcp.json
{
  "mcpServers": {
    "square": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.squareup.com/sse"]
    }
  }
}

The remote server opens a browser to authorize on first connection. Grant read-only scopes for analysis, and use a sandbox application to test first.

TerminalLoad a Square CSV with the Metabase CLI
# 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 Square CSV export — creates a table AND a model
mb upload csv --file square-payments.csv --collection root

# Refresh that same table later from a new export
mb upload replace <table-id> --file square-payments.csv

The Metabase CLI stores its credentials securely after mb auth login.

Verify before shipping: confirm an uploads database is enabled under Admin → Settings → Uploads (Metabase docs) and the current Square MCP setup in the Square MCP docs. Grant read-only scopes for analysis work.

Can you generate a Square dashboard with AI?

Yes. Use the prompt below with any assistant that can run the Square MCP server and the Metabase CLI. It works end to end: if Square tables already exist in Metabase it analyzes those; otherwise it pulls the data over the Square MCP, loads it with mb upload csv, then builds the dashboard — separating gross from net and skipping cards it has no data for.

Prompt for creating a Square Sales Overview dashboard
Create a polished Metabase dashboard for Square payments and sales analytics.
Work end to end: get the data into Metabase if it isn't there yet, then build.

Goal: Help founders and finance leaders understand gross and net sales,
products, refunds, disputes, fees, and payouts from Square data.

Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for Square tables and
  models). If durable Square 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 Square MCP server using read-only scopes:
  payments, orders, order line items, catalog items, customers, refunds, disputes,
  locations, and payouts. 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:
Do not assume exact table names. Map the available raw tables into these
analytical concepts where possible: Payments, Orders, Order line items, Catalog
items, Customers, Refunds, Disputes, Locations, and Payouts. Inspect the actual
tables and column names first.

Important:
- Build on whatever data is present; don't claim Metabase connects natively to
  Square — it reads a database or CLI-uploaded tables.
- Separate gross sales from net (after Square processing fees and refunds).
- Compute payment success rate on a consistent denominator.
- Handle multi-location data: allow filtering and comparison by location.
- Keep tips and taxes separate from product revenue.
- Only build a card if its underlying column/metric exists in the data.
- A single CSV is a point-in-time snapshot: sales and refund trends need history,
  so build trend cards only if a warehouse sync or multiple uploads provide it.

Dashboard title: Square Sales Overview

Sections:
1. Executive summary (KPI cards): Gross sales; Net sales; Fees %; Refund rate;
   Average order value; Payments success rate.
2. Sales & net revenue: Gross sales by day; Gross vs. net; Sales by location.
3. Products & catalog: Top items/categories; Units sold; Sales by hour/day.
4. Refunds & disputes: Refund rate; Disputes by month; Refund reasons.
5. Fees & payouts: Fees as a share of sales; Payouts and settlement timing; Net
   settlement.

Filters: Location, Item/category, Payment method, Date range.

Reuse the models Metabase auto-created from uploaded CSVs, or (for a warehouse)
create reusable models: modeled_square_payments, modeled_square_orders, and
modeled_square_refunds.

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. Reconcile totals against
Square Dashboard. Keep it practical, dense, and executive-readable. Avoid vanity
metrics.

How do you build the Square → Metabase pipeline?

For dashboards that need history and reliability, land Square data in a database first, then connect Metabase to that database.

No paid tool required. A fully free stack: a small dlt or hand-written script (extract) → a free Postgres database like Neon or Supabase (load) → a scheduler such as GitHub Actions cron (host) → Metabase (visualize). For hosting and scheduling details, see our data pipeline guide.

Connector options

  • Square APIs (free, first-party) — Payments, Orders, Catalog, and Payouts APIs into your own pipeline.
  • Airbyte — has a Square source covering payments, orders, and more. Free if you self-host the open-source version; paid on Airbyte Cloud.
  • Fivetran (paid, managed) — a Square connector with a maintained schema and incremental syncs.

Notes

  • Land raw tables first, then build clean models on top.
  • Amounts are in the smallest currency unit — divide in a model layer.
  • Separate processing fees and refunds so net sales are accurate.
  • Keep location_id on every fact so multi-location comparison is easy.

How should you model Square data in Metabase?

Core tables

ConceptGrainKey columns
paymentsone row per paymentid, order_id, location_id, amount_money, processing_fee, refunded_amount, status, created_at
ordersone row per orderid, location_id, total_money, total_tax, total_tip, created_at
order_line_itemsone row per lineorder_id, catalog_object_id, quantity, gross_sales
refundsone row per refundid, payment_id, amount_money, reason, created_at
payoutsone row per payoutid, location_id, amount_money, status, arrival_date
locationsone row per locationid, name, currency, country

Modeling advice

  • Build a modeled_square_payments view with gross, fee, refund, and net per payment.
  • Keep tips and taxes in separate columns from product revenue.
  • Join line items to catalog for item- and category-level analysis.
  • Carry location_id everywhere for store comparison.
  • Reconcile modeled sales and payouts against Square Dashboard.

Which Square metrics should you track in Metabase?

MetricDefinitionNotes
Gross salesSum of completed payment amounts.Before fees and refunds.
Net salesGross − fees − refunds.What the business keeps.
Average order valueSales ÷ order count.Trend by location and daypart.
Refund rateRefunded ÷ completed payments.By count or amount — label which.
Fee rateProcessing fees ÷ gross sales.Watch by payment method.
Dispute rateDisputes ÷ payments.High rates risk penalties.

What SQL powers Square dashboards in Metabase?

These assume the modeled tables above (PostgreSQL dialect, amounts in minor units). Adjust identifiers to match your schema.

Daily sales, fees, and netPostgreSQL

Gross sales and what lands after Square processing fees.

SELECT
  date_trunc('day', created_at)                       AS day,
  COUNT(*)                                            AS payments,
  ROUND(SUM(amount_money) / 100.0, 2)                 AS gross_sales,
  ROUND(SUM(processing_fee) / 100.0, 2)               AS fees,
  ROUND(SUM(amount_money - processing_fee) / 100.0, 2) AS net_sales
FROM payments
WHERE status = 'COMPLETED'
  AND created_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY 1
ORDER BY 1;
Sales by locationPostgreSQL

Compare stores and registers on volume and average order value.

SELECT
  l.name                                      AS location,
  COUNT(*)                                    AS orders,
  ROUND(SUM(p.amount_money) / 100.0, 2)       AS gross_sales,
  ROUND(AVG(p.amount_money) / 100.0, 2)       AS avg_order_value
FROM payments p
JOIN locations l ON l.id = p.location_id
WHERE p.status = 'COMPLETED'
GROUP BY l.name
ORDER BY gross_sales DESC;
Refunds by monthPostgreSQL

Refunded payments and the amount returned.

SELECT
  date_trunc('month', created_at)                     AS month,
  COUNT(*) FILTER (WHERE status = 'COMPLETED')        AS payments,
  COUNT(*) FILTER (WHERE refunded_amount > 0)         AS refunded_payments,
  ROUND(SUM(refunded_amount) / 100.0, 2)              AS refunded_amount
FROM payments
GROUP BY 1
ORDER BY 1;

What are common mistakes when analyzing Square in Metabase?

Treating a live MCP lookup or a one-off CSV as governed financial reporting.→ Use the Square MCP and CSV uploads for lookups and triage; build warehouse-backed Metabase dashboards for anything finance depends on.
Reporting gross without fees and refunds.→ Subtract processing fees and refunds to see the net the business keeps.
Blending tips and taxes into revenue.→ Keep tips and taxes in separate lines — they aren't product revenue.
Ignoring location.→ Multi-location businesses need location on every fact, or store comparisons are impossible.
Never reconciling with Square Dashboard.→ Sanity-check modeled sales and payouts against Square's own reports before trusting them.

Related analytics

Related metrics

Related integrations

FAQ

Does Metabase connect natively to Square?
No. Metabase reads SQL databases and warehouses. Sync Square into a database first (its APIs, Airbyte, or Fivetran), then connect Metabase to that database.
How do I quickly analyze Square data without a warehouse?
Pull the objects you need with the Square MCP server (grant read-only scopes), export them to CSV, and run `mb upload csv --file data.csv` with the Metabase CLI. It creates a table and a model you can build questions on right away. You'll need an uploads database enabled under Admin → Settings → Uploads. Refresh later with `mb upload replace`, or move to the pipeline route when you need history.
How do I compare locations?
Keep location_id on every payment and order, join to a locations table for names, and add a Location filter to your dashboard so you can slice or compare stores.
How do I get net sales, not just gross?
Model gross, processing fees, and refunds per payment, then net = gross − fees − refunds. Keep tips and taxes separate so they don't inflate product revenue.