RunoSO - Business OS for Solo Operators LogoRunoSO
FeaturesPricingTemplatesBlogAbout
Sign inStart free
RunoSO LogoRunoSO

Run your solo business. From one place.

Built in India 🇮🇳

Product

FeaturesPricingBlogChangelogRoadmap

Legal

Terms & ConditionsPrivacy PolicyRefund PolicyCookie PolicyData Deletion

Connect

Twitter/XLinkedInInstagramhello@runoso.in
Made by RunoSO
© 2026 RunoSO. All rights reserved.
Back to Blog

Featured Articles

Build in Public

Why I Ditched Notion & Sheets to Build RunoSO

7 min read
Technical Deep-Dive

How I Built a Zero-Knowledge Vault with AES-256

10 min read
Productivity

Best Freelance Tools in 2026 — Honest Stack Review

11 min read
View all posts
  1. Home
  2. Blog
  3. Retainer Management for Freelancers: Stop Chasing, Start Retaining
Productivity

Retainer Management for Freelancers: Stop Chasing, Start Retaining

By Gautam Parmar13 September 20268 min read
Retainer Management for Freelancers: Stop Chasing, Start Retaining — featured image

Month 1: Acme Retainer — ₹40k, 8 posts, 2 site updates, Slack support. You invoice day 1 via Sheets, get paid day 5. Smooth.

Month 2: You ship 10 posts (extra 2 quick), do site revamp hero as update, forget invoice until day 12 — client cash flow tight, pay day 22. You worked 18 days unfunded.

Month 3: Client: Pause retainer, too much back-and-forth on scope. They didn't churn for price. They churned for drift — 8 vs 10 posts no boundary, update vs revamp no FK, invoice no rhythm. Recurring work became monthly re-negotiation.

Retainers don't fail on delivery. They fail on linked repetition.

Why Sheets / Notion / HubSpot Lose Retainers

One-off projects tolerate manual ops. Recurring amplifies every gap ×12:

  • Sheets — Retainer log tab with Month | Client | Amount | Status as paid? text YES. No invoiceStatusEnum draft|sent|paid|overdue src/lib/db/schema.ts:58, no recurringInterval monthly|quarterly|yearly src/lib/db/schema.ts:80, no recurringNextDate src/lib/db/schema.ts:81. You set Google Calendar reminder Invoice Acme 1st; snooze 3 days; now dueDate src/lib/db/schema.ts:72 is guess.
  • Notion — Acme Retainer database with 8 posts text property. Tasks for Post 3 live in Trello board Acme Content — new Acme string, no projectId src/lib/db/schema.ts:47, no totalTasks/doneTasks src/app/api/projects/route.ts:28 linked to invoice. Client gets 3 revision promise in Notion, you count revisions in head.
  • HubSpot — Holds Deal Amount monthly but not tasks todo|in-progress|done src/lib/db/schema.ts:42 or vaultItems clientId src/lib/db/schema.ts:133 for Instagram login you need weekly. Deal recurring is CRM field, not invoices items jsonb src/lib/db/schema.ts:74 + cron daily clone src/app/api/cron/daily/route.ts:275 autoinvoice. Billing stays manual.
  • Flat vault/email — Monthly Can you resend login for Insta? because acme-social flat list has 4 acme-insta entries no social platform/handle vaultItemId src/lib/db/schema.ts:213.

Result: retainer feels ₹40k for whatever Acme asks rather than ₹40k for 8 posts + 2 updates. Without linked recurringNextDate + portal visibility, client anxiety spikes at month end, churn follows. Manual recurring loses ₹20-40k/quarter to forgotten invoices alone.

Recurring work needs recurring ops — not better memory.

The Linked Retainer Graph: Project → Tasks → Recurring Invoice → Portal

In RunoSO tenant_${id} src/lib/db/tenant.ts:47, retainer is a graph, not a Sheet row:

clients(status active src/lib/db/schema.ts:5) 1—∞ projects(clientId fk, budget numeric advance numeric type:content|dev|other status active|completed src/lib/db/schema.ts:23, deadline)
  1—∞ tasks(projectId fk, dueDate, status todo|in-progress|done)
  1—∞ invoices(clientId, projectId nullable, amount numeric, items jsonb, recurringInterval none|monthly|quarterly|yearly src/lib/db/schema.ts:80, recurringNextDate src/lib/db/schema.ts:81, status draft|sent|paid|overdue)
  1—∞ vaultItems(clientId, projectId) + assetsSocial(vaultItemId)
  portalTokens(tenantId+clientId unique src/lib/db/schema-public.ts:169)

Setup once, runs monthly:

  1. Create retainer project. POST /api/projects src/app/api/projects/route.ts:145 — Client: Acme Corp, Title: Acme — Growth Retainer Aug 2026, type:content, status:active, budget:40000, advance:0, deadline = month end. Typed numeric(12,2) feeds FinanceOverviewClient MRR without SUMIF.
  2. Template tasks for scope. 8 × Post + 2 × Site update + 1 × Reporting as tasks with dueDate weekly slots. Client sees 6/8 done progress on ClientDetailPageClient src/app/(dashboard)/clients/[id]/page.tsx. Over-scope Quick post 9 is new task only after change-order bump to budget — not silent free.
  3. Recurring invoice. POST /api/invoices src/app/api/invoices/route.ts:84 — clientId + projectId, items jsonb 8 posts + 2 updates, invoiceNumber FY sequential GOS/25-26/001, issueDate, dueDate, recurringInterval:monthly recurringNextDate:2026-09-01 src/lib/db/schema.ts:80. Daily cron src/app/api/cron/daily/route.ts:275 + src/lib/utils/recurring.ts:5 clones on recurringNextDate and advances date — you wake to draft→sent clone + notifications type:recurring_generated src/lib/db/schema-public.ts:195, not midnight manual.
  4. Portal self-serve. POST /api/clients/[id]/portal src/lib/db/schema-public.ts:169 → portal/[token] shows invoice PDF sendInvoiceEmail portal link src/lib/emails/send.ts:347, payment terms, progress totalTasks/doneTasks. Client re-downloads without pinging.
  5. Vault linked. vaultItems category:password|api-key src/lib/db/schema.ts:123 linked clientId + assetsSocial vaultItemId — 1-click Insta login vs flat acme-insta ?? guess monthly.

Retainer now self-describes: project scope, task progress, auto-billing, portal truth.

The Retainer Operating Rhythm

  • Monthly (day 1): Cron clones invoice draft → sent + sendReminderDigestEmail src/lib/emails/send.ts:469. You check Finance receivables src/app/api/sidebar/stats/route.ts:55 — pendingInvoices budget already covered.
  • Weekly (Monday): Filter projects status:active type:content src/lib/db/schema.ts:21 → retainer projects due <7d → set Today 2 work tasks from that project scheduledDate src/lib/db/schema.ts:248 + runDailyRollover src/lib/utils/task-rollover.ts:1. No weekly re-plan hunt.
  • Mid-cycle scope check: If tasks > 8 posts requested, log notes and trigger change-order → bump projects.budget + spawn invoices for overage. Named extras keep MRR clean.
  • Status update: Friday project.notes 3 bullets + task status move → portal auto-current.

Manual retainer = you remember monthly. Linked retainer = cron + FK remembers.

Mistakes That Kill Retention

Mistake 1: One project for infinite months.

Reusing Acme Retainer project without new deadline and recurringNextDate blurs month boundaries — August vs September tasks mixed. Create monthly project or rotate deadline/tasks per cycle; invoices.projectId keeps audit.

Mistake 2: Scope as vibe 8 posts-ish.

Text 8 posts in Notion can't enforce. Tasks queue 8 todo + priority forces overflow decision. Over-delivery feels kind, teaches client boundary is joke.

Mistake 3: Billing tied to delivery, not calendar.

Invoice when posts done makes late delivery double-penalize cash flow. recurringInterval:monthly on calendar protects MRR; delivery tracked via tasks done/total separately.

Sheets / Notion / HubSpot vs Linked RunoSO

Retainer momentSheets + Notion + HubSpot Deal + CalendarsRunoSO tenant_${id} 26 tables
Monthly invoiceCalendar ping → manual Sheet row → forget 3d → overdueinvoices recurringInterval monthly recurringNextDate + cron clone src/app/api/cron/daily/route.ts:275 auto
Scope 8 postsText property → hunt Trello cards countprojects + 8 tasks projectId fk totalTasks/doneTasks src/app/api/projects/route.ts:28 count truth
Payment nudgeYou forward DM friendly nudgecron sent→overdue src/lib/db/schema.ts:58 + notifications + digest src/lib/emails/send.ts:469 batch
Client Q What's done?Build report from 4 tabsportalTokens portal/[id] shows tasks done/total + invoices self-serve
Credential Insta login?Flat 1Password acme-insta 3x which?vaultItems clientId + assetsSocial vaultItemId 1-click masked src/app/api/vault/route.ts:25
Churn riskNotice month 3 after too much back-and-forthstatus active deadline <7d filter + notes boundary visible monthly

Recurring revenue demands recurring graph.

20-Minute Retainer Setup

  1. Create project Acme — Retainer Sep 2026 budget 40000 type content status active linked clientId.
  2. Add 11 tasks 8 posts + 2 updates + report — each dueDate weekly.
  3. Create invoice amount 40000 items jsonb 11 lines taxType none|GST + recurringInterval monthly recurringNextDate Oct 01 → status sent day 1.
  4. Generate portal → send portal/[token] with message: Progress + invoices live here, updated Fridays, due NET-7.
  5. Link vaultItems Instagram + Canva clientId → open dossier to confirm 1-click share next month.

Next month cron runs while you sleep. Retainer retained.


RunoSO automates retainer ops — recurring projects, linked tasks, recurringInterval invoices, and portal that shows clients what's done so they keep paying.

→ Automate Your Retainers — Try RunoSO Free


By Gautam Parmar src/app/(marketing)/about/page.tsx:44 — solo founder, Next.js 16 Tailwind v4 Neon Drizzle Razorpay Resend, building in public on X.


Keep Reading

  • Keep money flowing: invoice automation draft to paid.
  • Scope tight monthly: freelance scope creep stop free work.
  • Assets never expire mid-retainer: hosting renewal reminders.

FAQ

How do I price retainers without hourly trap? Price by outcome ₹40k for 8 posts + 2 updates + reporting as projects.budget numeric src/lib/db/schema.ts:35 + invoices items jsonb lines — not 20 hours. Link tasks to scope; extras bill as change-order invoices — value visible via portal.

What if client asks pause? Set projects status:on-hold src/lib/db/schema.ts:21, invoices recurringNextDate null, portal shows pause progress. Filter status on-hold monthly src/lib/db/schema-public.ts:70 usageCounters to win back — not forget.

Do I need retainer contracts? Yes — include Included/Excluded, revision cap, billing calendar NET-7, pause clause. Store in project.notes and portal visibility — contract lives where work lives, not Doc you hunt.

Try RunoSO for Free

Manage clients, invoices, vault, content, and finances — all from one beautiful dashboard.

Start free
Meet RunoSO
SaaS
Unified Workspace
Finance & Invoicing
Credentials Vault
Content Pipeline

Unified Workspace

The ultimate command center for solo operators. Replace Notion, Sheets, and password managers.

  • Unified client database
  • Real-time key metrics
  • Intuitive navigation
Start free todayLearn more about RunoSO

Featured Articles

Build in Public

Why I Ditched Notion & Sheets to Build RunoSO

7 min read
Technical Deep-Dive

How I Built a Zero-Knowledge Vault with AES-256

10 min read
Productivity

Best Freelance Tools in 2026 — Honest Stack Review

11 min read
View all posts
Meet RunoSO
SaaS
Unified Workspace
Finance & Invoicing
Credentials Vault
Content Pipeline

Unified Workspace

The ultimate command center for solo operators. Replace Notion, Sheets, and password managers.

  • Unified client database
  • Real-time key metrics
  • Intuitive navigation
Start free todayLearn more about RunoSO

Related Posts

Productivity

Worksuite vs RunoSO: Freelancer Management System India 2026

Worksuite vs RunoSO for India — enterprise FMS for 190+ countries vs solo freelance system with GST, UPI & vault linked. Compare pricing & vault India.

Productivity

Flinggle vs RunoSO: Freelance Management System India 2026

Flinggle vs RunoSO for India — compare GST, UPI, vault & pricing. Flinggle leads + proposals, RunoSO is GST + vault + assets linked India-native system.