---
title: "How to run an Airflow DAG in a loop"
description: "How to keep running an Airflow DAG indefinitely"
author: "Bartosz Mikulski"
author_bio: "Principal AI Engineer & MLOps Architect. I bridge the gap between \"it works in a notebook\" and \"it works for 200 million users.\""
author_url: https://mikulskibartosz.name
author_linkedin: https://www.linkedin.com/in/mikulskibartosz/
author_github: https://github.com/mikulskibartosz
canonical_url: https://mikulskibartosz.name/run-airflow-dag-in-loop
---

Airflow does not support DAGs with loops. After all, the abbreviation DAG stands for Directed Acyclic Graph, so we can't have cycles. It is also not the standard usage of Airflow, which was built to support daily batch processing.

All of that does not stop us from using a simple trick that lets us run a DAG in a loop. To do that, we have to add a `TriggerDagRunOperator` as the last task in the DAG. In the task configuration, we specify the DAG id of the DAG that contains the task:

```python
from airflow.operators.dagrun_operator import TriggerDagRunOperator

trigger_self = TriggerDagRunOperator(
    task_id='repeat'
    trigger_dag_id=dag.dag_id,
    dag=dag
)

the_rest_of_the_dag >> trigger_self  # add it as the last task
```

