Guide - Integrations

How do you analyze NetSuite ERP data in Metabase?

NetSuite analytics turns finance operations into shared, queryable models. NetSuite is an ERP system where finance teams manage the chart of accounts, transactions, subsidiaries, customers, vendors, and budgets. In Metabase, that operational ledger becomes a governed reporting layer for cash, working capital, close, and plan-versus-actual analysis. Metabase connects to the database that holds the synced data; it does not connect natively to NetSuite.

TL;DR - Use the MCP + CLI route for a scoped, short-lived analysis. Use the official API or approved connector route for recurring dashboards, history, permissions, and reconciliation.

How do you connect NetSuite to Metabase?

1 - MCP + CLI route (AI-assisted)

Explore a scoped snapshot quickly

NetSuite's official remote MCP service exposes SuiteQL, reports, saved searches, and records through the MCP Standard Tools SuiteApp. Use a dedicated view-only role with the MCP Server Connection permission. Pair the approved server with the Metabase CLI to load a focused CSV as a table and model.

Best for
  • Quick questions about NetSuite data
  • Validating fields and dashboard ideas before building a pipeline
  • Loading a minimal, permissioned snapshot into Metabase
Trade-offs
  • A CSV is a point-in-time snapshot, not governed reporting
  • Finance data needs least-privilege credentials and an explicit tool allowlist
  • Move recurring dashboards to the warehouse-backed route
2 - Pipeline route (warehouse-backed)

Durable dashboards with history

Use SuiteQL over SuiteTalk REST Web Services, SuiteAnalytics Connect, or a managed connector to land NetSuite records in a database. Preserve accounting periods, posting status, subsidiaries, currencies, and transaction lines.

Best for
  • Recurring finance and leadership dashboards
  • Historical aging, lifecycle, and period reporting
  • Joining finance data with sales, product, and operations data
Trade-offs
  • Requires a destination database and maintained sync
  • You own currency, status, accounting period, and reconciliation definitions
  • Every modeled total should reconcile to the source system

What can you analyze from NetSuite?

  • Trial balance and P&L by period, subsidiary, department, and class
  • Cash balance, cash movement, and short-term runway
  • Accounts receivable and payable aging
  • Budget versus actuals and operating-expense variance
  • Close completeness, unposted transactions, and reconciliation exceptions

Which NetSuite dashboards should you build in Metabase?

For: Finance leaders

Finance overview

A compact view of cash, exposure, and operating performance.

  • Cash by subsidiary and currency
  • Revenue, gross margin, and operating expense
  • AR and AP aging
  • Actuals vs. budget
For: Finance operations

Operations

The work that needs attention before the next close.

  • Invoices and bills due this week
  • Overdue balances by customer or vendor
  • Unapproved transactions
  • Accounting-period activity
For: Controllers

Controls and reconciliation

Find exceptions before they become close surprises.

  • Unposted transaction lines
  • Intercompany imbalance
  • Bank-to-ledger reconciliation exceptions
  • Manual journals by risk rule
For: FP&A

Planning and trends

Compare actuals with the plan and explain the variance.

  • Monthly actuals vs. budget
  • Rolling cash forecast
  • Department expense trend
  • Gross-margin bridge

How do you use NetSuite MCP with the Metabase CLI?

The NetSuite AI Connector Service is a officialMCP option for AI-assisted exploration. NetSuite's official remote MCP service exposes SuiteQL, reports, saved searches, and records through the MCP Standard Tools SuiteApp. Use a dedicated view-only role with the MCP Server Connection permission. The Metabase CLI can then upload a sanitized CSV and create a ready-to-query table and model.

  • Start with a narrow read-only question and the minimum required objects.
  • Remove secrets, bank details, and personal fields before exporting.
  • Use mb upload csv for a first snapshot and mb upload replace for a controlled refresh.
  • Move to an API or connector sync when the dashboard becomes recurring.

How do you set up NetSuite MCP and the Metabase CLI?

NetSuite AI Connector Serviceofficial

Data source
NetSuite API
Auth
OAuth 2.0 with PKCE and a view-only NetSuite MCP role
Access
Read-only, least privilege
Use for
Exploration and scoped exports

Metabase CLIofficial

Install
npm install -g @metabase/cli
Auth
mb auth login
Load data
mb upload csv --file data.csv
Requires
An uploads database in Metabase
MCP clientExample MCP configuration - verify before use
{
  "mcpServers": {
    "netsuite": {
      "type": "http",
      "url": "https://<accountid>.suitetalk.api.netsuite.com/services/mcp/v1/suiteapp/com.netsuite.mcpstandardtools"
    }
  }
}
TerminalLoad a NetSuite 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 scoped NetSuite export - creates a table and a model
mb upload csv --file netsuite-export.csv --collection "Finance & Accounting"

# Refresh the same table later
mb upload replace <table-id> --file netsuite-export.csv
Verify before connecting: check the current NetSuite AI Connector Service documentation, review every MCP tool, and enable an uploads database under Admin > Settings > Uploads. Use the vendor's documented authentication flow and a least-privilege role for analytics.

Can you generate a NetSuite finance dashboard with AI?

Yes. Use the prompt below with an assistant that can access an approved data route and the Metabase CLI. It tells the assistant to inspect the real schema, reconcile totals, and skip cards that the available data cannot support.

Prompt for a NetSuite finance dashboard
Create a polished Metabase dashboard for NetSuite finance analytics.
Work end to end: find existing modeled data first; if none exists, load a minimal
read-only snapshot or describe the warehouse sync required.

Goal: Connect NetSuite to Metabase for general-ledger, cash-flow, accounts-receivable, accounts-payable, budget, and close dashboards using SuiteQL or a warehouse sync.

Inspect before querying:
- Inspect actual tables, column names, currencies, status values, and timestamps.
- Do not assume the source schema matches this guide exactly.
- Reconcile source totals before publishing any finance KPI.

Important:
- Do not claim Metabase connects natively to NetSuite; it reads a
  supported database or CLI-uploaded tables.
- Keep native amount, native currency, and reporting-currency amount separate.
- Distinguish authorization, posting, payment, settlement, and reconciliation
  states where the source exposes them.
- Use stable business keys and apply updates/deletes during incremental syncs.
- Exclude account numbers, personal data, and secrets from broad dashboards.
- Only build cards whose required fields and history are actually present.

Dashboard sections:
1. Finance overview: Cash by subsidiary and currency; Revenue, gross margin, and operating expense; AR and AP aging; Actuals vs. budget.
2. Operations: Invoices and bills due this week; Overdue balances by customer or vendor; Unapproved transactions; Accounting-period activity.
3. Controls and reconciliation: Unposted transaction lines; Intercompany imbalance; Bank-to-ledger reconciliation exceptions; Manual journals by risk rule.
4. Planning and trends: Monthly actuals vs. budget; Rolling cash forecast; Department expense trend; Gross-margin bridge.

Suggested models: modeled_netsuite_gl, modeled_netsuite_open_ar, modeled_netsuite_open_ap, modeled_netsuite_budgets.

Output: Build the dashboard if you have permission; otherwise provide the exact
questions, SQL, model definitions, and layout. State refresh time, reporting
currency, accounting basis, and any reconciliation caveats.

How do you sync NetSuite into a database or warehouse?

Use SuiteQL over SuiteTalk REST Web Services, SuiteAnalytics Connect, or a managed connector to land NetSuite records in a database. Preserve accounting periods, posting status, subsidiaries, currencies, and transaction lines.

NetSuite API or data service

Start from NetSuite's official interface and authentication documentation. Extract only the finance objects required by the models below.

dlt NetSuite REST pipeline

Scaffold SuiteTalk record endpoints and load them into PostgreSQL, BigQuery, Snowflake, or another dlt destination.

Implementation checklist

  1. Create a dedicated read-only integration identity and document its scopes.
  2. Land raw records with source IDs, source timestamps, extraction time, and currency fields intact.
  3. Apply updates and deletes idempotently; keep lifecycle history when aging or process metrics depend on it.
  4. Reconcile modeled totals to NetSuite for a closed period before exposing the models broadly.
  5. Connect Metabase to the destination database and schedule model refreshes.

Source documentation

What data model should you use?

EntityGrainUse
accountsone row per GL accountchart hierarchy and account type
transactionsone row per transaction headerposting status, date, entity, and currency
transaction_linesone row per posting lineamounts by account, department, class, and subsidiary
accounting_periodsone row per fiscal periodclose state and period reporting
budgetsone row per account-period-dimensionplan-versus-actual reporting

Build reusable models such as modeled_netsuite_gl, modeled_netsuite_open_ar, modeled_netsuite_open_ap, modeled_netsuite_budgets.

Which finance metrics are useful?

Practical SQL patterns

Monthly operating expense by departmentPostgreSQL
SELECT
  date_trunc('month', posting_date) AS month,
  department_name,
  SUM(base_currency_amount) AS operating_expense
FROM modeled_netsuite_gl
WHERE account_type = 'Expense'
  AND is_posting = TRUE
GROUP BY 1, 2
ORDER BY 1, 3 DESC;
Open receivables by aging bucketPostgreSQL

Use remaining balances so partial payments and credit memos stay visible.

SELECT
  CASE
    WHEN CURRENT_DATE <= due_date THEN 'Current'
    WHEN CURRENT_DATE - due_date <= 30 THEN '1-30 days'
    WHEN CURRENT_DATE - due_date <= 60 THEN '31-60 days'
    WHEN CURRENT_DATE - due_date <= 90 THEN '61-90 days'
    ELSE '90+ days'
  END AS aging_bucket,
  SUM(open_base_currency_amount) AS open_amount
FROM modeled_netsuite_open_ar
WHERE open_base_currency_amount <> 0
GROUP BY 1
ORDER BY MIN(GREATEST(CURRENT_DATE - due_date, 0));

Common mistakes

Summing transaction headers and lines together.→ Choose one accounting grain; finance statements normally come from posting lines.
Mixing open and closed accounting periods.→ Expose period status and label preliminary periods clearly.
Ignoring base and transaction currency.→ Store both and define the FX conversion used by each dashboard.

Dashboards

Integrations

Analytics

FAQ

Does Metabase connect directly to NetSuite?
No. Query NetSuite through SuiteQL, SuiteAnalytics Connect, or a connector and land the data in a Metabase-supported database.
Should I use transaction headers or lines?
Use posting transaction lines for financial statements and retain headers for document-level workflow and status analysis.
Does Metabase connect natively to NetSuite?
No. Metabase reads supported databases and uploaded tables. Sync NetSuite data into a database or load a scoped CSV snapshot first.