Back to Blog
dbt-corecomparisonproduction

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.

ModelDock TeamFebruary 17, 202613 min read

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:

ComponentInstance TypeMonthly Cost (AWS)
Airflow webservert3.medium~$30
Airflow schedulert3.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 CategoryMonthly (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)

OptionMonthly CostNotes
Self-hosted (self-managed Airflow)$500-900Includes ~5 hrs/mo maintenance
Self-hosted (managed Airflow, e.g. MWAA)$500-700Less maintenance, higher base cost
dbt Cloud Team$100-2001-2 seats, well within model limits
ModelDock (beta)$0Free 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)

OptionMonthly CostNotes
Self-hosted (self-managed)$700-1,500Maintenance time scales with projects
Self-hosted (managed orchestrator)$600-1,100Less pain, similar cost
dbt Cloud Team$400-700Seat costs add up, model overage possible
ModelDock (planned)TBDPer-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)

OptionMonthly CostNotes
Self-hosted (self-managed)$1,200-2,500Needs dedicated platform engineer
Self-hosted (managed orchestrator)$1,000-1,800Still needs some platform work
dbt Cloud Enterprise$4,000-7,000+Per-seat pricing hurts at this scale
ModelDock (planned)TBDPer-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.

Ready to run dbt-core in production?

ModelDock handles scheduling, infrastructure, and credential management so you don't have to.

Start For Free