Skip to main content
A weekly sweep finds open deals that have gone quiet, flags any past a stage-specific age threshold, and tasks the owner to act. This is pipeline-hygiene work. It is for sales managers and revenue operations (RevOps) engineers who watch a business-to-business (B2B) pipeline drift between Monday reviews. A Recurring schedule wakes the workflow. Find records pulls the open deals, and a Loop walks them one at a time. For each deal, an If condition compares the deal’s idle time against an Adjust time cutoff tuned per stage. A stale deal then gets a “Needs review” flag from Update record and a Create task for its owner. The sweep flags and nudges. It never auto-closes anything.

Prerequisites

  • An Attio plan on the Plus tier or higher, so the new Workflows engine is available.
  • The Deals object with a Stage status attribute and an Owner attribute populated on live deals.
  • A Last interaction attribute on Deals that reflects real activity. Attio maintains a system Last interaction value. Confirm it updates the way your team expects before you trust it.
  • A Needs review checkbox or single-select attribute on Deals to hold the flag. Create it before you build the workflow.
  • No external integrations or API keys are required for the core build. The optional digest needs a connected Slack workspace, covered under Variations.

How it works

The schedule fires once a week. It hands a list of open, owned deals to a loop. For each deal, the workflow computes a cutoff date that depends on the deal’s stage. A Qualified deal is stale after 7 days. A Proposal deal is stale after 30. The workflow then checks whether the deal’s last interaction falls before that cutoff. Deals that fail this freshness check get flagged and generate an owner task. Fresh deals fall through untouched. Nothing in this flow closes or moves a deal. So a false positive costs an owner one glance, not a lost record. The blocks run in this order:
  1. Recurring schedule fires Monday morning in the team’s time zone.
  2. Find records returns open, owned deals only.
  3. Loop runs one iteration per matching deal.
  4. Adjust time subtracts the stage-specific threshold from now to produce a cutoff date.
  5. If tests whether the deal’s last interaction is before the cutoff.
  6. Update record sets Needs review on stale deals.
  7. Create task assigns a follow-up to the deal owner.

Build steps

1

Add the recurring-schedule trigger

Create a new workflow and add the Recurring schedule trigger. Set it to run weekly so the sweep lands before the Monday pipeline review. Pick the time zone your reps actually work in, not the workspace default. That way “Monday morning” means the same thing for everyone.
2

Find the open, owned deals

Add a Find records block on the Deals object. Filter hard. A tight filter is your main defense against a loop credit blow-up, because every record it returns becomes a loop iteration. Restrict to open stages, require an owner, and add a wide outer activity bound so you never loop the whole pipeline.
While you are building, keep the Limit at 5. A single Find records block returns at most 100 records. So a maxed-out sweep with a loose filter can still fire 100 task writes in one run. Raise the limit only after a clean test, and keep the stage filter narrow.
3

Loop over the matches

Add a Loop block and point it at the records from the previous step. The loop is free. What runs inside it is not. Every write lives inside the loop and is gated by the condition two steps on.
4

Compute a stage-specific cutoff

Inside the loop, add an Adjust time block to turn now into a cutoff date. Per-stage ages are how you avoid false positives. A Qualified deal idle for 8 days is genuinely stale. Flagging a Proposal deal at the same age just trains reps to ignore the flag. Subtract the right number of days for the current deal’s stage.
The cleanest way to pick the per-stage number is a Switch on {{deal.stage}} ahead of this block. It writes the day count into a variable that you feed into Amount. Both Switch and Adjust time are free.
5

Gate on staleness

Add an If condition that compares the deal’s last interaction against the cutoff. A condition that stops a run is free. So this is where you spend nothing to protect the writes that follow it. Only deals that fail the freshness check continue down the true branch.
6

Flag the deal

On the true branch, add an Update record block to raise the review flag. This write is idempotent, which means re-running the sweep on an already-flagged deal just re-sets the same value.
7

Task the owner

Add a Create task block on the same branch. Assign it to the deal owner and link it to the deal so the owner opens straight into context. Name the deal and its stage in the task text so the task is actionable without a click.

Variable mapping

Credit cost worked example

Most of the blocks here are free. The schedule, Find records, Loop, Adjust time, the optional Switch, and the If condition are all logic and lookup blocks. They cost nothing no matter how often they run. You pay only for the two writes on the stale branch. Those are the Update record flag and the Create task, each 1 credit. So each stale deal costs 2 credits per run, and fresh deals cost nothing. Say a typical Monday surfaces 15 stale deals. That is 15 × 2 = 30 credits per run, or roughly 120 credits a month across four sweeps. The loop only writes on the true branch. So a quiet week with two stale deals costs 4 credits, not the full pipeline. Loops multiply. The per-run cost is (writes on the stale branch) × (number of stale deals). The only lever that matters is keeping the stale count honest. You do that with a tight filter in the find step and accurate per-stage thresholds. Check your plan’s monthly allowance on Credits & pricing explained. Never assume the number from another page.

Test plan

  1. Set the Find records limit to 5 so a bad run cannot fan out.
  2. Pick or create one Qualified deal with a last interaction 10 days ago, owned by a real user such as Priya Sharma. This is your expected pass.
  3. Add one deliberately failing input: a Proposal deal touched 8 days ago. With the 30-day threshold, it must not be flagged. If it gets a task, your stage thresholds are wired backward.
  4. Open the workflow and click the Run test button to fire the trigger manually instead of waiting for Monday.
  5. In run history, expect this:
    • Find records returns up to 5 deals.
    • Loop shows one iteration per deal.
    • Adjust time outputs a cutoff_date that differs by stage.
    • If branches true only for the 10-day Qualified deal.
  6. Confirm exactly one Update record and one Create task ran, both for the Qualified deal, and that the Proposal deal produced neither.
  7. Open the flagged deal and confirm Needs review is set and the owner has a linked task. Then raise the limit deliberately toward its maximum of 100 for the live schedule.

Failure modes

Variations

One digest instead of per-deal tasks

If per-deal tasks feel noisy, collect the stale deals into a single message instead. Drop Create task. Keep the loop and the If condition, and append each stale deal to a variable. After the loop, send one Broadcast message or a Slack post through a third-party block to the pipeline channel such as #revenue. This trades one credit per deal for one credit per digest. It gives managers a single Monday list instead of scattered tasks.

Auto-snooze low-priority stages

Some early-stage deals are not worth chasing weekly. For those, add a Switch that routes Qualified deals through a longer threshold. Instead of flagging, write a “Snoozed until” date with Adjust time. The sweep then skips snoozed deals until their date passes. There is still no auto-close, just a quieter cadence for the top of the funnel.

See also

Source: Attio Workflows block library and Attio Workflows help. Last reviewed against the Attio Help Center, June 2026.