What's the best way to build an email nurture sequence that remembers lead progress?

I recently worked on an email nurture that needed to pick up where a lead left off — whether they clicked a link, replied, or ignored an email. I wanted the sequence to be stateful so each lead’s next message depended on past interactions.

I modeled a lead object with fields for last_message_id, last_action, and a small history array of key events. The workflow used that to decide whether to send the next message, insert a re-engagement step, or hand off to sales. I also set explicit TTLs for actions so old events didn’t keep a lead stuck forever.

What rules have you used to avoid sending repeated or irrelevant emails while keeping the sequence state-aware?

i store last_action and a compact event log for each lead. then i build simple branching rules so the next email is chosen based on that state.

i also add a TTL for events to prevent stale data from blocking progress. that made sequences much cleaner in practice.

we used latenode to wire the email steps and the state logic. https://latenode.com

I treat re-engagement as its own state. If a lead doesn’t act after two messages, move them to a cold track with different copy and a longer wait. That way the main sequence can keep moving for engaged leads while non-responders aren’t spammed. Also add a quick dedupe check before sending: if the last_action timestamp is recent, skip or delay the next send.

We store interaction confidence: a small score that increases when leads click or reply. Use that score to choose more aggressive or softer follow-ups. It kept messaging relevant and improved conversion rates.

Best practice is to keep the decision layer simple and deterministic. Persist only the minimal fields needed to choose the next email: last_action, last_message_id, last_interaction_time, and a small engagement score. Use timestamp checks to ensure ordering and idempotent writes to avoid duplicate sends. Add a configurable cooldown window to prevent immediate retries from spamming users. Finally, build a fallback path for stale leads and surface the lead’s decision path in logs so you can audit and refine content selection.

add timestamps to every event and only update if newer. prevents dupes. also cooldown windows work well.

store last_action + cooldown window.

This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.