DataForSEO × Metabase

How to build DataForSEO dashboards in Metabase

DataForSEO is a pay-as-you-go SEO-data API provider serving raw SERP results, keyword data, backlinks, and on-page crawls at bulk scale. Metabase is where you turn that SEO data into shared, trustworthy dashboards. This guide covers two complementary paths: a lightweight MCP + CLI route that pulls live data with the DataForSEO MCP server and loads a CSV into Metabase with the Metabase CLI, and a durable pipeline route that syncs DataForSEO snapshots into a database so you can build dashboards anyone can read.

Heads up: Metabase connects to databases and warehouses — it does not ship a native DataForSEO connector. Sync dated snapshots — keyword positions, authority scores, referring-domain counts — on a schedule, because the warehouse only trends what you've stored.

How do you connect DataForSEO to Metabase?

Most teams combine both routes: use MCP and CLI uploads for a fast first pass, then move recurring SEO reporting to a warehouse-backed model.

1 · MCP + CLI route (AI-assisted)

Live data in, quick analysis out

Pair the DataForSEO MCP server with the Metabase CLI. Use MCP for live lookups, write a scoped result to CSV, then load it into Metabase as a ready-to-query table and model.

Best for
  • Quick lookups such as "show me rank tracking from raw serp snapshots"
  • Loading a DataForSEO export into Metabase in seconds
  • Spot-checks and one-off analyses without a warehouse
Trade-offs
  • Great for exploration, not governed recurring reporting
  • MCP and API calls draw from the same plan quotas — scope requests tightly
  • CSV uploads are snapshots — refresh or move to the pipeline for history
2 · Pipeline route (warehouse-backed)

Durable dashboards with history

Sync DataForSEO snapshots and rollups into a database or warehouse on a schedule, then point Metabase at it.

Best for
  • DataForSEO reporting that SEO and content leads depend on
  • Joining DataForSEO data with Search Console, analytics, and revenue data
  • Long-run trends for rank tracking from raw serp snapshots and serp-feature presence by keyword set
Trade-offs
  • You own the refresh schedule and the snapshot grain
  • Sync dated snapshots and rollups — not one-off exports
  • API-unit budgets constrain how wide and how often you can pull

What can you analyze from DataForSEO data in Metabase?

  • Rank tracking from raw SERP snapshots — built from SERP result snapshots and the related keyword search volume and CPC, SERP feature presence, backlink index rows data your sync exposes.
  • SERP-feature presence by keyword set — built from SERP result snapshots and the related keyword search volume and CPC, SERP feature presence, backlink index rows data your sync exposes.
  • Competitor share of tracked SERPs — built from SERP result snapshots and the related keyword search volume and CPC, SERP feature presence, backlink index rows data your sync exposes.
  • Keyword universe: volume and difficulty coverage — built from SERP result snapshots and the related keyword search volume and CPC, SERP feature presence, backlink index rows data your sync exposes.
  • On-page issue counts by crawl — built from SERP result snapshots and the related keyword search volume and CPC, SERP feature presence, backlink index rows data your sync exposes.

Which DataForSEO dashboards should you build in Metabase?

For: SEO engineers

Rank tracking at scale

Positions computed from raw SERP snapshots you own.

  • Position trend by keyword set (line)
  • Keywords in top 10 by crawl date (area)
  • Rank volatility by day (line)
  • Position distribution histogram (bar)
For: Content strategists

SERP features

What the results page actually looks like for your terms.

  • SERP-feature presence by keyword set (stacked bar)
  • Featured-snippet ownership (table)
  • AI Overview presence trend (line)
  • Keywords where features push organic below the fold (table)
For: Competitive analysts

SERP share

Who occupies the results for the terms that matter.

  • Share of top-10 results by domain (stacked area)
  • Competitor entry and exit by keyword set (table)
  • New domains appearing in tracked SERPs (table)
  • Weighted share of voice (line)
For: Technical SEOs

Crawl and keyword coverage

The health of the data pipeline itself.

  • Keywords crawled per day vs. plan (line)
  • On-page issues by severity per crawl (stacked bar)
  • Keyword universe: volume-band coverage (bar)
  • API spend per module per month (table)

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

Pair the DataForSEO MCP server with the Metabase CLI for fast, hands-on analysis. MCP is useful for scoped lookups and summarized exports; the Metabase CLI's upload command loads CSV data into Metabase and creates a ready-to-query table and model.

Example workflow

  • Ask the MCP server for a scoped batch of SERP result snapshots for one keyword set and location.
  • Export the result as CSV, keeping keywords, domains, positions, and snapshot dates as stable columns.
  • 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

  • MCP lookups are excellent for exploration, not scheduled reporting.
  • A CSV upload is a snapshot; refresh it with mb upload replace or move to the pipeline for real history.
  • A SERP snapshot is one crawl at one moment. Rank trends require scheduled crawls of the same keyword set — start the schedule before you need the trend.
  • mb upload csv needs an uploads database configured under Admin → Settings → Uploads.

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

DataForSEO MCP serverofficial

Transport
Local server (npm) over stdio or HTTP, plus a hosted endpoint
Auth
DataForSEO login and password (HTTP Basic auth)
Best for
Live scoped lookup and export

Metabase CLIofficial

Install
npm install -g @metabase/cli
Auth
mb auth login
Load data
mb upload csv --file data.csv
Requires
An uploads database (Admin → Settings → Uploads)
MCPExample MCP client config
{
  "mcpServers": {
    "dataforseo": {
      "command": "npx",
      "args": ["-y", "dataforseo-mcp-server"],
      "env": {
        "DATAFORSEO_USERNAME": "your-login",
        "DATAFORSEO_PASSWORD": "your-password"
      }
    }
  }
}

The official server exposes ten modules (SERP, Keywords Data, Backlinks, OnPage, DataForSEO Labs, and more); a hosted endpoint at https://mcp.dataforseo.com/mcp skips local setup. Pricing is pay-as-you-go per API call, which suits scheduled bulk pulls better than exploratory browsing.

TerminalLoad a DataForSEO 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 SERP-result-snapshots export — creates a table AND a model
mb upload csv --file dataforseo-SERP-result-snapshots.csv --collection root

# Refresh that same table later from a new export
mb upload replace <table-id> --file dataforseo-SERP-result-snapshots.csv

Can you generate a DataForSEO dashboard with AI?

Yes. Use the prompt below with any assistant that can run the DataForSEO MCP server and the Metabase CLI. It works end to end: if DataForSEO tables already exist in Metabase it analyzes those; otherwise it pulls scoped, summarized data over MCP, loads it with mb upload csv, then builds the dashboard and caveats any metric that needs missing history.

Prompt for creating a DataForSEO SERP Data Overview dashboard
Create a polished Metabase dashboard for DataForSEO serp data analytics.
Work end to end: get the data into Metabase if it isn't there yet, then build.

Goal: Help SEO and marketing leaders understand rank tracking, SERP-feature presence, and competitor share computed from raw SERP snapshots from DataForSEO data.

Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for dataforseo tables and
  models). If durable DataForSEO data is already present — synced from a warehouse
  or uploaded earlier — use it and skip to Step 2.
- If nothing is there, pull a scoped, summarized export with the DataForSEO MCP server:
  SERP result snapshots, plus keyword search volume and CPC, SERP feature presence, backlink index rows.
  Prefer dated snapshots and rollups over wide raw pulls — API units cost money.
  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 or column names. Inspect available keywords, domains,
dates, and whether multiple snapshot dates exist before creating trend cards.

Important:
- Build on whatever data is present; don't claim Metabase connects natively to
  DataForSEO — it reads a database or CLI-uploaded tables.
- Trend cards need multiple dated snapshots; a single export only supports
  point-in-time cards — label them as such.
- Keep vendor metrics separate from Search Console data: estimated traffic and
  search volume are modeled numbers, clicks and impressions are measured ones.
- State the position convention (best rank per keyword vs. all appearances)
  once and reuse it on every card.
- Segment branded from non-branded keywords before reporting averages.

Dashboard title: DataForSEO SERP Data Overview

Sections:
1. Executive summary: Keywords tracked; Top-10 count; Rank volatility;
   SERP-feature coverage.
2. Rankings: Position trends by keyword set; distribution histogram.
3. Features: Feature presence by type; snippet and AI Overview ownership.
4. Share: Top-10 share by domain; new entrants in tracked SERPs.
5. Pipeline: Crawl coverage, task success rate, and API spend.

Filters: Date range, Domain/Project, Keyword group, Search engine, Location,
Competitor.

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.

How do you sync DataForSEO data into a database or warehouse?

For dashboards that need history and reliability, land DataForSEO snapshots and rollups in a database first, then connect Metabase to that database.

Connector options

  • Managed ETL — use a connector when one covers the objects you need.
  • Custom pipeline — use the DataForSEO API v3 for control over grain, fields, and refresh cadence.
  • MCP + CSV — use this for quick exploration and one-off slices.

DataForSEO is the bulk-ELT-friendly option: no managed connector needed because the API is built for high-volume scheduled extraction — post task batches (thousands of keywords per request), collect results, and land SERP snapshots straight into your warehouse.

Notes

  • Decide the snapshot grain first (daily per keyword for rankings, weekly for backlinks is the workhorse) — it drives API-unit spend and every trend card.
  • Land raw snapshot tables first, then build clean Metabase models on top.
  • Normalize keyword, crawl date, search engine, location, position, and domain fields.

How should you model DataForSEO data in Metabase?

Core tables

TableGrainKey columns
serp_snapshotsone row per keyword per result position per crawl datekeyword, stat_date, search_engine, location, position, url, domain, serp_feature_type
keyword_metricsone row per keyword per refreshkeyword, refreshed_at, search_volume, cpc, competition, keyword_difficulty
onpage_crawl_issuesone row per issue per page per crawlcrawl_id, crawl_date, page_url, issue_type, severity

Modeling advice

  • Build a clean serp_snapshots model with common columns across tools, so multi-tool SEO dashboards don't fork definitions.
  • Every snapshot table needs an explicit snapshot or crawl date column — trends live or die on it.
  • Keep modeled vendor estimates (volume, traffic, difficulty) in separate columns from measured Search Console data.
  • Store keyword and domain join keys in a consistent normalized form (lowercase, no protocol, no trailing slash).

Which DataForSEO metrics should you track in Metabase?

MetricDefinitionNotes
Average positionVolume-weighted mean rank computed from SERP snapshots.State the convention: best rank per keyword per crawl.
Keywords in top 10Tracked keywords with a top-10 result per crawl.Crawl cadence sets the trend resolution.
Share of voiceWeighted share of top results across tracked SERPs.Weight by search volume, not keyword count.
Organic CTRClicks divided by impressions by position bucket.Join Search Console data to see what positions earn.

What SQL powers DataForSEO dashboards in Metabase?

These assume a cleaned analytical model in a warehouse (PostgreSQL dialect). Adjust table and column names to match your pipeline.

Best position per keyword per crawlPostgreSQL

Rank tracking computed from raw SERP snapshots.

SELECT
  stat_date,
  keyword,
  MIN(position) AS best_position
FROM serp_snapshots
WHERE domain = 'yoursite.com'
  AND stat_date >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY 1, 2
ORDER BY 2, 1;
Share of top-10 results by domainPostgreSQL

Who occupies the SERPs you track.

SELECT
  stat_date,
  domain,
  COUNT(*) AS top10_appearances,
  ROUND(100.0 * COUNT(*)
    / NULLIF(SUM(COUNT(*)) OVER (PARTITION BY stat_date), 0), 1)
    AS serp_share_pct
FROM serp_snapshots
WHERE position <= 10
GROUP BY 1, 2
ORDER BY 1, 3 DESC;
SERP-feature presence by weekPostgreSQL

Which features appear across the tracked keyword set.

SELECT
  date_trunc('week', stat_date) AS week,
  serp_feature_type,
  COUNT(DISTINCT keyword) AS keywords_with_feature
FROM serp_snapshots
WHERE serp_feature_type IS NOT NULL
GROUP BY 1, 2
ORDER BY 1, 3 DESC;

What are common mistakes when analyzing DataForSEO in Metabase?

Treating vendor estimates as measured analytics.→ Search volume, traffic estimates, and difficulty scores are modeled numbers. Keep them in separate columns from Search Console clicks and impressions, and label which is which on every card.
Storing every raw SERP field forever.→ Keep position, URL, domain, and feature type; drop the rendered HTML and metadata blobs. The analytical value is in the ranked rows, and warehouse cost grows per crawl.
Mixing locations and devices in one trend.→ Position 3 on mobile in Denver and position 9 on desktop in London are different observations. Keep search engine, location, and device as explicit columns in every aggregate.
Building dashboards from live MCP lookups only.→ MCP is useful for exploration; durable dashboards need a database-backed model with dated snapshots.

Related analytics

Related dashboards

Related integrations

FAQ

Does Metabase connect natively to DataForSEO?
No. Metabase reads databases and warehouses. Sync DataForSEO snapshots and rollups into a database first, or upload a CSV with the Metabase CLI, then build Metabase models and dashboards on top.
Should Metabase replace DataForSEO?
No — they answer different questions. DataForSEO is built for day-to-day SEO work in its own UI. Metabase is where you build governed, shareable reporting on top of the same data, keep history the vendor eventually drops, and join it with Search Console, analytics, and revenue data.
Why build rank tracking from raw SERP data?
Control and scale. You choose the keyword set, locations, devices, and crawl cadence; you keep every historical snapshot; and per-query pricing beats per-keyword subscription tiers once you track thousands of terms. The trade-off is that you own the modeling — position conventions, dedup rules, and share-of-voice math live in your SQL, not a vendor UI.
How do I keep API costs under control?
Batch and schedule. Post task batches instead of live queries where possible, crawl weekly instead of daily for stable keyword sets, and store results permanently so you never pay to re-fetch history. A cost-per-module card on the dashboard keeps the spend visible next to the value.