Status-change triggers let your assignments start a Job automatically when a record in a connected tool — a CRM deal, a project task, a support ticket — reaches a particular state. Use them to chain Duvo workflows to the milestones that matter in your business: a deal closes, a project moves to review, a ticket is resolved.Documentation Index
Fetch the complete documentation index at: https://docs.duvo.ai/llms.txt
Use this file to discover all available pages before exploring further.
Key Capabilities
- CRM stage monitoring — React when a HubSpot deal or Salesforce opportunity moves to a target pipeline stage
- Project status monitoring — Start a Job when a Notion page status or Jira issue status changes to a configured value
- Flexible polling cadence — Run checks every few minutes for near-real-time response, or hourly for batch workflows
- State memory — Assignment Memory stores the last-seen status of each record so the assignment only fires once per genuine change, not on every poll
- Multi-record support — Process all records that changed state since the last check in a single Job, or trigger one Job per record
How Status-Change Triggers Work
Duvo does not receive native push webhooks from CRM or project management tools (with the exception of Linear, which is already covered in Event-Driven Triggers). Status-change monitoring is implemented by scheduling an assignment to run on a regular interval and having the SOP:- Query the connected tool for records that have recently moved to the target state.
- Compare results against the last-seen state stored in Assignment Memory.
- Process only the records that genuinely changed since the last Job ran.
- Update Assignment Memory with the new state before finishing.
| Service | Mechanism | Typical latency |
|---|---|---|
| HubSpot | Polling | Equal to schedule interval |
| Salesforce | Polling | Equal to schedule interval |
| Notion | Polling | Equal to schedule interval |
| Jira (via Computer Use) | Polling | Equal to schedule interval |
| Linear | Native webhook (push) | Seconds — see Event-Driven Triggers |
When to Use Status-Change Triggers
- Sales onboarding — When a HubSpot or Salesforce deal moves to “Closed Won”, start an onboarding assignment that creates workspace accounts, sends a welcome email, and schedules a kickoff call
- Contract review routing — When a Notion page moves to “Ready for Legal Review”, route the document to the legal team and post a Slack notification
- Support escalation — When a Zendesk ticket moves to “Escalated”, create a Linear issue and assign it to the on-call engineer
- Content publishing — When a Notion page status changes to “Approved”, export the content to your CMS and notify the author
- Procurement follow-up — When a Salesforce opportunity enters “Procurement Review”, send a follow-up email and attach the latest price list
How to Set It Up
Step 1: Create the assignment
- Click + Create Assignment from your dashboard.
- Select Use Assignment Builder.
Step 2: Write your SOP
The SOP pattern for status-change triggers has three phases: query, compare, act. Here is a template adapted for a HubSpot deal stage change:[Target Stage Name] with your pipeline stage (for example, “Closed Won”, “Contract Sent”, or “Procurement Review”). Replace the downstream action with your specific workflow.
Step 3: Add connections
Under Connections, enable the connection for the tool you are monitoring:- HubSpot — for deal or contact status changes
- Salesforce — for opportunity or case status changes
- Notion — for page or database entry status changes
- Human-in-the-Loop — if the workflow includes an approval step
Step 4: Enable Assignment Memory
Go to Setup and enable Assignment Memory. The SOP will use it to store the IDs of records already processed.Step 5: Set a schedule
- Click Schedule in the assignment header.
- Choose an interval: every 15 minutes for near-real-time response, or every hour for batch workflows.
- Click Add schedule to save.
Worked Example — “Closed Won” Deal Triggers Onboarding
Outcome: When a HubSpot deal moves to “Closed Won”, Duvo starts an onboarding Job that creates accounts for the new customer, sends a welcome email, and notifies the customer success team in Slack. Connections used:- HubSpot — query deals by stage
- Gmail — send the welcome email
- Slack — notify the customer success channel
- Human-in-the-Loop — optional approval step before sending the email
SOP
Connections to enable
- HubSpot
- Gmail (the account sending the welcome email)
- Slack (for the #customer-success channel notification)
- Human-in-the-Loop (for the approval step before external communications)
Expected results
When the assignment runs every 15 minutes:- Deals that moved to “Closed Won” since the last Job ran are identified.
- A Human-in-the-Loop approval appears in your Activity Inbox for each new deal.
- After approval, a personalized welcome email is sent and #customer-success is notified.
- The deal ID is added to Assignment Memory so the next Job does not re-process it.
Adapting for Other Services
Salesforce — Opportunity stage change
The pattern is the same. Replace the HubSpot query with a Salesforce SOQL query:Notion — Page status change
Notion databases support a “Status” property. Query for pages where the Status equals your target value:Jira — Issue status change
Jira does not have a native Duvo connection. To monitor Jira status changes, use Computer Use to navigate the Jira web interface and read the issue list:Troubleshooting
The same record is processed more than once
- The Assignment Memory key must be written at the end of each successful Job. If the Job fails partway through, the memory update may not have been saved. Check the session log to see where the failure occurred.
- Make sure the SOP adds the ID to memory before the Job ends, even if the downstream action fails. Adjust the SOP: “Add the ID to memory regardless of whether the downstream action succeeds.”
Records that changed state are not detected
- Time window too narrow: The SOP queries for records changed “in the last X minutes”. If the schedule interval is 15 minutes but the query window is 10 minutes, changes in the gap are missed. Set the query window to match or slightly exceed your polling interval.
- Timezone mismatch: The query compares Duvo’s time against the timestamp in the CRM. Confirm both are in the same timezone, or use UTC for the comparison.
- API pagination: If many records changed state at once (for example, after a bulk import), the query may return only the first page. Add to your SOP: “Retrieve all pages of results, not just the first.”
Memory grows very large over time
Assignment Memory is designed for moderate-size tracking lists. If your workflow processes hundreds of records per day, theprocessed_ids list can become large over time. Limit memory growth by expiring old entries:
Take It Further
Chain to a second assignment After completing the onboarding Job, schedule a follow-up check 7 days later:Related
- Event-Driven Triggers — Overview of all trigger types and the trigger matrix
- Scheduling Assignments — Set the polling interval
- Assignment Memory — Track last-seen state to avoid duplicate processing
- Human-in-the-Loop — Add approval gates before irreversible actions
- HubSpot — Connect HubSpot
- Salesforce — Connect Salesforce
- Notion — Connect Notion
- Computer Use — Browser-based access for tools without a native connection