How to build Findymail deliverability dashboards in Metabase
Findymail is where your email finding and verification run — searches, found contacts, and deliverability checks. Metabase is where you turn that into shared dashboards on match rate,verification quality, and credit cost. This guide covers two complementary paths: a lightweight MCP + CLI route that pulls live data with the Findymail MCP server and loads a CSV into Metabase with the Metabase CLI for quick analysis, and a durable warehouse route for reporting people depend on.
How do you connect Findymail to Metabase?
Most teams combine both routes: use the Findymail MCP server and Metabase CLI route to pull live data and stand up a quick analysis, and the warehouse route for the deliverability dashboards the team depends on.
Live data in, quick analysis out
Pair Findymail's managed MCP server (Gumloop, to look up finds and verification status) with the Metabase CLI, whose upload command loads a CSV into Metabase as a ready-to-query table and model.
- Quick lookups like "what share of this list verified clean?"
- Loading a Findymail CSV export into Metabase in seconds
- Spot-checks and one-off analyses without a warehouse
- Great for exploration, not governed reporting
- The managed connector acts with your Findymail account's permissions and credits — scope it tightly
- CSV uploads are snapshots — refresh or move to the warehouse for history
Durable dashboards with history
Sync Findymail into a database or warehouse with the Findymail API, exports, or a connector, then point Metabase at it.
- Match-rate and deliverability dashboards the whole team relies on
- Verification and credit trends over time
- Joining found contacts with outbound outcomes and CRM pipeline
- Requires a destination database and a sync to maintain
- You own the match and verified definitions and the refresh schedule
- Snapshot runs over time if you want credit and quality trends
What can you analyze from Findymail data in Metabase?
- Match rate — emails found as a share of searches, by search type
- Verification quality — valid, risky, invalid, and catch-all share
- Deliverability — safe-to-send share by list
- Credit usage — credits by week and per usable contact
- List quality — usable contacts added and duplicates vs. CRM
- ICP fit — share of finds that match your target profile
Which Findymail dashboards should you build in Metabase?
Match rate
How often a search resolves an email.
- Match rate by search type (bar)
- Found vs. not found by week (line)
- Match rate by domain size (bar)
- Searches with no result (table)
Verification
Whether found emails are safe to send.
- Valid vs. risky vs. invalid (donut)
- Safe-to-send share by list (bar)
- Catch-all rate (number)
- Verification failures over time (line)
Credits
What lead finding costs.
- Credits used by week (line)
- Credits per usable contact (number)
- Wasted credits on unverified finds (number)
- Credits by search type (bar)
List quality
Whether the output is usable.
- Usable contacts added by week (line)
- Duplicate rate vs. CRM (number)
- ICP-fit share of finds (number)
- List readiness for sending (number)
How do you use the Findymail MCP server with the Metabase CLI?
Pair the Findymail MCP server with the Metabase CLI for fast, hands-on analysis. Findymail connects through a managed MCP server (Gumloop) that looks up finds and verification status; the Metabase CLI's upload command loads a CSV into Metabase and creates a ready-to-query table and model.
Example workflow
- Ask the Findymail MCP what share of a new list verified clean.
- Export the found contacts and verification results 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 Findymail MCP is great for live lookups — not for scheduled or audited deliverability reporting.
- A CSV upload is a point-in-time snapshot; refresh it with
mb upload replaceor move to the warehouse for real history. - The managed connector acts with the connected Findymail account's permissions and consumes credits — scope it tightly.
mb upload csvneeds an uploads database configured under Admin → Settings → Uploads.
How do you set up the Findymail MCP server and the Metabase CLI?
Findymail MCPmanaged
- Provider
- Gumloop (managed connector)
- Endpoint
- Gumloop-generated server URL
- Auth
- Connect your Findymail account in Gumloop (API key)
- Note
- No official first-party Findymail 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": {
"findymail": {
"url": "https://your-gumloop-server-url/mcp"
}
}
}# 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 Findymail CSV export — creates a table AND a model
mb upload csv --file findymail-contacts.csv --collection root
# Refresh that same table later from a new export
mb upload replace <table-id> --file findymail-contacts.csvFindymail doesn't publish a first-party MCP server, so the practical path is a managed connector: connect your account in Gumloop, then use its generated MCP URL. Because a third party brokers access, scope the connection tightly. The Metabase CLI stores its credentials securely after mb auth login.
Can you generate a Findymail dashboard with AI?
Yes. Use the prompt below with any assistant that can run the Findymail MCP server and the Metabase CLI. It works end to end: if Findymail tables already exist in Metabase it analyzes those; otherwise it pulls the data over the Findymail MCP, loads it with mb upload csv, then builds the dashboard — keeping match rate and valid rate distinct and skipping cards it has no data for.
Create a polished Metabase dashboard for Findymail lead-finding analytics.
Work end to end: get the data into Metabase if it isn't there yet, then build.
Goal: Help RevOps and deliverability teams understand match rate, verification
quality, credit usage, and list quality from Findymail data.
Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for Findymail tables and
models). If durable Findymail 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 Findymail MCP server: searches (finder
requests), found contacts, verifications (valid/risky/invalid/catch-all),
lists, and credit/usage 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:
Findymail CSV exports are usually flat (one row per found contact, with an email,
verification status, and credits used). Warehouse tables are rawer, often with a
separate searches table and a per-verification row. Inspect the actual tables and
column names first; do not assume exact names or that a searches table exists.
Important:
- Build on whatever data is present; don't claim Metabase connects natively to
Findymail — it reads a database or CLI-uploaded tables.
- Define match rate as found ÷ searched, and verified/safe-to-send share as
valid ÷ verified — keep them distinct.
- Treat catch-all separately from valid; it is not a guarantee of deliverability.
- Report credits with a denominator (per usable contact) visible.
- 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: Findymail Deliverability Overview
Sections:
1. Executive summary (KPI cards): Match rate; Valid email share; Catch-all rate;
Credits used; Credits per usable contact; Usable contacts added.
2. Match rate: By search type; found vs. not found; by domain size.
3. Verification: Valid vs. risky vs. invalid; safe-to-send by list; catch-all.
4. Credits: By week; per usable contact; wasted credits.
5. List quality: Usable contacts added; duplicates vs. CRM; ICP fit.
Filters: Search type, List, Date range.
Reuse the models Metabase auto-created from uploaded CSVs, or (for a warehouse)
create reusable models: modeled_findymail_searches, modeled_findymail_contacts,
modeled_findymail_verifications, and modeled_findymail_credit_events.
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
Findymail's own usage views. Keep it practical, dense, and executive-readable.How do you sync Findymail data into a database or warehouse?
For dashboards that need history and reliability, land Findymail data in a database first, then connect Metabase to that database.
Connector options
- Findymail API (raw) — pull searches, found contacts, verification results, lists, and credit usage.
- dlt (code) — write a Python pipeline against the Findymail API for incremental loads.
- Exports — scheduled list exports can land the core objects on a cadence.
Notes
- Land raw tables first, then build clean models on top.
- Keep the search outcome (found/not found) so match rate is honest.
- Keep verification status distinct (valid/risky/invalid/catch-all).
- Snapshot credit usage over time so cost trends are possible.
How should you model Findymail data in Metabase?
Core tables
| Table | Grain | Key columns |
|---|---|---|
searches | one row per search | id, search_type, found, searched_at |
contacts | one row per found contact | id, list_name, email, domain, created_at |
verifications | one row per verification | contact_id, status (valid/risky/invalid/catch_all),verified_at |
credit_events | one row per credit charge | contact_id, credits, used_at |
Modeling advice
- Keep match rate (found ÷ searched) and verified share (valid ÷ verified) as distinct metrics.
- Treat catch-all separately — it's not a deliverability guarantee.
- Model
credit_eventsso cost per usable contact is easy to compute. - Join to your CRM to measure duplicate rate and downstream use.
Which Findymail metrics should you track in Metabase?
| Metric | Definition | Notes |
|---|---|---|
| Match rate | Found ÷ searched. | Segment by search type and domain size. |
| Valid email share | Valid ÷ verified. | Drives deliverability downstream. |
| Catch-all rate | Catch-all ÷ verified. | Not a guarantee of deliverability. |
| Credits per usable contact | Credits used ÷ valid contacts. | An efficiency signal, not a target. |
| Duplicate rate | Finds matching an existing CRM contact. | Keeps quality honest. |
| Usable contacts added | Valid new contacts per period. | Read with match rate, not alone. |
What SQL powers Findymail dashboards in Metabase?
These assume the modeled tables above (PostgreSQL dialect). Adjust identifiers to match your warehouse.
Found as a share of searches over the last 90 days.
-- Match rate by search type over the last 90 days
SELECT
s.search_type,
COUNT(*) AS searches,
COUNT(*) FILTER (WHERE s.found) AS found,
ROUND(100.0 * COUNT(*) FILTER (WHERE s.found)
/ NULLIF(COUNT(*), 0), 1) AS match_rate_pct
FROM modeled_findymail_searches s
WHERE s.searched_at >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY s.search_type
ORDER BY searches DESC;Valid, catch-all, and invalid share per list.
-- Verification breakdown by list
SELECT
c.list_name,
COUNT(*) AS emails,
ROUND(100.0 * COUNT(*) FILTER (WHERE v.status = 'valid')
/ NULLIF(COUNT(*), 0), 1) AS valid_pct,
ROUND(100.0 * COUNT(*) FILTER (WHERE v.status = 'catch_all')
/ NULLIF(COUNT(*), 0), 1) AS catch_all_pct,
ROUND(100.0 * COUNT(*) FILTER (WHERE v.status = 'invalid')
/ NULLIF(COUNT(*), 0), 1) AS invalid_pct
FROM modeled_findymail_contacts c
JOIN modeled_findymail_verifications v ON v.contact_id = c.id
GROUP BY c.list_name
ORDER BY emails DESC;Cost efficiency by week, using valid emails as the usable base.
-- Credits per usable contact by week
SELECT
date_trunc('week', e.used_at) AS week,
SUM(e.credits) AS credits_used,
COUNT(DISTINCT c.id) FILTER (WHERE v.status = 'valid') AS usable_contacts,
ROUND(SUM(e.credits)::numeric
/ NULLIF(COUNT(DISTINCT c.id) FILTER (WHERE v.status = 'valid'), 0), 2)
AS credits_per_usable_contact
FROM modeled_findymail_credit_events e
LEFT JOIN modeled_findymail_contacts c ON c.id = e.contact_id
LEFT JOIN modeled_findymail_verifications v ON v.contact_id = c.id
GROUP BY 1
ORDER BY 1;