# Source: https://loops.so/docs/loop-builder.md

> ## Documentation Index
> Fetch the complete documentation index at: https://loops.so/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Loop builder

> Loops let you send emails based on something happening, like a contact property updating, a new contact being created or an external event happening in another platform.

## Getting Started

To start building your Loop, select a template or start from scratch.

<img src="https://mintcdn.com/loops/OG31ikb--92jQDlq/images/getting-started.png?fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=3ca8868a9bddc666b8293dc9ed17977f" alt="" data-og-width="2280" width="2280" data-og-height="1284" height="1284" data-path="images/getting-started.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/loops/OG31ikb--92jQDlq/images/getting-started.png?w=280&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=5a506352291ae9d058114929ca283502 280w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/getting-started.png?w=560&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=f2b5821b771981420f36232316f9cc18 560w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/getting-started.png?w=840&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=4a949d33a3098407f8344113d1ca5490 840w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/getting-started.png?w=1100&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=2adb957e405ce648e593a0414190c58f 1100w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/getting-started.png?w=1650&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=f2cd45877711b775b264c09ad18f9be2 1650w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/getting-started.png?w=2500&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=cde9e90bc02db67c684e5204272261d5 2500w" />

Templates are added often and we're always open to taking suggestions!

## Building a loop

A Loop is an email sequence that can be triggered by different events, and containing emails, delay timers and branches.

You can add new nodes to your loop by hovering over an arrow between nodes and clicking the `+` button.

More complex loops can be built by [adding branches](/loop-builder/branching-loops).

<img src="https://mintcdn.com/loops/K9TRANbphBauR0pJ/images/building-loop.png?fit=max&auto=format&n=K9TRANbphBauR0pJ&q=85&s=19c5e3492b267d7ba217776daecfb363" alt="" data-og-width="2280" width="2280" data-og-height="2084" height="2084" data-path="images/building-loop.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/loops/K9TRANbphBauR0pJ/images/building-loop.png?w=280&fit=max&auto=format&n=K9TRANbphBauR0pJ&q=85&s=c9222854fb36db1e3538aa1a6965f500 280w, https://mintcdn.com/loops/K9TRANbphBauR0pJ/images/building-loop.png?w=560&fit=max&auto=format&n=K9TRANbphBauR0pJ&q=85&s=4eb8c5584a138580ce104c7a7aaea3e4 560w, https://mintcdn.com/loops/K9TRANbphBauR0pJ/images/building-loop.png?w=840&fit=max&auto=format&n=K9TRANbphBauR0pJ&q=85&s=54afadd407e9e095ee995e0d106e50f3 840w, https://mintcdn.com/loops/K9TRANbphBauR0pJ/images/building-loop.png?w=1100&fit=max&auto=format&n=K9TRANbphBauR0pJ&q=85&s=0b7ba983960b33cd4de013a2675fd40b 1100w, https://mintcdn.com/loops/K9TRANbphBauR0pJ/images/building-loop.png?w=1650&fit=max&auto=format&n=K9TRANbphBauR0pJ&q=85&s=5a834e73735d5b265dca815bf8bbcc4b 1650w, https://mintcdn.com/loops/K9TRANbphBauR0pJ/images/building-loop.png?w=2500&fit=max&auto=format&n=K9TRANbphBauR0pJ&q=85&s=7aed70f56f4fa1cd67b81258c21ea3a7 2500w" />

## Mailing lists

You can make a loop send to a specific mailing list by using the dropdown in the top right of the loop builder.

By selecting lists from this dropdown you can make sure that only contacts from those lists are added to the loop.

<img src="https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-mailinglist.png?fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=dbbd23f2b376f434aa6d6fab2e833290" alt="" data-og-width="2280" width="2280" data-og-height="1049" height="1049" data-path="images/loop-mailinglist.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-mailinglist.png?w=280&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=3552efc8e73c98168f989b09879d980a 280w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-mailinglist.png?w=560&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=237f8f1c07cc74c1719299fee59be629 560w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-mailinglist.png?w=840&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=092810fd4435085d8938e06a5bd7caf3 840w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-mailinglist.png?w=1100&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=da799b0fb9dae7e81012ebed6e22f716 1100w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-mailinglist.png?w=1650&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=866ec2ae32ceb7edb3e54d721ee60ed7 1650w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-mailinglist.png?w=2500&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=13ae5d36ef77baf35f3c5c42146bee7b 2500w" />

<Note>
  When using the **Contact added to list** trigger, this option is removed and you can instead select the list from the trigger node.
</Note>

## Nodes

There are five types of nodes available in loops:

* Trigger
* Email
* Timer
* Audience filter
* Branch ([read more](/loop-builder/branching-loops))
* Experiment ([read more](/loop-builder/experiments))

### Triggers

<img src="https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/triggers.png?fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=ba70751cfb0bbded010aa98d2e1d2661" alt="" data-og-width="2280" width="2280" data-og-height="1409" height="1409" data-path="images/triggers.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/triggers.png?w=280&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=5368c3de6799c0594b57fa911cbbdcff 280w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/triggers.png?w=560&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=f0ab68aecfa3ece1267104f2991a11b8 560w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/triggers.png?w=840&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=f7461ac943339a6a86562ac48c428709 840w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/triggers.png?w=1100&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=79e61483ec59bfb9d5424ec6ff217fdd 1100w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/triggers.png?w=1650&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=f328b6128aa6debed2e39d789c5d0456 1650w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/triggers.png?w=2500&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=6acb4ae62a947e27d85396e443f82dad 2500w" />

The first node to add to a loop is the trigger. This is what will send new people into the loop.

There are four trigger options:

* **Contact added**: Triggered whenever a contact has been added to your audience.
  <Info>
    Only contacts who have been added via a [form](/forms/simple-form), the [API](/api-reference/intro) or an [integration](/integrations) will be added based on this trigger. Contacts added individually to the audience table will not be included. Contacts added or updated via CSV will only trigger if you select the [Trigger loops](/add-users/csv-upload#trigger-loops-via-csv) toggle during upload.
  </Info>
* **Contact updated:** Triggered whenever a contact property changes from one value to another. Can also conditionally trigger only if the previous property matches the inputted value.
* **Contact added to list:** Triggered whenever a contact is added to a certain [mailing list](/contacts/mailing-lists). You can select the list from the trigger node.
* **Event received**: Triggered when a certain [event](/events) is sent to Loops by the API or an integration. With this trigger you can start a loop based on interactions in your app. Common custom events are `signUp`, `canceled` and `activated`.

You can read more about triggers [here](/loop-builder/loop-triggers).

### Emails

You can add emails at any location inside your loop, giving you flexibility to send mail immediately after the trigger or after a delay. You can also send to specific contacts by adding an audience filter, or by branching your loops.

<img src="https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-email.png?fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=d07521dcddc09d27873e6989f4fa401a" alt="" data-og-width="2280" width="2280" data-og-height="1434" height="1434" data-path="images/loop-email.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-email.png?w=280&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=6072619c6abe36533c0adfb00f226daf 280w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-email.png?w=560&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=b5512836d5a3db7eab8acdb0330ba636 560w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-email.png?w=840&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=620701d107b3046d5ecc5206c44cdc7d 840w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-email.png?w=1100&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=c5520a47aed0759ffdf1621e2fb38cef 1100w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-email.png?w=1650&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=1b38c387aacccdd760caf73043dbdf0d 1650w, https://mintcdn.com/loops/OG31ikb--92jQDlq/images/loop-email.png?w=2500&fit=max&auto=format&n=OG31ikb--92jQDlq&q=85&s=b8258313fb3fc653c98346481effa93d 2500w" />

You can add unlimited emails to each loop.

To edit an email, click on the email node, then **Edit email**.

When a loop is active, you cannot edit the email. Click **Pause** to pause the loop and make changes to your email (and any other nodes). While paused, new contacts will be queued for up to 24 hours; they will enter your loop as soon as you save your email by clicking **Resume**.

You can copy emails from other loops by clicking the **Copy existing email** button after creating a new email node. This will bring up a dropdown of emails from other loops that you can insert into your loop.

<img src="https://mintcdn.com/loops/I7MiNuGd9K5dwTEQ/images/duplicate-loop-email.png?fit=max&auto=format&n=I7MiNuGd9K5dwTEQ&q=85&s=3912ccc10f8f2a52cb678a3348a888f6" alt="Duplicating emails" data-og-width="2280" width="2280" data-og-height="1940" height="1940" data-path="images/duplicate-loop-email.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/loops/I7MiNuGd9K5dwTEQ/images/duplicate-loop-email.png?w=280&fit=max&auto=format&n=I7MiNuGd9K5dwTEQ&q=85&s=e5f9744676969e7e20f863db4bc799a5 280w, https://mintcdn.com/loops/I7MiNuGd9K5dwTEQ/images/duplicate-loop-email.png?w=560&fit=max&auto=format&n=I7MiNuGd9K5dwTEQ&q=85&s=bf49525f1b6b33ccab39dc612ce12c93 560w, https://mintcdn.com/loops/I7MiNuGd9K5dwTEQ/images/duplicate-loop-email.png?w=840&fit=max&auto=format&n=I7MiNuGd9K5dwTEQ&q=85&s=e163c88ccd3ec1a1cc811965110e96c5 840w, https://mintcdn.com/loops/I7MiNuGd9K5dwTEQ/images/duplicate-loop-email.png?w=1100&fit=max&auto=format&n=I7MiNuGd9K5dwTEQ&q=85&s=adafc4b8ea99b20b728363a679a4a525 1100w, https://mintcdn.com/loops/I7MiNuGd9K5dwTEQ/images/duplicate-loop-email.png?w=1650&fit=max&auto=format&n=I7MiNuGd9K5dwTEQ&q=85&s=250bd4756e9d9e68d87306cdfe075373 1650w, https://mintcdn.com/loops/I7MiNuGd9K5dwTEQ/images/duplicate-loop-email.png?w=2500&fit=max&auto=format&n=I7MiNuGd9K5dwTEQ&q=85&s=7fa960472887f73b7de3aae407b114a0 2500w" />

### Timers

<img src="https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/timer.png?fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=34775e1322a25ce0e96886a26f237fa0" alt="" data-og-width="2280" width="2280" data-og-height="1707" height="1707" data-path="images/timer.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/timer.png?w=280&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=735ae527b2f6d3f5b5f18895b8264a22 280w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/timer.png?w=560&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=bbf9bc40035b94db622923d61d9cd9f2 560w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/timer.png?w=840&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=696e78459cf4f50069d0e923cfe94bd5 840w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/timer.png?w=1100&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=c4dd966ddf1d7d7b3226035861597006 1100w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/timer.png?w=1650&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=b3f6968e6fca19ca5a6c7ce2c47dd4df 1650w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/timer.png?w=2500&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=511d7a94171b79b7e752596695f8e175 2500w" />

A timer adds a fixed time period between two nodes in the loop.

For example, you could add a "3 day" timer after a "Contact added" trigger to send an email three days after a signup.

You can select the “Immediately” option to bypass the timer or any increment of time to extend the duration of the Loop.

You can add multiple timers to your loops, to add delays in different parts of your workflow.

### Audience filters

<img src="https://mintcdn.com/loops/Vqx-auiVy74YQr9S/images/audience-filters.png?fit=max&auto=format&n=Vqx-auiVy74YQr9S&q=85&s=4ff9eaae776b3d5d8a49a953aedd5e1b" alt="" data-og-width="2280" width="2280" data-og-height="1707" height="1707" data-path="images/audience-filters.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/loops/Vqx-auiVy74YQr9S/images/audience-filters.png?w=280&fit=max&auto=format&n=Vqx-auiVy74YQr9S&q=85&s=2309e179afa826d5c41fa027b1d45101 280w, https://mintcdn.com/loops/Vqx-auiVy74YQr9S/images/audience-filters.png?w=560&fit=max&auto=format&n=Vqx-auiVy74YQr9S&q=85&s=bfce6453ebbe7eb235ab25a7353a1b12 560w, https://mintcdn.com/loops/Vqx-auiVy74YQr9S/images/audience-filters.png?w=840&fit=max&auto=format&n=Vqx-auiVy74YQr9S&q=85&s=0e32297b27c04d45bc6c1b0fc031672e 840w, https://mintcdn.com/loops/Vqx-auiVy74YQr9S/images/audience-filters.png?w=1100&fit=max&auto=format&n=Vqx-auiVy74YQr9S&q=85&s=3d314aac4d25f61ac6ff7426b3d1ec96 1100w, https://mintcdn.com/loops/Vqx-auiVy74YQr9S/images/audience-filters.png?w=1650&fit=max&auto=format&n=Vqx-auiVy74YQr9S&q=85&s=faefd8b757e4bfb7874e87d90233a6a8 1650w, https://mintcdn.com/loops/Vqx-auiVy74YQr9S/images/audience-filters.png?w=2500&fit=max&auto=format&n=Vqx-auiVy74YQr9S&q=85&s=d80b5583ca66f7cf88673b754cffb5ba 2500w" />

Audience filters let you create fine-tuned Loops to target specific contacts.

For example, you can check in with contacts that have not signed up as a paying user 3 days after signing up by setting the Custom Event to `signup` the Timer duration to 3 days and the audience filter to `paid` equals `false`.

There are two options for applying audience filters:

* **All following nodes**: this will apply the filter when contacts reach every following node. If a contact no longer matches the filter's audience when they reach a following node, they will be removed from the loop.
* **Next node only**: this will apply your filter before contacts reach the next node. This is a one-time filter and any changes to the contact's value after the filter will not be taken into account.

<CardGroup columns="2">
  <Card title="Brancing loops" icon="code-branch" href="/loop-builder/branching-loops">
    Learn how to branch loops using audience filters.
  </Card>
</CardGroup>

## Metrics

Click over to the **Metrics** tab to view simple metrics inline within the builder.

<img src="https://mintcdn.com/loops/W7EWSDUW0GR-XWrp/images/metrics.png?fit=max&auto=format&n=W7EWSDUW0GR-XWrp&q=85&s=885f5f8dc42e870f88ff5bbe6aa3e018" alt="" data-og-width="2280" width="2280" data-og-height="1859" height="1859" data-path="images/metrics.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/loops/W7EWSDUW0GR-XWrp/images/metrics.png?w=280&fit=max&auto=format&n=W7EWSDUW0GR-XWrp&q=85&s=d59f2e1170479e79330c83e65734e169 280w, https://mintcdn.com/loops/W7EWSDUW0GR-XWrp/images/metrics.png?w=560&fit=max&auto=format&n=W7EWSDUW0GR-XWrp&q=85&s=d01963f8170fef13270ece6aba895a0d 560w, https://mintcdn.com/loops/W7EWSDUW0GR-XWrp/images/metrics.png?w=840&fit=max&auto=format&n=W7EWSDUW0GR-XWrp&q=85&s=0518602759333493530fc259185e58fd 840w, https://mintcdn.com/loops/W7EWSDUW0GR-XWrp/images/metrics.png?w=1100&fit=max&auto=format&n=W7EWSDUW0GR-XWrp&q=85&s=124e9ed59cd552738df28dda1c02e898 1100w, https://mintcdn.com/loops/W7EWSDUW0GR-XWrp/images/metrics.png?w=1650&fit=max&auto=format&n=W7EWSDUW0GR-XWrp&q=85&s=1b0f2b322a509f3582dd563f8710f007 1650w, https://mintcdn.com/loops/W7EWSDUW0GR-XWrp/images/metrics.png?w=2500&fit=max&auto=format&n=W7EWSDUW0GR-XWrp&q=85&s=bc8b71d95fc0808280c96c4aa122357f 2500w" />

Click **View details** to view detailed metrics for your Loop.

<img src="https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/view-full-metrics.png?fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=daf80a1cc0012a5bd8d29187acfd7cd6" alt="" data-og-width="2280" width="2280" data-og-height="1494" height="1494" data-path="images/view-full-metrics.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/view-full-metrics.png?w=280&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=7b2a6f881c11666e45fd94452034580e 280w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/view-full-metrics.png?w=560&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=737ef15d0ce550d3820bc4265e1a20f8 560w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/view-full-metrics.png?w=840&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=3269f86c0961a7b9e85ae81ba0bee4c0 840w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/view-full-metrics.png?w=1100&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=3c47c30ee1f9c64f6b5a7a9016fd2d8b 1100w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/view-full-metrics.png?w=1650&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=7661eb8f30a5447f741a4b6f15de0d5e 1650w, https://mintcdn.com/loops/1DdZd7QTRR4Srm-l/images/view-full-metrics.png?w=2500&fit=max&auto=format&n=1DdZd7QTRR4Srm-l&q=85&s=c960e8dd7087caf8b3f007b83ebe2a61 2500w" />

## Testing loops

You can test if a Loop works as expected by using email addresses with `@example.com` and `@test.com` domains (for example `user1@example.com` and `user2@example.com`).

First, add these as contact in your audience, then depending on how your Loops are set up, you can add and update properties, or send events to these email addresses to see how contacts move through your Loops.

Emails will not be sent to `@example.com` or `@test.com` email addresses so this is a good method to test emailing contacts without affecting your sending domain’s reputation.

You can also send test emails for each of the emails in a loop. Click on an email node and then the **Send a preview** airplane icon above the preview that appears.