n8n workflow that automates CRM lead follow-ups: updating a date in Notion triggers a Claude agent to draft a personalized message, then idempotently upserts a TickTick reminder task.

I maintain a professional-leads CRM in a Notion database (status, interest level, next step, notes, next-message date). Until now: manual drafting of each follow-up plus manual addition of a TickTick reminder task. Repetitive, time-consuming, risk of forgetting.
Business goal: a single action (updating the next-message date in Notion) automatically triggers the drafting of a personalized message and the scheduling of a reminder task.
My role: end-to-end design and implementation of the workflow, from requirements analysis to production deployment.
Event-driven n8n workflow that listens to Notion DB updates and orchestrates 3 steps:
Technical challenges: generating messages that are genuinely personalized (tone, context, length of the relationship) without falling into empty sales clichés.
Solutions: advanced prompt engineering (strict rules on tone, relative dates, concise style), structured output for reliability.
Connecting Notion ↔ Claude ↔ TickTick in a single pipeline. The Notion "Page Updated in Database" trigger only returns the row's DB properties, never its markdown body. Yet that's where the rich narrative context of a lead lives (mission, timeline of exchanges, next action).
Solution: a Notion MCP Server attached to the AI agent via an MCP Client Tool node, calling notion-fetch on the page ID at the start of execution to fetch the enriched markdown body before drafting.
Handling edge cases: repeated edits on the same lead (no duplicates), TickTick API without native upsert (match by title → update or create), network errors.
Workflow deployed on self-hosted n8n (VPS + Dokploy) and versioned in a dedicated repo for backup and change traceability. Dedicated alerting workflow that notifies on execution failures (crash, timeout, API error).