How to build Overloop sales dashboards in Metabase
Overloop is an outbound sales CRM where your prospects, deals, and email campaigns live. Metabase is where you turn that activity into shared, trustworthy sales dashboards. This guide covers two complementary paths: a lightweight MCP + CLI route that pulls live data with the Overloop MCP server and loads a CSV into Metabase with the Metabase CLI for quick analysis, and a durable pipeline route that syncs Overloop into a database so you can build pipeline, win-rate, and outbound dashboards anyone can read.
How do you connect Overloop to Metabase?
Most teams combine both routes: use the Overloop MCP server 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.
Live data in, quick analysis out
Pair the Overloop MCP server (managed via Pipedream, to read live prospects, deals, and campaigns) with the Metabase CLI, whose upload command loads a CSV into Metabase as a ready-to-query table and model.
- Ad-hoc questions like "which campaigns are driving replies this week?"
- Loading an Overloop CSV export into Metabase in seconds
- Spot-checks and one-off analyses without a warehouse
- Great for exploration, not governed reporting
- Scope the Pipedream connection tightly so analysis can't trigger writes
- CSV uploads are snapshots — refresh or move to the pipeline for history
Durable dashboards with history
Sync Overloop into a database or warehouse with the Overloop API, dlt, or a managed connector, then point Metabase at it.
- Pipeline, win-rate, and outbound dashboards the whole team relies on
- Campaign and stage-conversion trends over quarters
- Joining outbound activity with pipeline and revenue data
- Requires a destination database and a sync to maintain
- You own the won/lost and stage definitions and the refresh schedule
- Capture stage changes if you want accurate velocity metrics
What can you analyze from Overloop data in Metabase?
- Pipeline — open deal value by stage and owner, plus coverage against target
- Win rate — deals won vs. closed, by campaign and source
- Outbound performance — emails sent, open rate, reply rate, and bounce rate by campaign
- 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 campaign
Which Overloop dashboards should you build in Metabase?
Pipeline
The open book of business, right now.
- Open deals by stage (funnel)
- Pipeline value by owner (bar)
- Coverage vs. target for the period (number)
- Deals with no recent activity (table)
Outbound
How outbound campaigns perform.
- Emails sent by campaign (bar)
- Open and reply rate by campaign (bar)
- Meetings booked from outbound (number)
- Bounce rate by campaign (number)
Conversion
Where deals advance and where they stall.
- Stage-to-stage conversion (funnel)
- Win rate by campaign source (bar)
- Created vs. won by month (dual line)
- Lost reasons breakdown (bar)
Velocity
How fast deals close.
- Median sales cycle length (number + trend)
- Time-in-stage by stage (bar)
- Deal velocity: value / cycle time (number)
- Aging of open deals (table)
How do you use the Overloop MCP server with the Metabase CLI?
Pair the Overloop MCP server with the Metabase CLI for fast, hands-on analysis. The Overloop MCP (managed via Pipedream) looks up current prospects, deals, and campaigns; the Metabase CLI's upload command loads a CSV into Metabase and creates a ready-to-query table and model.
Example workflow
- Ask the Overloop MCP which campaigns are driving the most replies this month.
- Export the campaign or deal data 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 Overloop 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 replaceor move to the pipeline for real history — sales cycle and stage conversion still need synced stage history in a database. - The managed connector acts with the permissions of the connected Overloop account; scope it tightly.
mb upload csvneeds an uploads database configured under Admin → Settings → Uploads.
How do you set up the Overloop MCP server and the Metabase CLI?
Overloop MCPmanaged
- Provider
- Pipedream (managed connector)
- Endpoint
https://mcp.pipedream.net/v2- Auth
- Connect your Overloop account in Pipedream
- Note
- No official first-party Overloop MCP server yet
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": {
"overloop": {
"url": "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 an Overloop CSV export — creates a table AND a model
mb upload csv --file overloop-deals.csv --collection root
# Refresh that same table later from a new export
mb upload replace <table-id> --file overloop-deals.csvOverloop doesn't publish a first-party MCP server, so the practical path is a managed connector: connect your Overloop account in Pipedream, then use its static MCP URL. Because a third party brokers access, scope the connection tightly and review what the connector can read and write. The Metabase CLI stores its credentials securely after mb auth login.
Can you generate an Overloop dashboard with AI?
Yes. Use the prompt below with any assistant that can run the Overloop MCP server and the Metabase CLI. It works end to end: if Overloop tables already exist in Metabase it analyzes those; otherwise it pulls the data over the Overloop MCP, loads it with mb upload csv, then builds the dashboard — and tells the agent to skip metrics the data can't support instead of faking them.
Create a polished Metabase dashboard for Overloop 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 outbound campaign performance from Overloop data.
Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for Overloop tables and
models). If durable Overloop 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 Overloop MCP server (managed via
Pipedream): prospects, companies, deals, campaigns, and email/conversation
events. 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:
Overloop CSV exports are usually flat and pre-aggregated (one row per deal or
campaign, with columns like stage, status, value, sends, opens, and replies).
Warehouse tables are raw and event-grained (email events with sent_at,
opened_at, replied_at, and status). Inspect the actual tables and column names
first; do not assume exact names or that stage-change history exists.
Important:
- Build on whatever data is present; don't claim Metabase connects natively to
Overloop — it reads a database or CLI-uploaded tables.
- Define "won" and "closed" once (deal status) and reuse them.
- For win rate, state the denominator explicitly (won / closed vs. won / created)
and hold the cohort fixed.
- For outbound rates, define the denominators (delivered vs. sent) and keep bounces
out of open/reply denominators.
- Report sales cycle length and deal size as medians (p50) and p90, never plain
averages — both are right-skewed.
- Only build a card if its underlying column/metric exists in the data; if deal
stage-change history is missing, skip sales cycle length, time-in-stage, and
stage conversion and use a caveat instead.
- Convert all amounts to a single reporting currency; caveat any mix.
- 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: Overloop Sales Overview
Sections:
1. Executive summary (KPI cards): Open pipeline; Win rate (last 90 days); Reply
rate; Meetings booked; Median sales cycle length; Average and median deal size.
2. Pipeline: Open deals by stage; value by owner; stale deals.
3. Outbound: Emails sent by campaign; open and reply rate; bounce rate; meetings
booked.
4. Conversion: Stage-to-stage conversion; win rate by campaign; lost reasons.
5. Velocity: Median cycle length; time-in-stage; deal velocity; aging.
Filters: Campaign, Stage, Owner, Date range.
Reuse the models Metabase auto-created from uploaded CSVs, or (for a warehouse)
create reusable models: modeled_overloop_deals, modeled_overloop_stage_history,
modeled_overloop_prospects, modeled_overloop_campaigns, and
modeled_overloop_emails.
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
Overloop's own reporting. Keep it practical, dense, and executive-readable.How do you sync Overloop data into a database or warehouse?
For dashboards that need history and reliability, land Overloop data in a database first, then connect Metabase to that database.
Connector options
- Overloop API (raw) — the source of truth; pull prospects, companies, deals, campaigns, and email/conversation events.
- dlt (code) — write a Python pipeline against the Overloop API for full control of schema and incremental loads.
- Managed ETL (Airbyte / Fivetran) — check the connector catalogs for an Overloop source; where one exists it can land the core objects on a schedule.
Notes
- Land raw tables first, then build clean models on top.
- Keep email event status (sent/delivered/opened/replied/bounced) so outbound rates stay honest.
- Capture stage changes for cycle length, time-in-stage, and conversion.
- Convert deal values to a single reporting currency.
How should you model Overloop data in Metabase?
Core tables
| Table | Grain | Key columns |
|---|---|---|
deals | one row per deal | id, prospect_id, stage, status, value, currency, created_at, closed_at, owner_id |
campaigns | one row per campaign | id, name, status |
emails | one row per email | id, campaign_id, prospect_id, status, sent_at, opened_at, replied_at |
prospects | one row per prospect | id, company_id, source, created_at |
companies | one row per company | id, name, industry |
Modeling advice
- Build a
modeled_overloop_dealstable with cleanstatus,stage,value(one currency), andclosed_at. - Build
modeled_overloop_emailswith clear event flags so open, reply, and bounce rates are unambiguous. - Normalize stages into an ordered funnel for conversion charts.
- Derive
modeled_overloop_stage_historyfor time-in-stage and cycle length. - Reconcile modeled pipeline against Overloop's own reports before trusting it.
Which Overloop metrics should you track in Metabase?
| Metric | Definition | Notes |
|---|---|---|
| Open pipeline | Sum of value for open deals. | Segment by stage, owner, campaign. |
| Win rate | Won ÷ closed deals in a cohort. | Fix the denominator (closed vs. created) first. |
| Reply rate | Replies ÷ delivered outbound emails. | See reply rate. |
| Bounce rate | Bounced ÷ sent outbound emails. | See email bounce rate. |
| Sales cycle length | Created → won, in days. | Report median and p90; it's right-skewed. |
| Average deal size | Won value ÷ won deals. | Report the median too; outliers distort the mean. |
What SQL powers Overloop dashboards in Metabase?
These assume the modeled tables above (PostgreSQL dialect). Adjust identifiers to match your warehouse.
Won as a share of closed deals over the last 12 months.
SELECT
date_trunc('month', d.closed_at) AS month,
COUNT(*) FILTER (WHERE d.status = 'won') AS won,
COUNT(*) FILTER (WHERE d.status IN ('won', 'lost')) AS closed,
ROUND(
100.0 * COUNT(*) FILTER (WHERE d.status = 'won')
/ NULLIF(COUNT(*) FILTER (WHERE d.status IN ('won', 'lost')), 0),
1
) AS win_rate_pct
FROM modeled_overloop_deals d
WHERE d.status IN ('won', 'lost')
AND d.closed_at >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY 1
ORDER BY 1;Replies as a share of delivered emails, by campaign.
-- Outbound performance by campaign over the last 90 days
SELECT
c.name AS campaign,
COUNT(*) FILTER (WHERE e.status <> 'bounced') AS delivered,
COUNT(*) FILTER (WHERE e.opened_at IS NOT NULL) AS opened,
COUNT(*) FILTER (WHERE e.replied_at IS NOT NULL) AS replied,
ROUND(
100.0 * COUNT(*) FILTER (WHERE e.replied_at IS NOT NULL)
/ NULLIF(COUNT(*) FILTER (WHERE e.status <> 'bounced'), 0),
1
) AS reply_rate_pct
FROM modeled_overloop_emails e
JOIN modeled_overloop_campaigns c ON c.id = e.campaign_id
WHERE e.sent_at >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY c.name
ORDER BY delivered DESC;The current funnel — open deals and value by stage.
SELECT
d.stage,
COUNT(*) AS open_deals,
ROUND(SUM(d.value), 2) AS pipeline_value
FROM modeled_overloop_deals d
WHERE d.status = 'open'
GROUP BY d.stage
ORDER BY pipeline_value DESC;