dbt vs Airflow: what each one is actually for
They get lumped together as "the modern data stack," but dbt and Airflow solve different problems, and the confusion usually comes from teams reaching for one when they need the other.
What Airflow is for
Airflow is an orchestrator. It answers the question "in what order, on what schedule, and with what retry/alerting behavior should these tasks run," and a "task" can be almost anything: a Python script, a database query, an API call, a Docker container. Airflow doesn't know or care what a task actually does; it just runs it, tracks whether it succeeded, and tells you when it didn't.
What dbt is for
dbt is a transformation tool, specifically for the "T" in ELT. It answers the question "given raw tables already sitting in my warehouse, how do I turn them into clean, tested, documented models," using SQL (or Python models), with built-in dependency resolution, testing, and documentation generation. dbt doesn't extract data from source systems and doesn't decide when things run; it assumes the raw data is already there and focuses entirely on what happens to it next.
Where they meet
In a typical setup, Airflow is the thing that calls dbt, usually as one
task in a larger DAG that also handles extraction (pulling data from source
systems into the warehouse) and anything downstream of the transform (like
refreshing a BI tool's cache). dbt itself doesn't need Airflow to run at all;
plenty of smaller teams just run dbt build on a simple cron job or through
dbt Cloud's own scheduler, and only reach for Airflow once they have enough
moving parts (multiple data sources, cross-system dependencies, tasks that
aren't SQL) that a real orchestrator earns its keep.
The short version
If your problem is "my SQL transformations are a mess of unordered scripts with no tests or lineage," you need dbt. If your problem is "I have a dozen jobs across different systems that need to run in the right order with retries and alerting," you need an orchestrator, Airflow or otherwise. Most data platforms eventually need both; very few need to start with both on day one.