Self-Hosting dbt-core vs Managed dbt Services: A Cost Comparison
A real cost breakdown of self-hosting dbt-core versus dbt Cloud and other managed services — including the hidden costs of engineer time and on-call.
dbt-core is free. It's open-source, MIT-licensed, and you can install it with a single pip install.
But "free" is doing a lot of heavy lifting in that sentence.
Running dbt-core in production means servers, orchestration, monitoring, credential management, security patching, and the ongoing attention of at least one engineer who understands all of it. That's not free. In many cases, it's not even cheap.
This article puts real numbers on the cost of self-hosting dbt-core versus paying for dbt Cloud or another managed service. We'll include the costs that most comparison articles conveniently ignore — like the 2 AM PagerDuty alert when your Airflow scheduler crashes the night before a board meeting.
The Real Cost of "Free"
When someone says dbt-core is free, they're talking about the software license. They're not talking about:
- The server it runs on
- The orchestrator that schedules it
- The monitoring that tells you when it breaks
- The 40-80 hours of engineer time to set it all up
- The 5-10 hours per month to keep it running
- The opportunity cost of that engineer not building data models
Open-source software has a cost model, just like commercial software. The difference is that the cost shifts from a line item on an invoice to distributed labor across your team. Sometimes that's a great trade-off. Sometimes it's not.
Let's get specific.
Self-Hosting Cost Breakdown
Here's what a realistic self-hosted dbt-core setup costs. We'll assume a small-to-mid-size data team (2-5 analytics engineers) running dbt on a daily schedule against a cloud data warehouse.
Server and Compute
dbt-core itself isn't resource-hungry. A t3.medium on AWS (2 vCPUs, 4 GB RAM) handles most workloads fine. But you also need the orchestrator, and Airflow is significantly more demanding than dbt itself.
A typical Airflow deployment needs:
| Component | Instance Type | Monthly Cost (AWS) |
|---|---|---|
| Airflow webserver | t3.medium | ~$30 |
| Airflow scheduler | t3.medium | ~$30 |
| Airflow worker(s) | t3.large | ~$60 |
| PostgreSQL (metadata DB) | db.t3.micro (RDS) | ~$15 |
| Redis (message broker) | cache.t3.micro | ~$13 |
Total compute: ~$150/month
That's the minimum. If you want high availability (and you should, because a dead scheduler means no dbt runs), double the webserver and scheduler. Now you're at $210/month. Add a load balancer ($18/month) and you're pushing $230.
On GCP, the numbers are similar. On DigitalOcean, you can shave 20-30% off. On-prem adds its own set of costs that we won't even try to estimate here.
Storage and Networking
EBS volumes, S3 buckets for artifacts and logs, data transfer costs. These are usually small but not zero.
Estimate: $10-30/month
Orchestrator Setup
If you're going with Airflow, you need to actually build and maintain it. That includes:
- Configuring the executor (Celery or Kubernetes)
- Setting up DAGs for your dbt project
- Configuring connections and variables
- Building CI/CD pipelines for DAG deployment
- Writing retry logic and failure callbacks
You could use Managed Airflow (MWAA on AWS, Cloud Composer on GCP), which simplifies operations but adds cost. MWAA starts at roughly $350/month for the smallest environment. Cloud Composer is similar.
If you go with Prefect or Dagster instead, the self-hosted costs are comparable. The managed versions (Prefect Cloud, Dagster Cloud) start around $300-400/month for teams.
Managed orchestrator cost: $300-400/month
Self-managed orchestrator cost: $150-230/month (but with significantly more labor)
Monitoring and Alerting
You need to know when things break. At minimum:
- Airflow health monitoring: Is the scheduler running? Are tasks stuck?
- dbt run monitoring: Did the run fail? Which models broke?
- Infrastructure monitoring: Is the server running out of disk? Is memory spiking?
Tools like Datadog or New Relic will run $15-30/month per host. A cheaper stack (Prometheus + Grafana self-hosted) saves money but adds more maintenance.
Then there's alerting. PagerDuty or Opsgenie for on-call runs $20-30/seat/month. Slack alerts are free but less reliable for critical failures.
Estimate: $30-100/month
Engineer Time: The Big One
This is where most cost comparisons fall apart. They list the infrastructure costs and stop. But infrastructure doesn't configure itself.
Initial setup: 40-80 hours of senior engineer time.
That covers Airflow installation and configuration, DAG development, credential management, CI/CD pipeline, monitoring setup, documentation, and team onboarding. At a fully loaded cost of $80-120/hour for a senior data or platform engineer, that's $3,200-9,600 as a one-time cost.
Ongoing maintenance: 5-10 hours/month.
Airflow version upgrades, dbt version upgrades, dependency conflicts, debugging failed runs, rotating credentials, handling scaling issues, security patches. At the same rate, that's $400-1,200/month of ongoing engineering cost.
And that's assuming things go smoothly. A bad Airflow upgrade that breaks your DAGs? An incompatibility between dbt and a Python dependency? Those incidents can easily eat 20-30 hours in a single month.
On-Call Burden
If dbt runs are critical to your business (and if they feed dashboards that executives look at every morning, they are), someone needs to be on-call. The cost of on-call isn't just the stipend you might pay. It's:
- Reduced quality of life for the on-call engineer
- Context switching when an alert fires during deep work
- The cognitive load of being "available" even when nothing is broken
- Attrition risk if on-call is frequent and painful
This is hard to put a dollar figure on, but it's real. Some companies pay on-call stipends of $200-500/week. Others just absorb it as part of the role and wonder why their platform engineers keep leaving.
Self-Hosting Total
Let's add it up for a small team:
| Cost Category | Monthly (Low) | Monthly (High) |
|---|---|---|
| Compute (self-managed) | $150 | $230 |
| Storage/networking | $10 | $30 |
| Monitoring/alerting | $30 | $100 |
| Engineer maintenance | $400 | $1,200 |
| On-call (amortized) | $100 | $300 |
| Total | $690 | $1,860 |
Plus a one-time setup cost of $3,200-9,600.
If you use a managed orchestrator instead of self-managing Airflow, swap the compute line for $300-400/month but reduce the engineer maintenance time somewhat.
The important thing to notice: infrastructure is the small part. Engineer time dominates the cost. The server costs $150. The person who keeps the server running costs 3-8x that.
dbt Cloud Pricing Breakdown
dbt Cloud has restructured its pricing several times. As of early 2026, here's what the tiers look like.
Developer Plan (Free)
- 1 seat
- 1 project
- Up to 3,000 successful models built per month
- IDE, job scheduling, basic CI
- No team collaboration features
Good for solo analysts exploring dbt. Not viable for a team.
Team Plan (Starter)
- $100 per developer seat per month
- Up to 5 developer seats
- 15,000 successful models built per month included
- $0.01 per additional model build beyond the included allowance
- Full IDE, CI/CD, job scheduling, docs hosting
- Basic alerting
For a team of 3 analytics engineers running 20-30 models on a daily schedule, you're looking at:
- 3 seats x $100 = $300/month for seats
- ~900 model builds/day x 30 days = ~27,000 models/month
- 27,000 - 15,000 included = 12,000 overage x $0.01 = $120/month
Total: ~$420/month
That's competitive with self-hosting when you factor in engineer time. But scale it up and the math changes.
Enterprise Plan
- Custom pricing (typically ~$400/seat/month, or $4,800/seat/year MSRP)
- Unlimited users and projects
- Fixed model build allowance, then $0.01 per additional model
- SSO, RBAC, audit logs, IP restrictions
- Priority support
For a team of 10, Enterprise could run $4,000-5,000/month before overage charges. That's serious money, and it's where many teams start looking at alternatives.
The dbt Cloud Cost Curve
dbt Cloud's pricing is friendly at the small end and gets expensive fast. A solo developer pays nothing. A team of 3 pays $300-500/month. A team of 10 on Enterprise pays $4,000-5,000+/month.
The consumption-based pricing (per model built) also means your costs scale with usage in ways that are hard to predict. A well-intentioned engineer who adds 50 models to the project can meaningfully increase your monthly bill.
ModelDock Pricing
ModelDock is currently in free beta. The planned pricing model focuses on per-project costs rather than per-seat costs, which changes the economics significantly for growing teams.
The core idea: you pay for the infrastructure to run your dbt projects (Airflow scheduling, compute, monitoring), not for the number of people who can view or manage them. This means adding a new analytics engineer to your team doesn't automatically increase your platform costs.
During the beta period, everything is free. Post-beta pricing hasn't been finalized, but the target is to be meaningfully cheaper than dbt Cloud for teams of 3+ while providing Airflow-powered scheduling, credential management, and run monitoring out of the box.
Comparison Table
Here's what you'd actually pay per month across different team sizes. These assume daily dbt runs with 20-30 models per project.
Small Team (1-2 engineers, 1 project)
| Option | Monthly Cost | Notes |
|---|---|---|
| Self-hosted (self-managed Airflow) | $500-900 | Includes ~5 hrs/mo maintenance |
| Self-hosted (managed Airflow, e.g. MWAA) | $500-700 | Less maintenance, higher base cost |
| dbt Cloud Team | $100-200 | 1-2 seats, well within model limits |
| ModelDock (beta) | $0 | Free during beta |
Winner at this size: dbt Cloud. The free Developer plan or a single Team seat is hard to beat. Self-hosting makes almost no sense for a solo developer.
Mid Team (3-5 engineers, 2-3 projects)
| Option | Monthly Cost | Notes |
|---|---|---|
| Self-hosted (self-managed) | $700-1,500 | Maintenance time scales with projects |
| Self-hosted (managed orchestrator) | $600-1,100 | Less pain, similar cost |
| dbt Cloud Team | $400-700 | Seat costs add up, model overage possible |
| ModelDock (planned) | TBD | Per-project pricing targeted below dbt Cloud |
This is the interesting range. dbt Cloud and self-hosting converge in cost. The deciding factor is usually whether your team has the skills and desire to manage infrastructure.
Large Team (8-15 engineers, 5+ projects)
| Option | Monthly Cost | Notes |
|---|---|---|
| Self-hosted (self-managed) | $1,200-2,500 | Needs dedicated platform engineer |
| Self-hosted (managed orchestrator) | $1,000-1,800 | Still needs some platform work |
| dbt Cloud Enterprise | $4,000-7,000+ | Per-seat pricing hurts at this scale |
| ModelDock (planned) | TBD | Per-project model becomes advantageous |
Winner at this size: self-hosting, if you have the team. The per-seat cost of dbt Cloud Enterprise at 10+ seats is substantial. A dedicated platform engineer managing your Airflow cluster costs less and gives you more flexibility. But you need that person, and they need to stick around.
Hidden Costs People Forget
The tables above capture the obvious costs. Here are the ones that don't show up in any spreadsheet.
Context Switching
When a dbt run fails because of an infrastructure issue (not a data issue), someone has to stop what they're doing and figure out whether the problem is Airflow, the server, a network issue, a dependency conflict, or the actual dbt code. This context switch from "data work" to "infrastructure debugging" is expensive and demoralizing.
With a managed service, infrastructure problems are someone else's problem. Your team only deals with data problems — which is what they were hired to do.
The Bus Factor
If one engineer set up your Airflow cluster, configured the DAGs, and manages the infrastructure, what happens when they leave? The knowledge transfer alone takes weeks. If they leave without documenting everything (and they will, because they're busy), rebuilding that understanding costs months.
Security Patching
Self-hosted infrastructure needs security patches. Airflow, Python, the operating system, Docker images — all of them need regular updates. This is boring, thankless work that nobody wants to do, so it often doesn't get done until there's an incident.
Debugging Infra vs. Debugging Data
Your analytics engineers were hired to build data models and deliver insights. Every hour they spend debugging Airflow scheduler issues, fixing Docker build failures, or resolving Python dependency conflicts is an hour they're not doing their actual job.
This is probably the biggest hidden cost: the opportunity cost of talented data people doing platform work they're not great at and don't enjoy.
Scaling Surprises
Self-hosted setups that work fine for 10 models can crumble at 100. Airflow workers run out of memory. Scheduler lag increases. DAG parsing slows to a crawl. These scaling issues hit at the worst possible time — when your project is growing and your team is busiest.
Decision Framework
Here's a straightforward way to think about it.
Choose self-hosting if:
- You have a dedicated platform/data engineering team
- You need deep customization of the orchestration layer
- Your team is larger than 8-10 people (per-seat pricing gets painful)
- You already run Airflow or Kubernetes for other workloads
- You want full control over your infrastructure and data
Choose dbt Cloud if:
- You're a small team (1-3) and want the simplest possible setup
- You value IDE features and the development experience
- You need enterprise compliance features (SSO, audit logs, RBAC)
- You don't have anyone who wants to manage infrastructure
Consider ModelDock if:
- You want Airflow-powered scheduling without managing Airflow
- Your team is growing and per-seat pricing concerns you
- You prefer bringing your own Git repository and warehouse credentials
- You want the flexibility of self-hosting without the maintenance burden
The Honest Answer
There's no universally right choice. Self-hosting dbt-core can absolutely be the cheapest option — for large teams with strong platform engineering. dbt Cloud is a reasonable choice for small teams who value simplicity. And the market for "something in between" is growing because a lot of teams don't fit neatly into either camp.
The mistake most teams make is underestimating the true cost of self-hosting. They see $150/month for servers and compare it to $300/month for dbt Cloud seats, and they think self-hosting is half the price. It's not. The servers are the cheap part. The humans are expensive.
Whatever you choose, make the decision with full information. Add up the real costs — including engineer time, opportunity cost, and on-call burden — and then decide what makes sense for your team.
ModelDock gives you Airflow-powered scheduling, credential management, and run monitoring without the infrastructure overhead. It's free during the beta — try it out and see if it changes the math for your team.