The spreadsheet works right up until it has to file something.
A sheet of clients and a Word invoice template will carry you a surprisingly long way. Where it stops is GSTR-1, a TDS credit you have to reconcile against 26AS, and an invoice series that has to stay consecutive across a whole financial year. Those are not formatting problems, so no amount of tidying the sheet fixes them.
Your sheet is already most of the way there.
You are not migrating a database. You are re-heading a list of columns you already maintain.
- Rename your headers
Match the template below, or do not bother — the importer recognises the usual spellings, and lists anything it cannot place before you commit rather than dropping it.
- File → Download → CSV
In Google Sheets: File → Download → Comma-separated values. In Excel: File → Save As → CSV UTF-8. Then Clients → Import and drop the file.
- Set your next invoice number
Settings → Invoicing. If your sheet is already up to invoice 47 this year, start at 48 — a financial year gets one consecutive series, not a fresh one per tool.
Only one is required.
Everything else is optional and can be filled in later. The template is a real file with three example rows — one GST-registered client, one without a GSTIN, and one export client — so the shape of each column is unambiguous.
| Your spreadsheet | HourSlip | Notes |
|---|---|---|
| name | Client name | The only required column. |
| Encrypted at rest once imported. | ||
| phone | Phone | |
| gstin | GSTIN | Leave blank for unregistered clients — that is a normal row, not an error. |
| state | State | Full name, 2-digit GST code, or a 2-letter code like MH. |
| city | City | |
| country | Country | Blank is treated as India. Anything else makes it an export client. |
| currency | Currency | Blank is treated as INR. |
| rate | Billing rate | Per hour, in the client’s currency. Optional. |
| notes | Notes | Free text, carried across as-is. |
Three things a spreadsheet lets you get away with.
None of these will stop your sheet from looking correct. They will stop a return from being correct, which is a much later and more expensive discovery.
CGST Rule 46(b) wants a consecutive serial, unique for the financial year, at most 16 characters and made only of letters, numerals, hyphen and slash. Sheets drift — a duplicated row, a manual renumber, a restart in April that was not meant to be one. Set the next number once and it stays consecutive on its own.
Whether a supply is CGST + SGST or IGST depends on the client's place of supply, not on a rate you typed into a cell. Getting that from the client's state, per invoice, is the difference between a GSTR-1 that reconciles and one that does not.
A client paying ₹90,000 against a ₹1,00,000 invoice has not underpaid — they have deducted ₹10,000 you can claim. Sheets usually record the ₹90,000 and lose the credit. It needs to sit against a section and reconcile with 26AS at the end of the year.
The sheet was never the point.
You did not want a spreadsheet. You wanted invoices that go out and a tax year that is not a weekend of archaeology.
GST split from place of supply, six PDF layouts, share link with UPI, and GSTR-1 / 3B exports that come out of the same records.
TDS across ten sections, 26AS reconciliation, advance-tax dates, old-vs-new regime and 44ADA — the parts a spreadsheet was never going to do.
The free plan sends real invoices with no branding on the PDF and no expiry clock. Why HourSlip →
Ten minutes, one CSV, and the invoice series stops being your problem.
Download the template, paste your list in, and import. If your sheet is a mess, bring it anyway — the preview shows exactly what will land before anything is saved.
Founding cohort: free Pro through beta. No card needed.