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. Invoice Automation: From Draft to Paid Without Spreadsheets
Finance

Invoice Automation: From Draft to Paid Without Spreadsheets

By Gautam Parmar3 September 20268 min read
Invoice Automation: From Draft to Paid Without Spreadsheets — featured image

You finish work Friday. You need to invoice.

You open a Google Doc, copy INV-12, type INV-13, fix dates, calculate 18% GST, split 9+9 CGST/SGST or 18 IGST — hope state is right — export PDF, open Gmail, attach, type client email, remember bank details, send, then update a sheet Status: Sent, then set a phone reminder to follow up in 10 days.

25 minutes. For one invoice. You do 8 a month. That's 3.5 hours of admin that doesn't bill.

Freelancers don't lose money on rates. They lose it on time-to-cash.

Why Sheets + Docs Make You Wait 19 Days

Average freelance invoice is paid in 19-45 days. Every manual step adds friction that delays Sent and hides Overdue:

  • Copy-paste numbering: INV-12 → INV-13 breaks when you delete INV-9. FY sequential GOS/25-26/001 src/templates/freelance-invoice-template fails. CA rejects it.
  • GST math: taxRate 18 taxType:cgst_sgst vs igst src/app/api/invoices/route.ts:60 — intra-state 9+9 vs inter-state 18 src/lib/blog/posts.ts:140 07-simplifying... You calculate manually, you err, client disputes, payment slips 7 days.
  • Status amnesia: Sheet cell Sent stays Sent after due date passes. No sent→overdue flip src/app/api/cron/daily/route.ts:69 — you forget to follow up until client is 22 days late.
  • No portal: Client loses PDF in inbox, asks "resend invoice?" — you dig Drive, resend, 2 days lost.

Manual invoicing is not cheap. It's pre-tax work with post-tax risk.

The Automated Graph: Draft → Sent → Paid in One System

In RunoSO tenant_${id}, invoices src/lib/db/schema.ts:60 is not a doc — it's a row linked to clients + projects + transactions:

Draft in 60 seconds POST /api/invoices/route.ts:84:

  • Pick clientId → auto-fills GSTIN, state, address from settings src/app/(dashboard)/settings/page.tsx
  • Add items: {description, quantity, rate, amount}[] jsonb src/lib/db/schema.ts:70 — no line calc
  • Server recomputes total = subtotal - discount + tax src/app/api/invoices/route.ts:118 — prevents tampering, ensures taxType gated by plan:gst src/lib/plans/gate.ts:31
  • invoiceNumber auto FY sequential, recurringInterval:none|monthly|quarterly|yearly src/lib/utils/recurring.ts:5 → recurringNextDate 2026-09-01→2026-10-01

Sent in one click POST /api/invoices/[id]/send:

  • Generates PDF jsPDF+html2canvas README.md:42, emails sendInvoiceEmail src/lib/emails/send.ts:347 with items table + portalUrl + bank/IFSC — no Gmail tab
  • Flips status draft→sent, creates notifications row type:invoice_overdue if later overdue

Paid without touching sheet POST /api/transactions/route.ts:131:

  • When client pays, syncInvoicePaidStatus src/app/api/transactions/route.ts:21 checks Invoice Payment transaction → auto flips invoices.status sent→paid + updates FinanceOverviewClient Recharts live
  • Cron daily src/app/api/cron/daily/route.ts:69 flips sent→overdue where dueDate < now, creates notifications + digest sendReminderDigestEmail src/lib/emails/send.ts:469 — you get ping, not silent cell

Portal closes the loop: portalTokens src/lib/db/schema-public.ts:169 → GET /portal/[id] lets client view/download invoice without login — revoke revokedAt anytime. No "resend PDF".

Mistakes That Delay Cash

1. Numbering in sheets. INV-12 free text breaks FY audit. Use invoices.invoiceNumber unique src/lib/db/schema.ts:62 sequential filtered createdAt >= startOfMonth src/app/api/invoices/route.ts:92 + plan limit invoices_per_month 5 free → ∞ solo src/lib/plans/limits.ts:28.

2. Tax as text. Typing IGST 18% manually ignores client.state vs yours. Let taxType drive CGST+SGST vs IGST split — compliance, not calculation.

3. Recurring as reminder. Setting phone reminder Monthly retainer Jan 5 misses Feb if sick. Use recurringInterval:monthly → cron clones due invoice preserving due gap src/app/api/cron/daily/route.ts:190 + incrementUsageCounter src/lib/plans/limits.ts:193 atomic tx.

4. No portal. Emailing PDFs loses them. Portal link in sendInvoiceEmail survives inbox search forever.

60-Second Invoice Workflow

  1. New → Client → items Homepage: 40h × ₹1500 → discount 10% → taxType igst 18 → preview total auto ₹64,800.
  2. Save draft → invoiceNumber GOS/26-27/015 FY auto, status draft linked projectId.
  3. Send → status sent → email with PDF + portal link https://www.runoso.in/portal/<token> → client opens without login.
  4. Track → Finance → Invoices InvoicesListClient shows Sent 2 Overdue 1 + TransactionsListClient sync — no sheet.

That's 25 min → 60 sec × 8 invoices = 3 hrs back to bill.

Sheets vs RunoSO Invoicing

Sheets + DocsRunoSO src/app/api/invoices/route.ts:181
Copy INV-12 manual, breaks FYinvoiceNumber unique FY sequential auto
Calc 9+9 manualServer subtotal-discount+tax recompute + checkPlanLimit
Status cell Sent stalecron sent→overdue + notifications
Attach Gmail, lose PDFjsPDF + portalTokens share link
Recurring = phone reminderrecurringNextDate + cron clone tx

You are not buying an invoice tool. You are buying 19 days → 7 days time-to-cash.


RunoSO automates your freelance finance graph — invoices draft→sent→paid linked to clients, projects, transactions, portal, cron — in one dashboard. Stop copy-pasting. Start getting paid.

→ Generate 5 Free Invoices — GST Ready


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


Keep Reading

  • GST deep dive: simplifying gst invoicing indian freelancers.
  • Track profit: track income without spreadsheets.
  • Ops hub: freelance operations hub single dashboard.

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,.