You've deployed self-hosted Supabase and your application is humming along. Data is flowing into your Postgres database—user signups, transactions, events, the works. Now comes the question every growing team eventually asks: how do I actually see what's happening in my data?
Supabase Cloud offers built-in dashboards and reports. Self-hosted? You're on your own. But that's not necessarily a bad thing. Connecting your self-hosted Supabase to open-source BI tools like Metabase or Apache Superset gives you more flexibility, more visualization options, and zero additional SaaS costs.
This guide walks you through connecting business intelligence tools to your self-hosted Supabase instance, with practical configuration steps and honest trade-offs.
Why Self-Hosted Supabase Needs External BI Tools
The self-hosted Supabase stack includes Studio, which provides basic data browsing and SQL execution. But Studio isn't a reporting tool. It doesn't offer:
- Interactive dashboards with charts and graphs
- Scheduled reports or email alerts
- Non-technical user access without SQL knowledge
- Historical trend analysis
- Cross-table visualizations
For anything beyond ad-hoc queries, you need dedicated analytics tooling.
The good news: because Supabase runs on Postgres, any tool that connects to Postgres works with your self-hosted instance. No special connectors, no APIs, just standard database connections.
Choosing a BI Tool: Metabase vs Superset vs Others
Before diving into setup, let's compare the leading open-source options for 2026.
Metabase
Best for: Teams where non-technical users need self-serve analytics.
Metabase's visual query builder lets business users create charts without writing SQL. Setup takes minutes—download a JAR file or run a Docker container, point it at your database, and you're exploring data.
Pros:
- Fastest time-to-value
- Intuitive interface for non-developers
- Embeddable dashboards
- Active community and development (v60.2 as of April 2026)
Cons:
- Open-core model—advanced features like row-level permissions require paid tier
- Less flexible for complex, custom visualizations
- Can feel limiting for data-heavy teams
Apache Superset
Best for: Teams with data engineering capacity who need scale and flexibility.
Superset supports 40+ database connections, offers dozens of visualization types, and handles enterprise-scale dashboard loads. It's more complex to set up but far more powerful.
Pros:
- Pure open-source under Apache 2.0
- Massive visualization variety
- SQL Lab for advanced exploration
- Better suited for large datasets
Cons:
- Steeper learning curve
- Requires more operational overhead
- Configuration-heavy compared to Metabase
Redash
Worth mentioning but with caveats: Redash was acquired by Databricks and has been in maintenance mode since 2024. The open-source version still works, but active development has stalled. For new projects in 2026, stick with Metabase or Superset.
Quick Recommendation
- Small team, business users: Metabase
- Data team, technical users: Superset
- Already invested in a tool: Keep using it—they all support Postgres
Connecting Metabase to Self-Hosted Supabase
Metabase is the fastest path from zero to dashboards. Here's how to connect it to your self-hosted Supabase.
Step 1: Deploy Metabase
Run Metabase alongside your Supabase stack using Docker:
# Add to your docker-compose.yml or create a separate file
services:
metabase:
image: metabase/metabase:latest
container_name: metabase
ports:
- "3000:3000"
environment:
MB_DB_TYPE: postgres
MB_DB_DBNAME: metabase
MB_DB_PORT: 5432
MB_DB_USER: metabase_user
MB_DB_PASS: your_secure_password
MB_DB_HOST: db
depends_on:
- db
For production, Metabase needs its own application database (separate from your Supabase data). The example above uses the same Postgres instance—create a dedicated metabase database for Metabase's internal storage.
Step 2: Configure Database Connection
Once Metabase is running, access it at http://your-server:3000 and complete the setup wizard.
When adding your Supabase database:
- Database type: PostgreSQL
- Host: Your Postgres container name (e.g.,
db) if on the same Docker network, or your server's IP/hostname if external - Port: 5432 (or your configured port)
- Database name:
postgres(default Supabase database) - Username: Use a read-only role (see security section below)
- Password: The role's password
Step 3: Create a Read-Only Database Role
Never connect BI tools using your admin credentials. Create a dedicated read-only role:
-- Run in Supabase Studio SQL editor or psql CREATE ROLE metabase_reader WITH LOGIN PASSWORD 'strong_password_here'; -- Grant read access to your application schema GRANT USAGE ON SCHEMA public TO metabase_reader; GRANT SELECT ON ALL TABLES IN SCHEMA public TO metabase_reader; -- Ensure future tables are also accessible ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO metabase_reader;
This role can read data but cannot modify, delete, or access system tables.
Step 4: Build Your First Dashboard
With the connection established:
- Browse your tables in Metabase's data model section
- Use the visual query builder to create charts
- Combine multiple questions into a dashboard
- Share with your team
Metabase automatically syncs your schema, so new tables and columns appear without manual configuration.
Connecting Apache Superset to Self-Hosted Supabase
Superset requires more setup but offers greater power. Here's the configuration path.
Step 1: Deploy Superset
Superset's official Docker Compose setup includes multiple services. Clone the repository and customize:
git clone https://github.com/apache/superset.git cd superset docker compose -f docker-compose-non-dev.yml up -d
Access Superset at http://your-server:8088 with default credentials (admin/admin—change immediately).
Step 2: Add Your Supabase Database
In Superset's UI:
- Navigate to Settings → Database Connections
- Click + Database
- Select PostgreSQL
- Enter the SQLAlchemy connection string:
postgresql://metabase_reader:your_password@db:5432/postgres
Replace the hostname with your actual Postgres host. If Superset and Supabase run on separate Docker networks, use the server's IP or configure network bridging.
Step 3: Create Datasets and Charts
Superset uses a two-step process:
- Datasets: Define which tables or SQL queries you want to visualize
- Charts: Build visualizations from datasets
- Dashboards: Combine charts into interactive views
For complex reporting, use Superset's SQL Lab to write custom queries, then save results as virtual datasets.
Security Considerations
Connecting external tools to your database introduces security surface. Follow these practices:
Use Dedicated Read-Only Roles
As shown above, never share admin credentials. Create purpose-specific roles with minimal permissions. If a BI tool only needs access to certain tables, grant access explicitly rather than using SELECT ON ALL TABLES.
Restrict Network Access
If your BI tool runs on a different server:
- Configure Postgres to accept connections only from known IPs
- Use SSH tunnels for remote connections
- Consider putting BI tools behind a VPN
For BI tools on the same Docker network as Supabase, internal container networking provides isolation from external access.
Enable SSL for Database Connections
Both Metabase and Superset support SSL connections. Enable them:
Metabase: Check "Use a secure connection (SSL)" in the database configuration.
Superset: Append ?sslmode=require to your connection string:
postgresql://user:pass@host:5432/postgres?sslmode=require
This encrypts data in transit between your BI tool and database.
Audit Access
Periodically review:
- Which roles have database access
- What queries BI tools are executing (check Postgres logs)
- Who has access to dashboards containing sensitive data
Performance Tuning
BI tools can hammer your database with expensive queries. Protect your production workload:
Use Read Replicas
If you've set up read replicas for your self-hosted Supabase, point BI tools at replicas rather than your primary database. This isolates analytics load from application queries.
Create Materialized Views
For frequently-accessed reports, pre-compute results:
CREATE MATERIALIZED VIEW daily_signups AS
SELECT
date_trunc('day', created_at) AS day,
count(*) AS signups
FROM auth.users
GROUP BY 1;
-- Refresh on a schedule
REFRESH MATERIALIZED VIEW daily_signups;
Point your BI dashboards at materialized views instead of raw tables. Queries execute instantly against pre-aggregated data.
Set Statement Timeouts
Prevent runaway queries from consuming resources:
-- For the BI reader role ALTER ROLE metabase_reader SET statement_timeout = '30s';
Queries exceeding 30 seconds will be terminated. Adjust based on your reporting needs.
Monitor Query Performance
Use pg_stat_statements to identify expensive queries from BI tools:
SELECT query, calls, mean_exec_time, total_exec_time FROM pg_stat_statements WHERE query LIKE '%metabase%' -- or identify by username ORDER BY total_exec_time DESC LIMIT 20;
Optimize slow queries with indexes or restructure dashboards to be more efficient.
Practical Use Cases
Here's what teams typically build once BI tools are connected:
User Analytics Dashboard
- Daily/weekly/monthly active users
- Signup trends over time
- User retention cohorts
- Geographic distribution
Application Metrics
- Feature usage frequency
- Error rates by endpoint
- API response time percentiles
- Storage consumption trends
Business Intelligence
- Revenue by customer segment
- Subscription conversion funnels
- Churn analysis
- Product usage vs. billing correlation
Operational Monitoring
- Database table sizes over time
- Row counts by table
- Data freshness checks
- Backup success/failure tracking
The Trade-Offs
Adding BI tools to your self-hosted stack introduces complexity:
More infrastructure to manage: Another container to monitor, update, and back up.
Security surface: Every database connection is a potential vulnerability if misconfigured.
Resource consumption: BI tools consume memory and CPU, especially during dashboard refreshes.
Learning curve: Your team needs to learn yet another tool.
But the benefits often outweigh the costs. Data visibility drives better decisions, and open-source BI tools provide enterprise-grade analytics without subscription fees.
Supascale and Analytics
If you're using Supascale to manage your self-hosted Supabase instances, you already have simplified deployment and backup management. For BI tooling, you have two paths:
Deploy BI tools separately: Run Metabase or Superset on your server using Docker Compose, configured to connect to your Supascale-managed Supabase projects.
Use external managed BI: Services like Metabase Cloud or Preset (managed Superset) connect to your self-hosted Postgres via secure tunnels or public endpoints.
The choice depends on your operational capacity. Self-hosting everything keeps costs predictable; managed BI reduces one more thing to maintain.
Conclusion
Self-hosted Supabase gives you full control over your data—and full responsibility for making that data useful. Connecting open-source BI tools like Metabase or Apache Superset unlocks the visualization and reporting capabilities that Supabase Cloud users take for granted.
Start with Metabase if you need quick wins and non-technical access. Graduate to Superset when your data team needs more power. Either way, create dedicated read-only roles, protect your production database with timeouts and replicas, and monitor query performance as dashboards proliferate.
Your data is already in Postgres. Now make it visible.
Further Reading
- Monitoring Self-Hosted Supabase - Set up Prometheus and Grafana for infrastructure monitoring
- Debugging Slow Queries - Identify and fix performance issues
- Database Indexing Guide - Optimize queries with proper indexes
- Supascale Features - Simplify self-hosted Supabase management
