What to create: a single Processing state property
Create one contact (or company, if your automations run there) custom property called `Processing state` as a dropdown select. Make the default value `Idle` so records are free to be processed unless marked otherwise.
Use these exact option values (copy-paste names):
- `Idle` (default)
- `Processing — <workflow-short-name>` (one option per workflow; use short unique names, e.g. `Processing — LeadQual`)
- `Blocked — Manual Review`
- `Error`
Keep the list short. The pattern relies on setting one of these values, not creating lots of state fields. Use the workflow-short-name convention so you can tell which automation had the contact locked.
Where to set it inside HubSpot workflows (practical steps)
When editing each workflow, add checks and actions in this order: first, require the record's `Processing state` equals `Idle` as an additional enrollment or suppression criterion so the workflow does not enrol records already being handled. Then add an immediate action: `Set contact property value` → `Processing state = Processing — <workflow-short-name>`.
Run your normal workflow actions next. At the end add a short delay, then `Set contact property value` → `Processing state = Idle`. Recommended delays: simple automated flows = 10–15 minutes; integrations or asynchronous calls = 60 minutes; human handoffs set `Processing state = Blocked — Manual Review` and create a task for the owner instead of clearing it automatically.
Handle failures and timeouts: add an If/then branch that catches expected failure points (API call failed, required field missing) and sets `Processing state = Error` then create a task or internal notification. Also add a safety fallback at the end of the workflow: `Delay 24 hours` then `If Processing state is not Idle, set Processing state = Idle and notify owner` — this prevents permanent, hidden locks.
For workflows that must be tolerant (e.g. marketing emails): rather than blocking enrolment entirely, use an If/then branch as the first action: `If Processing state = Idle, Set Processing state = Processing — X and continue; Else, create task/exit` so you can choose whether to queue, skip or notify.
Exceptions, manual overrides and a one-week test plan
Make manual resets obvious and low-friction: create a saved list `Processing state is not Idle` and add it to your team's shared view. Train staff to open the contact, check the timeline entry that set the state, then set `Processing state = Idle` once they've resolved the issue. For audits, create a second tiny workflow: trigger when a user sets a checkbox `Reviewed` to `Yes` and have it set `Processing state = Idle` — that avoids people guessing which option to pick.
One-week rollout test plan (small UK team, low risk):
- Day 0: Create the `Processing state` property and a saved list for non-Idle records. Clone one low-risk workflow (or pick one small marketing automation) into a test copy.
- Day 1: Modify the cloned workflow to require `Processing state = Idle`, add `Set Processing state = Processing — Test` as the first action and `Delay 15 minutes` then `Set Processing state = Idle` at the end. Run it manually on 10–20 test contacts.
- Day 2–3: Observe the saved list and workflow history. Confirm that a contact never shows two `Processing — ...` states overlapping. If you used the timeline or property history you can see the exact timestamps and confirm no simultaneous processing.
- Day 4: Promote the pattern to one operational automation (e.g. a lead assignment flow). Keep monitoring for collisions and check the `Error` list daily.
- Day 5–7: Add more workflows gradually. Tweak delays where you saw premature clears or long locks. After a week, compare the number of collision incidents (contacts that previously triggered multiple workflows at once) with your baseline; you should see far fewer overlaps and clearer manual handoff points.
Simple monitoring to keep it safe: a saved list `Processing state is not Idle`, another `Processing state = Error`, and a daily email or Slack digest showing counts. If a record stays non-Idle beyond your expected timeout (e.g. >24 hours), alert the owner automatically.
If you want a hand mapping which workflows to protect first and applying the pattern with minimal disruption, Optira can help implement the property, adjust your workflows and review the week‑one results.