finds.dev← search

// the find

gouline/dbt-metabase

★ 605 · Python · MIT · updated May 2026

dbt + Metabase integration

dbt-metabase syncs your dbt manifest to Metabase — pushing column descriptions, FK relationships, and semantic types so your BI tool's data model stays in sync with your transformation layer. It also runs the reverse: pulling Metabase questions and dashboards back as dbt exposures. Aimed at data teams who use dbt as their schema source of truth and are tired of manually maintaining Metabase metadata.

Bidirectional sync is the right design — models push to Metabase, exposures pull back to dbt, and both directions are first-class. The meta field approach (metabase.semantic_type, metabase.fk_target_table) is clean and doesn't require forking dbt schema conventions. There's a working sandbox with Docker Compose and real fixture data, which means you can actually test changes without a production Metabase. Configuration hierarchy (CLI > env vars > config file) is sensible and well-implemented.

The tool is tightly coupled to Metabase's internal API, which Metabase breaks without warning between versions — the separate mbql4/mbql5 test fixture directories are evidence this has already bitten them once. Exposure extraction produces YAML that embeds Metabase IDs and timestamps as inline markdown, making diffs noisy and the output awkward to review in PRs. No incremental sync — it re-exports everything on every run, which gets slow on large dbt projects with hundreds of models. The programmatic API is a thin wrapper around CLI logic with no async support, so scripting it into a pipeline means blocking on serial API calls to Metabase.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →