Zoho CRM × Metabase

How to build Zoho CRM sales dashboards in Metabase

Zoho CRM is where your leads, deals, and activities live. Metabase is where you turn that pipeline activity into shared, trustworthy sales dashboards. This guide covers two complementary paths: a lightweight MCP + CLI route that pulls live data with the Zoho CRM MCP servers and loads a CSV into Metabase with the Metabase CLI for quick analysis, and a durable pipeline route that syncs Zoho CRM into a database so you can build pipeline, win-rate, and conversion dashboards anyone can read.

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

How do you connect Zoho CRM to Metabase?

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

1 · MCP + CLI route (AI-assisted)

Live data in, quick analysis out

Pair Zoho's official CRM MCP servers (to read live deals, contacts, and activities) 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 "which deals slipped their closing date?"
  • Loading a Zoho CRM CSV export into Metabase in seconds
  • Spot-checks and one-off analyses without a warehouse
Trade-offs
  • Great for exploration, not governed reporting
  • Use read-only Zoho servers (data insights) to avoid accidental writes
  • CSV uploads are snapshots — refresh or move to the pipeline for history
2 · Pipeline route (warehouse-backed)

Durable dashboards with history

Sync Zoho CRM into a database or warehouse with a managed connector, dlt, or the API, then point Metabase at it.

Best for
  • Pipeline, win-rate, and conversion dashboards the whole team relies on
  • Sales cycle and stage-conversion trends over quarters
  • Joining CRM data with product usage, billing, or support data
Trade-offs
  • Requires a destination database and a sync to maintain
  • You own the stage and win definitions and the refresh schedule
  • Sync stage history if you want accurate velocity metrics

What can you analyze from Zoho CRM data in Metabase?

  • Pipeline — open value by stage, owner, and pipeline, plus coverage against target
  • Win rate — deals won vs. closed, by pipeline, source, and stage
  • Sales cycle length — created to won, with median and p90
  • Stage conversion — where deals advance and where they stall
  • Deal size — average and median value, plus mix by pipeline
  • Activity — calls, tasks, and meetings by rep and account

Which Zoho CRM dashboards should you build in Metabase?

For: Sales leaders

Pipeline

The open book of business, right now.

  • Open deals by stage (funnel)
  • Pipeline value by owner and pipeline (bar)
  • Coverage vs. target for the period (number)
  • Deals past their closing date (table)
For: Sales ops

Conversion

Where deals advance and where they stall.

  • Stage-to-stage conversion (funnel)
  • Win rate by pipeline and lead source (bar)
  • Deals created vs. won by week (dual line)
  • Lost-reason breakdown (bar)
For: Revenue leadership

Velocity

How fast deals move and close.

  • Median sales cycle length (number + trend)
  • Time-in-stage by stage (bar)
  • Deal velocity: value / cycle time (number)
  • Aging of open deals (table)
For: Managers

Sales activity

Effort and coverage, not surveillance.

  • Calls, tasks, and meetings by rep (bar)
  • Activities per open deal (number)
  • Overdue activities (number)
  • New-lead response time (line)

How do you use the Zoho CRM MCP servers with the Metabase CLI?

Pair Zoho's CRM MCP servers with the Metabase CLI for fast, hands-on analysis. Zoho's MCP servers look up current deals, contacts, and activities; the Metabase CLI's upload command loads a CSV into Metabase and creates a ready-to-query table and model. For analysis, stick to the read-only data-insights server.

Example workflow

  • Ask the Zoho MCP which deals slipped their closing date, or an account's open deals and recent activity.
  • Export the deals or pipeline view you want to keep as a CSV.
  • Run mb upload csv to load it into Metabase as a table and model, then build questions and dashboards on top.

Be honest about the limits

  • The Zoho MCP is great for live lookups — not for scheduled or audited pipeline reporting.
  • A CSV upload is a point-in-time snapshot; refresh it with mb upload replace or move to the pipeline for real history.
  • Use Zoho's read-only data-insights server so analysis can't trigger writes, and respect API credit limits and the connected user's permissions.
  • mb upload csv needs an uploads database configured under Admin → Settings → Uploads.

How do you set up the Zoho CRM MCP servers and the Metabase CLI?

Zoho CRM MCPofficial

Servers
Four composable: data insights, data operations, modules, workflow
Setup
Pick servers in Zoho's Server Registry, copy config
Auth
OAuth on first connection
Clients
Cursor, Claude, VS Code, Windsurf

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)
Cursor~/.cursor/mcp.json or .cursor/mcp.json
{
  "mcpServers": {
    "zoho-crm": {
      "url": "https://<your-zoho-mcp-server-url>/mcp"
    }
  }
}
TerminalLoad a Zoho CRM 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 Zoho CRM CSV export — creates a table AND a model
mb upload csv --file zoho-deals.csv --collection root

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

Zoho publishes four composable MCP servers for CRM — data insights, data operations, modules, and workflow/automation. Choose the servers you need in Zoho's Server Registry, copy the generated config into your MCP client, and authenticate via OAuth on first use. 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 Zoho CRM MCP setup in the Zoho CRM MCP docs.

Can you generate a Zoho CRM dashboard with AI?

Yes. Use the prompt below with any assistant that can run the Zoho CRM MCP servers and the Metabase CLI. It works end to end: if Zoho tables already exist in Metabase it analyzes those; otherwise it pulls the data over the Zoho MCP, loads it with mb upload csv, then builds the dashboard — fixing the win-rate denominator and skipping metrics the data can't support instead of faking them.

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

Goal: Help sales leaders understand pipeline, win rate, conversion, sales cycle,
and rep activity from Zoho CRM data.

Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for Zoho CRM tables and
  models). If durable Zoho 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 Zoho CRM MCP servers (use the read-only
  data-insights server where supported): deals, contacts, accounts, activities,
  and stages. 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:
Zoho CSV exports are usually flat and pre-aggregated (one row per deal, with
columns like stage, amount, and closing date), while warehouse tables are raw and
normalized across modules (deals, stage history, contacts, activities). Inspect
the actual tables and column names first; do not assume exact names or that a
stage-history table exists.

Important:
- Build on whatever data is present; don't claim Metabase connects natively to
  Zoho CRM — it reads a database or CLI-uploaded tables.
- Define "won" and "closed" once (stage = Closed Won vs. Closed Won/Closed Lost)
  and reuse them.
- For win rate, state the denominator explicitly (won / closed vs. won / created)
  and hold the cohort fixed.
- Report sales cycle length and deal size as medians (p50) and p90, never plain
  averages — both are right-skewed.
- Only compute sales cycle length, time-in-stage, or stage conversion when stage
  history exists; otherwise use a caveat.
- Zoho supports multi-currency — convert all amounts to a single reporting
  currency; caveat any mix.
- 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: Zoho CRM Sales Overview

Sections:
1. Executive summary (KPI cards): Open pipeline; Coverage vs. target; Win rate
   (last 90 days); Median sales cycle length; Average and median deal size; Deals
   closing this period.
2. Pipeline: Open deals by stage; value by owner and pipeline; deals past close
   date.
3. Conversion: Stage-to-stage conversion; win rate by pipeline and source; lost
   reasons.
4. Velocity: Median cycle length; time-in-stage; deal velocity; aging.
5. Activity: Calls/tasks/meetings by rep; activities per open deal; overdue
   activities.

Filters: Pipeline, Stage, Owner, Lead source, Date range.

Reuse the models Metabase auto-created from uploaded CSVs, or (for a warehouse)
create reusable models: modeled_zoho_deals, modeled_zoho_stage_history,
modeled_zoho_contacts, modeled_zoho_accounts, and modeled_zoho_activities.

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
Zoho CRM's own Analytics. Keep it practical, dense, and executive-readable. Avoid
vanity metrics.

How do you sync Zoho CRM data into a database or warehouse?

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

Connector options

  • Airbyte (managed ETL) — has a Zoho CRM source covering modules like deals, contacts, accounts, and activities.
  • Fivetran (managed ETL) — offers a Zoho CRM connector with a maintained schema and incremental syncs.
  • Zoho CRM Bulk Read API (raw) — the source of truth; export modules and use the field/stage history for transitions.
  • Zoho Analytics sync — if you already replicate CRM into Zoho Analytics' warehouse, you can point other tools at that store.

Notes

  • Land raw tables first, then build clean models on top.
  • Sync stage history (Stage_History related list or field history) if you want sales cycle length, time-in-stage, and stage conversion.
  • Zoho supports multiple pipelines and layouts — normalize stage names and order in a model.
  • Multi-currency is common in Zoho — store both the deal currency and a converted reporting amount.

How should you model Zoho CRM data in Metabase?

Core tables

ModuleGrainKey columns
deals (Potentials)one row per dealid, stage, pipeline, amount, currency, closing_date, created_time, owner_id, account_id
stage_historyone row per changedeal_id, stage, modified_time
contactsone row per contactid, account_id, lead_source, created_time
accountsone row per accountid, name, industry, owner_id
leadsone row per leadid, lead_source, lead_status, created_time
activitiesone row per task/call/eventid, deal_id, type, status, due_date, owner_id

Modeling advice

  • Build a modeled_zoho_deals table with clean stage,pipeline, amount (one currency), and closing_date.
  • Derive modeled_zoho_stage_history from the Stage_History module or field history for time-in-stage and cycle length.
  • Normalize stage names and order across layouts so funnels stay stable.
  • Convert deal amounts to one reporting currency if you sell in several.
  • Reconcile modeled pipeline and win rate against Zoho CRM Analytics before anyone trusts the numbers.

Which Zoho CRM metrics should you track in Metabase?

MetricDefinitionNotes
Open pipelineSum of amount for open deals.Segment by stage, owner, pipeline.
Win rateWon ÷ closed deals in a cohort.Fix the denominator (closed vs. created) before comparing.
Sales cycle lengthCreated → won, in days.Report median and p90; it's right-skewed.
Stage conversionDeals reaching stage N+1 ÷ reaching stage N.Needs stage history.
Deal velocityWon value ÷ average cycle time.Read alongside coverage, not alone.
Average deal sizeWon amount ÷ won deals.Report the median too; outliers distort the mean.

What SQL powers Zoho CRM dashboards in Metabase?

These assume the modeled tables above (PostgreSQL dialect). Adjust identifiers to match your warehouse.

Win rate by monthPostgreSQL

Won as a share of closed deals over the last 12 months.

SELECT
  date_trunc('month', d.closing_date) AS month,
  COUNT(*) FILTER (WHERE d.stage = 'Closed Won')                          AS won,
  COUNT(*) FILTER (WHERE d.stage IN ('Closed Won', 'Closed Lost'))        AS closed,
  ROUND(
    100.0 * COUNT(*) FILTER (WHERE d.stage = 'Closed Won')
      / NULLIF(COUNT(*) FILTER (WHERE d.stage IN ('Closed Won', 'Closed Lost')), 0),
    1
  ) AS win_rate_pct
FROM modeled_zoho_deals d
WHERE d.stage IN ('Closed Won', 'Closed Lost')
  AND d.closing_date >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY 1
ORDER BY 1;
Open pipeline by stagePostgreSQL

The current funnel — open deals and value by stage.

SELECT
  d.stage,
  COUNT(*)               AS open_deals,
  ROUND(SUM(d.amount), 2) AS open_value
FROM modeled_zoho_deals d
WHERE d.stage NOT IN ('Closed Won', 'Closed Lost')
GROUP BY d.stage
ORDER BY open_value DESC;
Sales cycle length (median and p90)PostgreSQL

Days from created to won; medians beat averages here.

-- Median days from created to won, by month closed
SELECT
  date_trunc('month', d.closing_date) AS month,
  percentile_cont(0.5) WITHIN GROUP (
    ORDER BY EXTRACT(EPOCH FROM (d.closing_date::timestamp - d.created_time)) / 86400.0
  ) AS median_cycle_days,
  percentile_cont(0.9) WITHIN GROUP (
    ORDER BY EXTRACT(EPOCH FROM (d.closing_date::timestamp - d.created_time)) / 86400.0
  ) AS p90_cycle_days
FROM modeled_zoho_deals d
WHERE d.stage = 'Closed Won'
GROUP BY 1
ORDER BY 1;

What are common mistakes when analyzing Zoho CRM in Metabase?

Treating a live MCP lookup or a one-off CSV as governed reporting.→ Use the Zoho MCP and CSV uploads for live exploration; build warehouse-backed dashboards for anything the team depends on.
Computing sales cycle without stage history.→ Sync the Stage_History module or field history — a current snapshot can't tell you when a deal entered or left a stage.
Ignoring multiple pipelines and layouts.→ Zoho supports several pipelines; normalize stage names and order before comparing funnels.
Summing amounts across currencies.→ Convert to one reporting currency before totaling deal value.
Averaging deal size and cycle length.→ Both are right-skewed; report the median (and p90) alongside the mean.
Never reconciling with Zoho CRM Analytics.→ Sanity-check modeled pipeline and win rate against Zoho's own reports before trusting them.

Related analytics

Related metrics

Related integrations

FAQ

Does Metabase connect natively to Zoho CRM?
No. Metabase reads databases and warehouses. Sync Zoho CRM into a database first (Airbyte, Fivetran, the Bulk Read API, or a Zoho Analytics store), then connect Metabase to that database.
Is there an official Zoho CRM MCP server?
Yes. Zoho provides four composable MCP servers for CRM — data insights, data operations, modules, and workflow/automation. Choose servers in Zoho's Server Registry, copy the config into Cursor, Claude, VS Code, or Windsurf, and authenticate via OAuth. Use MCP for live lookups, not governed reporting.
How do I quickly load Zoho CRM data without a warehouse?
Export a CSV from Zoho CRM 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 calculate sales cycle length from Zoho CRM data?
Sync stage history (the Stage_History module or field history), then measure days from created_time to the Closed Won transition. Report the median and p90 rather than the average — the distribution is heavily right-skewed.