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. Revenue Forecasting for Freelancers: Pipeline to Predictable Income
Finance

Revenue Forecasting for Freelancers: Pipeline to Predictable Income

By Gautam Parmar22 September 20268 min read
Revenue Forecasting for Freelancers: Pipeline to Predictable Income — featured image

You finish Mar ₹3.2L, Apr ₹1.1L — why? Pipeline 4 leads, 2 proposals felt strong. But sent ₹2.4L + overdue ₹85k Acme 21d, retainer USD 1500 missed because recurringNextDate not tracked, advance ₹30k not logged Project Advance. You see ₹1.1L, not ₹1.1L + ₹85k + ₹1.27L + ₹30k = ₹3.52L pipeline.

Forecasting isn't guess. It's sent + overdue + recurringNextDate + advance as graph.

Why Freelance Forecasts Fail

  • Sent = forgotten. invoices status sent src/lib/db/schema.ts:58 in Sheets Sent? YES — cron daily 30 3 * * * vercel.json:4 never flips sent→overdue src/app/api/cron/daily/route.ts:46 lt(dueDate, now) so ₹85k stays sent hope, not action.
  • Retainers as memory. USD 1500 monthly is Calendar repeat — forget Mar 5 → invoice Mar 12 late → Pay next cycle. recurringInterval monthly|quarterly|yearly src/lib/utils/recurring.ts:5 + recurringNextDate src/lib/db/schema.ts:81 should auto-clone; Sheets copies INV-014→015 dup → month lost.
  • Pipeline detached. clients status lead|active src/lib/db/schema.ts:5 + projects budget numeric src/lib/db/schema.ts:35 never sum to sent + recurring + budget×close%. Trello ₹1.2L 60% not linked to transactions.

Result: you react Apr low by cold outreach panic vs knowing ₹85k overdue collectable + ₹1.27L retainer due Apr 5 = ₹2.12L already before new sales.

The Linked Forecast Graph

clients(status lead|active)
  projects(clientId fk, budget numeric(12,2) src/lib/db/schema.ts:35, advance numeric src/lib/db/schema.ts:36, status active|on-hold|completed, deadline timestamp)
    invoices(clientId fk, projectId fk src/lib/db/schema.ts:66, amount numeric src/lib/db/schema.ts:69, status draft|sent|paid|overdue src/lib/db/schema.ts:58, issueDate timestamp src/lib/db/schema.ts:71, dueDate src/lib/db/schema.ts:72, recurringInterval varchar(20) src/lib/db/schema.ts:80, recurringNextDate timestamp src/lib/db/schema.ts:81, items jsonb)
    transactions(type income|expense, amount numeric src/lib/db/schema.ts:92, category Invoice Payment|Project Advance, date timestamp src/lib/db/schema.ts:96, invoiceId fk src/lib/db/schema.ts:98)
cron daily flips overdue + generates recurring draft src/app/api/cron/daily/route.ts:69 + nextRecurringDate() src/lib/utils/recurring.ts:5

Forecast = 4 buckets:

  1. Sent. GET /api/invoices src/app/api/invoices/route.ts:43 status sent → ₹2.4L due Apr 10-20.
  2. Overdue. status overdue lt(dueDate, now) src/app/api/cron/daily/route.ts:49 → ₹85k 12-21d. Cron notificationRows invoice_overdue src/app/api/cron/daily/route.ts:211 + digest src/app/api/cron/daily/route.ts:245 — follow up today.
  3. Recurring MRR. recurringInterval != none && lte(recurringNextDate, now) src/app/api/cron/daily/route.ts:69 clones draft — USD 1500 + 40k = ₹1.67L Apr MRR without new sales.
  4. Advances. transactions Project Advance src/app/api/transactions/route.ts:57 sum advance src/lib/db/schema.ts:36 ₹60k May — floor.

Apr forecast = Sent 2.4L×80% + Overdue 85k×70% + Recurring 1.67L + Advance 60k = ₹4.78L weighted.

3-Scenario Forecast Table

BucketApr amountConservative 60%Base 80%Optimistic 100%Why % varies
Sent ₹2.4L due Apr 152.4L1.44L1.92L2.40LdueDate +15 vs history paid 12d avg
Overdue ₹85k 12-21d85k42.5k59.5k85kAcme 21d needs call, not email
Recurring MRR USD1500+40k1.67L1.67L1.67L1.67LAuto nextRecurringDate +1mo certain if not churned
Project Advance May60k60k60k60kAlready transactions
Pipeline proposals ₹4L × 30%1.20L036k1.20Llead→active close rate
Total~₹6.12L gross₹4.13L₹5.14L₹6.12LBase 5.14L = hire/no-hire line

Update weekly via GET /api/transactions?startDate=&endDate= src/app/api/transactions/route.ts:88 + FinanceOverviewClient Recharts — Sheet Forecast!B2 guess replaced.

Excel vs QuickBooks vs FreshBooks vs RunoSO — Forecast

NeedExcel/SheetsQuickBooksFreshBooksRunoSO
Receivables statusText Sent manualAuto Sent/OverdueAuto`status draftsentpaidoverdue src/lib/db/schema.ts:58 + cron sent→overdue src/app/api/cron/daily/route.ts:46`
Recurring predictCopy row, forgetRecurring USRecurring`recurringInterval nonemonthlyquarterlyyearly src/lib/utils/recurring.ts:1 + recurringNextDate auto generates + emails sendInvoiceEmail src/app/api/cron/daily/route.ts:155`
Advance visibilityYES textNo Project AdvanceNosyncProjectAdvance src/app/api/transactions/route.ts:21 sums transactions Project Advance into projects advance
Auto compute=SUM breaksAutoAutoServer computedTotal src/app/api/invoices/route.ts:127 + numeric(12,2) tamper-proof
Pipeline linkDeals tab separateNo client→project→invoice graphNoclients→projects→invoices→transactions FK graph src/lib/db/schema.ts:25 queryable
CostFree + panic Apr₹1,200/mo₹1,500/moFree 5/mo src/lib/plans/limits.ts:28 → Solo ∞ finance_charts true

Excel forecasts hope; QuickBooks/FreshBooks auto overdue but not advance + recurringNextDate + project budget pipeline. RunoSO forecasts from linked graph.

Weekly Rhythm 15 Minutes

  • Mon: Check overdue ₹85k → call Acme 21d — notificationRows href /finance/invoices/[id] src/app/api/cron/daily/route.ts:216 tells which.
  • Wed: Verify recurringGenerated src/app/api/cron/daily/route.ts:266 — Apr 5 USD 1500 drafted draft→sent if emailedThisInvoice src/app/api/cron/daily/route.ts:173.
  • Fri: Update projects status active→completed — budget 140k moves pipeline→invoiced → accuracy ±5% in 4 weeks.

Mistakes That Wreck Predictability

Counting draft as forecast. invoices status draft src/lib/db/schema.ts:58 not sent — client hasn't seen. Forecast sent + overdue + recurring only; draft is pipeline 30%, not cash.

Ignoring dueGapMs preservation. Cron clones dueGapMs = dueDate - issueDate src/app/api/cron/daily/route.ts:92 → NET 15 preserved. Sheets copy Apr 5 issue Apr 5 due Apr 12 but original NET 30 → you expect Apr 20 but client pays May 5 — forecast 15 days off.

Not weighting overdue. ₹85k overdue 21d at 100% when Acme always pays 30d — weight 50%. Track invoice turnaround 12d avg vs Acme 28d outlier — forecast honest.


RunoSO turns pipeline into math — sent, overdue, recurringNextDate, advance linked — so next month's income is predicted, not prayed for.

→ Forecast Predictably — Try RunoSO Free


By Gautam Parmar — solo founder. Revenue that forecasts beats revenue that surprises.


Keep Reading

  • Keep overdue low: How to Chase Late Payments.
  • Retainer MRR: Recurring Invoices for Retainers.
  • Metrics: 8 Metrics Solo Businesses Must Track.

FAQ

How far to forecast as freelancer? 30d detailed sent+overdue+recurring + 90d pipeline×close%. recurring yearly src/lib/utils/recurring.ts:5 gives 12-mo MRR base; projects budget src/lib/db/schema.ts:35 give 90d weighted. Beyond 90d is guess.

What if client pays late always? Tag client payment behaviour in projects notes — weight overdue 50% not 80%. Cron sent→overdue src/app/api/cron/daily/route.ts:46 history trains your %. Acme 28d avg → forecast May 5 not Apr 15.

Can I see forecast vs actual? Yes — FinanceOverviewClient src/components/finance/FinanceOverviewClient.tsx income vs expense Recharts compares forecast base ₹5.14L logged vs transactions income Apr actual. Free finance_charts false src/lib/plans/limits.ts:42 vs Solo true src/lib/plans/limits.ts:59 — upgrade unlocks live.

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

Finance

How to Invoice International Clients from India Compliantly

Invoice international clients from India — LUT, FIRC, USD quote and IGST handling linked to transactions cleanly daily. Track in RunoSO with linked clients,.

Finance

Freelance Health Insurance & GST: What’s Deductible

Health insurance for freelancers — 80D, GST input and category mapping so premium doesn’t hide in misc expenses yearly. Track in RunoSO with linked clients,.