Quick Answer: A ₹2L client ghosted me after I delivered a working Laravel build. The 3-invoice rule saved the project: 40% before the first line of code, 30% at the staging milestone, and 30% before production access. I recovered ₹1.4L and kept the code because the contract made the repository mine until the final payment cleared.
Key Takeaways
- Advance is not a red flag: 40% upfront is standard for custom work. A client who refuses any advance is asking you to fund their project.
- Milestones need access control: Staging is a milestone, production is not. Keep the production deploy and the repository transfer behind the final invoice.
- Silence has a sequence: Day 3 reminder, day 7 pause, day 14 formal notice, day 30 final invoice. Do not improvise while you are angry.
- The contract matters more than the email: A written clause that says work stops and the license is revoked on non-payment is worth more than ten polite follow-ups.
The Build That Ghosted
In January 2026, a Surat-based founder asked for a custom order portal. The scope was clear: a Laravel 12 backend on an Nginx VPS, MySQL 8 with a 14-table schema, Redis queues, a Razorpay webhook, a customer portal, and an admin dashboard. The P95 deploy time target was under four minutes. I quoted ₹2,10,000 over six weeks.
The first invoice was ₹84,000. He paid in two days and replied to every message. The staging build went live in week four. I sent the second invoice for ₹63,000. He replied "processing" and then went silent for 19 days.
I had already spent 118 hours. The staging server was on my account, the repository was private, and the production deploy had not happened. That last detail is the only reason the story ends with a recovery instead of a write-off.
The 3-Invoice Rule
I now split every project above ₹1L into three invoices. The split is not arbitrary. It follows the three moments where the client has something they can see.
| Invoice | Trigger | Share | What the client gets |
|---|---|---|---|
| 1 | Signed scope | 40% | Discovery, architecture, repository access |
| 2 | Staging demo | 30% | Working build on a staging URL |
| 3 | Production handover | 30% | Deploy, domain, code ownership |
The staging demo is the key. It gives the client a real thing to review, which makes the second invoice easier to justify. It also gives you a natural pause if the payment does not arrive. You are not withholding work. You are holding the production deploy, which is the correct leverage point.
For projects under ₹1L, I use a 50/50 split. The overhead of three invoices is not worth it on a two-week build. For retainers, I invoice monthly in advance.
The Clauses That Made Recovery Possible
Three clauses did the work. I am not a lawyer, and you should have a local lawyer review your contract. These are the plain-language versions I use in India.
1. LICENSE AND OWNERSHIP
The client receives a non-exclusive license to use the delivered
code on the staging environment after Invoice 2 is paid. Full
ownership, including the repository and deployment credentials,
transfers only after Invoice 3 is paid in full.
2. SUSPENSION FOR NON-PAYMENT
If an invoice is unpaid 14 days after the due date, all work
suspends. If it remains unpaid 30 days after the due date, the
license in clause 1 is revoked and the client must stop using
the staging build.
3. DELIVERY ACCESS
Production deployment, DNS changes, and repository transfer are
performed only after the final invoice clears. The developer
retains administrative access until that point.
The staging license is the part most freelancers miss. Without it, the client can argue that the work was delivered and the payment is a separate dispute. With it, the staging build is a licensed preview, not a completed delivery.
The Recovery Sequence
I use a fixed sequence now. It removes the emotion from the follow-up and creates a record if the dispute goes to a lawyer.
flowchart TD
A[Invoice due] --> B{Paid?}
B -- Yes --> Z[Continue]
B -- No --> C[Day 3: polite reminder + invoice link]
C --> D{Paid?}
D -- No --> E[Day 7: pause non-critical work]
E --> F{Paid?}
F -- No --> G[Day 14: formal notice, cite clause 2]
G --> H{Paid?}
H -- No --> I[Day 30: revoke staging license]
I --> J[Offer a payment plan or close the project]
The day-3 reminder is one sentence and a link. The day-7 message states which work is paused. The day-14 notice cites the clause and the amount. The day-30 message is the final one before you decide whether to pursue the money.
In the Surat case, the day-14 notice produced a reply within six hours. The client had a cash-flow issue and was embarrassed to say so. We agreed to a two-part payment: ₹35,000 that week and ₹28,000 after the production deploy. I recovered ₹1.4L of the ₹2.1L total. The remaining ₹70,000 was the unpaid final invoice, which I wrote off after the client's company wound down.
What I Changed After That Project
I added a payment health check to my project tracker. It is a simple table in MySQL, not a CRM. The point is to see the aging before it becomes a crisis.
-- project_payments: one row per invoice
SELECT
project_id,
invoice_no,
amount_inr,
due_on,
paid_on,
DATEDIFF(CURDATE(), due_on) AS days_overdue
FROM project_payments
WHERE paid_on IS NULL
ORDER BY days_overdue DESC;
I also added a rule to my proposal template: no production credentials, no domain transfer, and no repository ownership until the final invoice clears. The rule is stated on page one, not buried in the annexure. Clients who object to it are telling me something useful before the build starts.
War Story: The Client Who Wanted the Code First
A Junagadh client asked for the full repository before paying the second invoice. He said his "technical advisor" needed to review it. I offered a screen-share review with the advisor and a read-only staging URL. He declined and asked again for the repository.
I did not send it. Two weeks later, I learned he had approached another developer with the staging URL and asked for a "similar build at half the price". The staging license clause was the only thing that stopped him from using my work as a free spec.
That is not a story about distrust. It is a story about incentives. A client with a cash-flow problem and a cheaper developer in the wings has a reason to ask for the code early. A contract that makes the handover conditional protects both sides from a bad decision.
When NOT to Use the 3-Invoice Rule
Do not use three invoices for a ₹25,000 landing page. The admin overhead is higher than the risk. Use a 50% advance and a 50% delivery invoice.
Do not use it for a client with a procurement department that pays on a 60-day cycle. You will spend more time chasing invoices than building. Add a late fee or require a purchase order before you start.
Do not use it for a retainer where the client pays monthly in advance. The retainer already has the right cash-flow shape. Adding milestone invoices creates confusion.
Do not use the clause to punish a client who is communicating but slow. The sequence is for silence and non-payment, not for a client who is waiting on their own customer to pay. Use judgment.
FAQ
Frequently Asked Questions
How much advance should I take for a freelance project in India?
Take 40% for custom projects above ₹1L and 50% for smaller builds. The advance covers discovery and the first build phase, so you are not financing the client's project. A client who refuses any advance is a credit risk, not a bargain.
What should I do if a client ghosts after delivery?
Send a day-3 reminder with the invoice link, pause non-critical work on day 7, send a formal notice citing your suspension clause on day 14, and revoke the staging license on day 30. Keep every message in writing and offer a payment plan before closing the project.
Can I keep the code if the client does not pay?
Only if your contract says ownership transfers on final payment and the client has a limited staging license until then. Without that clause, the client can argue the work was delivered. Have a local lawyer review the wording before you rely on it.
How do I recover a late payment from an Indian client?
Start with a written sequence, then offer a two-part plan. If the amount is above ₹50,000 and the client is unresponsive, a lawyer's demand notice is usually enough. For smaller amounts, the time and legal cost often exceed the recovery, so prevent the problem with an advance and milestone billing.
Bottom Line
The 3-invoice rule is not about distrust. It is about making the handover a decision instead of an assumption. Advance, staging, production. Three moments, three payments, one clean exit if the client disappears. If you want the pricing logic behind the numbers, read why I quote ₹55K websites in Junagadh, then the scope-creep clause and the ₹10L month ledger. If a client is ghosting you right now, send me the timeline and I will tell you which message to send next.