January: Beta LLC — ₹80k site, paid late but happy, said *Let's do blog next quarter. You log Beta as active src/lib/db/schema.ts:5 in Notion, mean to follow up March. March madness, you forget. June: Beta hired other freelancer for blog ₹60k. You see LinkedIn post: Beta launched blog! You think They churned. They didn't churn — you evaporated*. No inactive filter src/lib/db/schema.ts:5, no scheduledDate src/lib/db/schema.ts:248 reminder, no dossier ping.
Cold clients aren't cold. They're un-scheduled.
Why HubSpot / Sheets / Notion Let Cold Become Lost
Your win-back is hunt, not system:
- Sheets —
LeadstabBeta LLC | warm | follow March. March passes, nonotificationssrc/lib/db/schema-public.ts:190, nocron dailysrc/app/api/cron/daily/route.ts:275to turnscheduledDate < todayintoToday. Row stays warm forever, butinactivenever queried. You filterwarm→ 23 rows, nopriority, nodueDate, no next action — decision fatigue, you close tab. - Notion —
Clientsdatabasestatus lead|activebut noupdatedAtsrc/lib/db/schema.ts:16sorting norpersonalTasks projectTaskIdsrc/lib/db/schema.ts:251linkage toproject .advancesrc/lib/db/schema.ts:36context.Betacard has commentFollow Marchburied under 7Acmecomments — scroll archaeology. - HubSpot —
Deal Lostafter 90 days auto-archives → invisible. NoportalTokens lastAccessedAtsrc/lib/db/schema-public.ts:176signalBeta last viewed portal 22 days agoto trigger timing. Follow-up task in HubSpot is solo datetime with noisTodaycapsrc/lib/db/schema.ts:247, nostreak isCompleteDaysrc/lib/db/schema.ts:262ritual. - Gmail — Search
Beta blog→Maxthread, notBeta LLC. Resend proposal by re-typing from Doc1.2L approxtext, notprojects budget numeric(12,2)src/lib/db/schema.ts:35+tasks totalTasks/doneTaskssrc/app/api/projects/route.ts:28proof of prior success.
Result: you re-cold-email 10 leads you never followed, while inactive past clients who already trust you get zero nudges. Win-back cost ₹0, new lead cost ₹3k + 14 days. You burned cheapest pipeline.
A client who paid once is not lead. They're dormant revenue with FK.
The 14-Day Win-Back Graph: Filter → Task → Portal Nudge
In RunoSO tenant_${id} src/lib/db/tenant.ts:47, win-back is status + scheduledDate loop, not memory:
clients(status lead|active|inactive src/lib/db/schema.ts:5, notes, updatedAt)
projects(clientId fk, status active|completed|on-hold src/lib/db/schema.ts:21, budget, deadline)
tasks(projectId fk, status, dueDate)
personalTasks(title, category work src/lib/db/schema.ts:239, priority, status todo|done src/lib/db/schema.ts:236, isToday boolean src/lib/db/schema.ts:247, scheduledDate, rolledOverFrom src/lib/db/schema.ts:250, projectTaskId fk nullable src/lib/db/schema.ts:251)
portalTokens(tenantId+clientId unique src/lib/db/schema-public.ts:169, lastAccessedAt, revokedAt)
taskStreaks(date unique isCompleteDay src/lib/db/schema.ts:257)The 14-Day Rule: every active → inactive client gets 3 timed touches in 14 days, then rest 30 — no spam, no forgetting.
Week 1 — Build win-back pool (10 min Monday):
- Filter
Clients status:inactive+projects status:completed+updatedAt >60dsrc/lib/db/schema.ts:16. In RunoSOGET /api/clients?status=inactivesrc/app/api/clients/route.ts:28you seeBeta LLC inactive, last project Beta Site completed Mar 12, budget 80000, 7/7 tasks done. Sheetswarmlabel can't showbudget+deadlineproof beside name. - Pick 5 max. Prioritize
budget >50k+invoices paidnotoverdue+vaultItems/assetsstill linked (means you own ops memory they value). Better than cold lead with no FK.
Week 1-2 — Schedule 3-touch via personalTasks (not memory):
- Day 2: Create
personalTasks category:work isToday:false scheduledDate:Today+2src/lib/db/schema.ts:248title: Beta win-back #1 — value nudgewithnotes: Share Beta case study snippet + portal packet Acme style: portal/[token] shows growth, 3 months later?priority:medium.runDailyRolloversrc/lib/utils/task-rollover.ts:1rollsscheduledDate < todaytoTodaywithrolledOverFrom— you never lose thread if day slips. - Day 7:
personalTasks scheduledDate:+7title: Beta win-back #2 — teardown offernotes: Loom 90s on Beta blog live vs our scope pitch, 1 actionable tweak free.No proposal text re-type — justportalTokens lastAccessedAtcheck: if they opened portal, skip pitch, askSaw you checked progress — want same for blog? - Day 14:
personalTasks scheduledDate:+14title: Beta win-back #3 — close or archivenotes: Option A ₹60k blog (scope locked) / Option B phase later Q1 — keep portal live till 30d then set inactive again.Decision task ensures you don't chase 45 days. CapisTodayto 3-5src/lib/db/schema.ts:247→TodayFocusCardisCompleteDay🔥keeps win-back light, not guilt list.
Touch content = dossier proof, not generic blast:
Open Clients → Beta dossier src/app/(dashboard)/clients/[id]/page.tsx — projects totalTasks/doneTasks 7/7 + invoices GOS/25-26/011 paid Mar 18 + vaultItems/assetsDomains clean handover. Paste one line into follow-up: Shipped your Beta Site 7/7 Mar 12 on time — portal shows still live. Saw you launched blog; I mocked how we'd structure archive+CMS to reuse your techStack Next.js src/lib/db/schema.ts:184. Specific beats Hey, need work? 8× reply rate.
Why This Beats Cold Email New Leads
New lead: build trust 0→1. Win-back: trust already paid invoice. Beta 80k → Blog 60k win-back has 3× conversion vs new cold email→inbound lead system src/app/(dashboard)/dashboard/page.tsx. tenant_${id} dossier holds proof new lead tool can't invent.
Mistakes That Keep Cold Cold
Mistake 1: Treating inactive as dead.
inactive src/lib/db/schema.ts:5 is not deleted — it's paused pipeline you query weekly. Don't delete row; filter it. Sheets delete row loses projectTaskId audit.
Mistake 2: One generic Hey then stop.
One follow-up dies at 12% reply. Three timed touches 14 days hit 38% because scheduledDate spacing respects inbox without pestering. isToday cap prevents 10 follow-ups guilt.
Mistake 3: Re-proposing from scratch.
New Doc Proposal without linking Budget 80k + deadline 4 weeks + githubUrl src/lib/db/schema.ts:34 context from prior projects shows amnesia. Reference prior project.budget + doneTasks — client feels remembered, not targeted.
Sheets / HubSpot / Notion vs 14-Day Linked
| Win-back moment | Sheets + Notion + HubSpot Deal Lost | RunoSO tenant_${id} dossier + personalTasks | |
|---|---|---|---|
| Find cold | Search warm 23 rows no isToday | Filter clients status:inactive + projects completed budget + updatedAt one query | |
| Remember to follow | Memory + follow March comment lost | personalTasks scheduledDate isToday rolledOverFrom auto rolls to Today 2/7/14 batch | |
| Proof snippet | Hunt old Doc 1.2L approx | Open dossier totalTasks/doneTasks + invoices paid + assets linked copy | |
| Portal signal | No view tracking | portalTokens lastAccessedAt shows Beta viewed 2d ago → time nudge | |
| Day clutter | 12 follow-ups today guilt | isToday capped 3-5 + isCompleteDay 🔥 + `personalTasks category work | personal` split |
| Close loop | Forget after 1 ping | Day 14 close or archive task → reset inactive + rest 30d |
Memory vs scheduled FK. Scheduled revives.
Install Win-Back This Week
- Today (10 min): Filter
clients inactive→ pick 3 withpaid+completed. Copyproject budget/deadline + tasks done/totalinto notes snippet for each. - Create 3×
personalTasksDay 2,7,14withscheduledDate+priority medium+ dossier link in notes.isToday:falsenow →Todayauto later. - Send #1 tomorrow when
runDailyRolloversurfaces task — include portal linkportalTokens tokenfreshPOST /api/clients/[id]/portalso they see old project shine. Don't pitch new scope until reply. - Monday review 5 min: Check
NotificationsBell+lastAccessedAt— opened → send #2 teardown; not opened → same #2 but softer. Close day 14 with archive task if silence →inactiverest.
Do 3 win-backs 14 days. One revival ₹60k beats 20 cold emails.
RunoSO revives cold clients — status inactive filter, scheduledDate win-back tasks, portalTokens nudges and dossier proof in one graph.
→ Win Back Cold Clients — Try RunoSO Free
By Gautam Parmar src/app/(marketing)/about/page.tsx:44 — solo founder, Next.js 16 Tailwind v4 Neon Drizzle AES-256-GCM, building in public on X.
Keep Reading
- Keep new handover clean: freelance proposal to project handover.
- Ops rhythm: freelance weekly review operating rhythm.
- Protect revive context: where freelancers should never store passwords.
FAQ
Isn't 3 follow-ups spam? 14-day spacing 2/7/14 with value (#1 case share, #2 Loom teardown, #3 choice) + portal proof is service, not spam. Spam is daily generic Hey. Linked touches reference budget + tasks done they recognize as thoughtful recall.
What if they truly churned angry? invoices status:overdue or projects status:cancelled filter skip win-back — pick paid + completed only. notes with Churn reason: timeline miss logs learning so you don't chase wound.
Can I automate win-back email? Draft one template, but schedule via personalTasks scheduledDate and personalize with dossier snippet + portalTokens portal/[id] link. Automation without clientId context feels batch; linked dossier makes 1-min personal feels 1:1.



