🇪🇸 Español 🇬🇧 English 🇧🇷 Português

Trigger: Deal Changed Stage

Fires a workflow whenever a CRM deal moves forward or backward to a different pipeline stage.

Jul 11, 2026

The Deal Changed Stage trigger fires whenever a CRM deal moves from one stage to another inside its pipeline (e.g. from "Qualification" to "Proposal"). Leave it generic to catch any move, or restrict it to a specific target stage.

When to use it

  • Auto-send a proposal or quote when a deal enters the "Proposal" stage.
  • Notify the team when a deal reaches the last stage before closing.
  • Create a task on a Boards project whenever a deal advances.

Requirements

The CRM module (Deals/Pipelines) must be enabled on your workspace.

Filters available

  • Specific pipeline (optional).
  • Specific target stage: fires only when the deal enters that exact stage; blank = any stage change.

Variables available

  • $trigger.deal_id, $trigger.title, $trigger.amount, $trigger.pipeline_id, $trigger.status
  • $trigger.stage_name — the name of the new stage (the one the deal just entered).
  • $changes.stage_id.old / $changes.stage_id.new — the previous and new stage's numeric IDs.
  • $trigger.contact_id plus contact variables
  • ⚠️ $trigger.column_old / $trigger.column_newnot available on this trigger: those keys are only populated for Board items, not CRM deals. A deal stage change never fills them in, so if you use them in a message, it renders empty. Use $trigger.stage_name (new stage, with a name) and/or $changes.stage_id.old / $changes.stage_id.new (IDs, no name) instead.

How to build it

  1. Go to WorkflowsNew workflow.
  2. Drag a Trigger node → pick Deal Changed Stage (under CRM & records).
  3. Optionally pick the pipeline and the specific target stage.
  4. Add an action using $trigger.stage_name to personalize the message with the new stage's name.
  5. Save and activate.

Example

Workflow "Entered Proposal": fires only when the specific target stage = Proposal → Notify team: 📄 {{trigger.title}} moved to {{trigger.stage_name}} — prepare a quote for {{contact.display_name}}.

Tips

If each pipeline maps to a different product line, filter by pipeline so one team doesn't get another team's alerts.

Troubleshooting

  • If the workflow fires more often than expected, double-check the specific target stage filter — without it, the trigger reacts to any stage change, including moves backward.
  • If your message shows blank where you expected {{$trigger.column_old}} or {{$trigger.column_new}}: this is a known issue, those variables don't exist for CRM deals (they're Board-item-only). Use {{$trigger.stage_name}} instead.
Was this helpful?

Related articles