Prerequisites
- A workspace on the Plus plan or higher.
- A Deals object with a Stage status attribute that has a Closed won option and a Closed lost option.
- An Amount number attribute on Deals, so the digest can total new pipeline.
- A Created at system timestamp on Deals, which marks when each deal was added.
- A Last activity date attribute on Deals, which marks the last time a rep touched the deal.
- An Owner attribute on Deals if you plan to scope or attribute the digest by rep.
- A workspace audience for Broadcast message, for example a Sales team broadcast that everyone watches.
How it works
The workflow wakes on a fixed schedule and does three free reads. First it counts and totals the deals created since yesterday. Then it lists the deals that have stalled. Finally it assembles a single in-app broadcast from those results. Nothing writes to a record, so the whole run costs zero credits. The one thing you must get right is the schedule’s timezone. “Since yesterday” has to mean yesterday for your team, not for a server in another hemisphere. The blocks run in this order:- Recurring schedule fires on weekday mornings in a fixed timezone.
- Find records returns deals created since yesterday.
- Aggregate values counts those deals and sums their
Amount. - Find records returns open deals with no activity in seven or more days.
- Broadcast message posts the formatted digest.
Build steps
1
Add the recurring schedule trigger
Create a new workflow and add the Recurring schedule trigger. Set it to run on weekday mornings. Then pin the timezone to where your team works. People often skip the timezone. Without it, the schedule runs in coordinated universal time (UTC), the global time standard. Your “yesterday” window then drifts by hours.
2
Find deals created since yesterday
Add a Find records block on the Deals object. Filter to deals created in the last day, so the digest covers exactly the fresh pipeline.
3
Aggregate the new deals
Add an Aggregate values block and feed it the records from step 2. Produce two outputs so the digest leads with hard numbers: a count of new deals, and the sum of their
Amount.4
Find stalled deals
Add a second Find records block on Deals. Filter to open deals that have not moved in a week. Now the team sees what is slipping, not only what is new.
5
Broadcast the digest
Add a Broadcast message block and compose the digest from the variables you produced. Keep it scannable: counts first, then a short stalled list. Owners then know exactly what to chase.
Variable mapping
A variable is a piece of data that one block produces and a later block reuses. For the exact reference syntax that pulls a block’s output into a later step, see Variables & data passing.
Credit cost worked example
This recipe is a favorite when you watch your credits, because it costs 0 credits per run. Here is why every block is free. The Recurring schedule trigger is free. Both Find records blocks are free reads. Aggregate values is free math. Broadcast message is a free workspace block. There are no data writes, no external calls, and no AI blocks anywhere in the run. At a realistic 22 business days per month, the digest runs 22 times. That is a total of 22 × 0 = 0 credits per month. The whole workflow stays comfortably inside any plan’s allowance. See Credits & pricing explained for the canonical model. The math only changes if you add a write. Say you later stamp a “last digested” date on each stalled deal inside a Loop. The cost then becomes the per-iteration write multiplied by the number of stalled deals. Until then, this workflow is genuinely free to run forever.Test plan
- Open the workflow and use Run now, a Manual run, to fire it on demand instead of waiting for tomorrow’s schedule. Keep the run viewer open in a second tab.
- Confirm that step 2’s Find records returns only deals created in the last day. Check the record count in run history.
- Confirm that Aggregate values outputs a
new_countand anew_valuethat match those records. A count of0and a value of0is a valid result on a quiet day. - Confirm that step 4’s Find records returns open deals last touched seven or more days ago, oldest first.
- Confirm that Broadcast message posts to the Sales audience with the counts and stalled list filled in from the variables, with no empty
{{ }}placeholders. - Run one deliberately failing input. Leave the trigger timezone unset, or on UTC, while your team is on Europe/London. Then run the workflow at 08:00 local time. The “since yesterday” window is now off by your UTC offset. As a result, deals created late last evening get missed or double-counted. Fix it by pinning the timezone in step 1 and re-running. The count then matches what you see in the Deals view.
Failure modes
Variations
Per-team digests
When pipeline is split by team or region, duplicate the workflow once per segment. Add anOwner or Region filter to each Find records block. For example, Owner is in the EMEA team. Point each Broadcast message at that team’s audience. Each team then gets a digest about its own deals instead of one long combined list.
Weekly exec rollup
Change the Recurring schedule to Monday mornings only and widen step 2’s window tonow - 7 days. Add a third Find records for deals that hit Closed won in the same window. The exec digest then reports new, won, and stalled for the week. Everything stays free, because it is the same blocks on a longer cadence.
See also
- Stale-deal sweep
- Choosing the right trigger
- Aggregate values
- Broadcast message
- Attio: Workflows overview
Source: Attio Help Center: Workflows overview. Last reviewed against the Attio Help Center, June 2026.