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

# Triggers

> The events and schedules that can start a flow, and how to choose between them.

Every flow starts with one trigger. The trigger decides when the flow runs, how often it runs, and what the flow already knows when it starts. Choosing it is the first decision in the [flow builder](/features/flow-builder), and it is the one you cannot change later without rebuilding the flow.

There are two kinds:

* **Event triggers** react to something that happened. A meeting finished processing, a deal moved stage, a commitment went overdue.
* **Schedule triggers** run on a cadence you set. Once a day, or once a week on chosen days.

## Choosing a trigger

<CardGroup cols={2}>
  <Card title="Something happened" icon="bolt">
    Use an event trigger when the flow should respond to a specific change. It runs once per change, close to when the change happened.
  </Card>

  <Card title="Every day or week" icon="calendar">
    Use a schedule trigger when the flow should sweep a set of records on a cadence, like a digest or a hygiene check.
  </Card>
</CardGroup>

If you are not sure, type what you want in the composer and leave the trigger set to **Let Doris choose**. Doris reads your description and picks the closest match.

## All triggers

| Trigger                                                                     | Event id                  | Fires                                       |
| --------------------------------------------------------------------------- | ------------------------- | ------------------------------------------- |
| [After a meeting](/features/triggers/after-a-meeting)                       | `meeting.processed`       | Once per processed meeting                  |
| [After a deal meeting](/features/triggers/after-a-deal-meeting)             | `deal.meeting_processed`  | Once per deal linked to a processed meeting |
| [Before an upcoming meeting](/features/triggers/before-an-upcoming-meeting) | `calendar.event_upcoming` | 30 to 90 minutes before a deal meeting      |
| [Deal created](/features/triggers/deal-created)                             | `deal.created`            | When a deal first appears                   |
| [Deal stage changed](/features/triggers/deal-stage-changed)                 | `deal.stage_changed`      | On every stage move                         |
| [Deal updated](/features/triggers/deal-updated)                             | `deal.updated`            | When tracked deal fields change             |
| [Deal closed](/features/triggers/deal-closed)                               | `deal.closed`             | When a deal is first marked won or lost     |
| [Assessment completed](/features/triggers/assessment-completed)             | `assessment.completed`    | After a framework assessment scores         |
| [Commitment created](/features/triggers/commitment-created)                 | `commitment.created`      | When Doris records a commitment             |
| [Commitment overdue](/features/triggers/commitment-overdue)                 | `commitment.overdue`      | When an open commitment passes its due date |
| [Sentinel signal fired](/features/triggers/sentinel-signal-fired)           | `sentinel.signal_fired`   | When Sentinel raises or escalates a flag    |
| [Positive outbound reply](/features/triggers/positive-outbound-reply)       | `outbound.reply_positive` | When a lead replies positively              |
| [Daily schedule](/features/triggers/daily-schedule)                         | `schedule.daily`          | Once a day at a chosen hour                 |
| [Weekly schedule](/features/triggers/weekly-schedule)                       | `schedule.weekly`         | Once a week on chosen days                  |

## What every trigger carries

When a trigger fires, it hands the flow a small set of facts about what happened. The first steps in your flow use those facts to look up the full record. A deal trigger carries the deal, so a **Find record** step can load that deal with its stakeholders, commitments, and meetings attached.

Each trigger page lists what it carries.

## Narrowing when a flow runs

A trigger fires on every matching change. To run only on some of them, add a **Continue if** step near the top of your flow and test a value the trigger carried. A deal stage flow that should only fire on one stage checks the new stage name and stops otherwise.

Doris adds these for you when your description implies one. "When a deal over 50k moves to negotiation" becomes a stage trigger with a Continue if on both the stage and the amount.

## Repeat protection

Flows carry a cooldown. If the same record triggers the same flow twice inside the cooldown window, the second run is skipped. This stops a chatty CRM webhook from producing a burst of near-identical notifications for one deal.

<Tip>Trigger choice is what makes a flow feel timely or noisy. Prefer the most specific trigger that covers your case: **After a deal meeting** over **After a meeting** when the flow is about a deal, and **Deal closed** over **Deal stage changed** when you only care about the outcome.</Tip>
