Manual
A quick tour of how InvoiceMe works. The core is just four things: invoices, credit notes, ledger reports and customer statements.
Demo data — the fastest way to learn InvoiceMe
The ledger, statements and reports only get interesting once there's data behind them. Rather than make you type in a company, clients, products and a spread of invoices first, InvoiceMe can build a worked example for you in one click.
What "Load demo data" creates: one fully branded sample company — Northwind Studio (demo) — populated through the exact same code as data you'd enter by hand:
- 4 clients (three South African, one UK client billed in GBP).
- 5 products & services with units and prices.
- 7 invoices spread on purpose across states so every screen has something to show — two paid, several outstanding dated to land in different aging buckets (Not due, 0–30, 31–60 and 91+ days), and one foreign-currency (GBP) invoice that exercises the FX consolidation on the ledger and reports.
- 1 credit note linked to a real invoice.
All dates are anchored relative to today, so the aging buckets stay meaningful whenever you load it.
How to use it:
- Load from the Dashboard or Companies page → Load demo data.
- Remove from the Companies page → Remove demo data. This deletes only the sample company and everything under it — companies you created yourself are never touched. (InvoiceMe records the IDs it generated and removes exactly those.)
The demo company is ordinary data: edit it, issue more documents, download its PDFs, or delete it by hand like any other. Loading and removing it are both recorded in the audit log. Think of it as a sandbox you can wipe and recreate in two clicks.
1 · Getting started
- Create a company from the dashboard. Defaults are tuned for South Africa: ZAR, en-ZA, 15% VAT, Cape Town, Western Cape.
- Issue an invoice. The form picker auto-fills clients and products you've already saved.
- Mark invoices as Paid when payment lands.
- Open the Ledger tab for a printable running balance, or Statements to send a client their own statement of account.
2 · Companies
Every record lives under a company. Each one has its own:
- Branding — logo, brand and accent colors used on every PDF.
- Tax rules — currency, locale, default VAT, payment terms.
- Numbering — independent invoice and credit note counters with custom prefixes.
- Banking — bank, account, branch code, SWIFT/BIC and optional IBAN, all printed in the PDF footer.
- Optional password — see the next section.
3 · Passwords (optional)
- Each company can carry an optional password. When set, every per-company page requires the passphrase before it loads.
- Passwords are hashed with scrypt before they touch the database. The unlock state lives in an HMAC-signed cookie that lasts 12 hours per browser.
- Set or change it in the company form's Access protection section. Tick Remove password protection when editing to clear it.
- The "Lock" button on the company page wipes that company from the cookie immediately.
4 · Invoices
- Click + New invoice on the company page.
- Pick an existing client or fill the bill-to fields manually.
- For each line, pick a product or write a custom description. Quantity and unit price recalc live.
- If you switch the currency away from the company default, a live FX rate appears with a one-click "Convert line items" button (powered by open.er-api.com, no API key required).
- Issue the invoice. The number is generated as PREFIX-YYYY-#### (e.g. INV-2026-0001). The FX rate at issue time is captured on the document.
- Mark the invoice as Paid when payment arrives — that removes it from the open balance on ledgers and statements.
5 · Credit notes
Credit notes work the same as invoices, with two differences:
- You can link one to the original invoice it relates to — the relation is shown on both records.
- All amounts are shown as negatives on screen and on the PDF, and credited totals are subtracted on the ledger and statements.
6 · Ledger reports
The ledger is a chronological journal of every invoice and credit note for a company, with a running outstanding balance.
- Each invoice is a debit (the customer owes more); each credit note is a credit (it reduces what they owe).
- Paid invoices are listed but they don't accrue to the outstanding balance — they're already settled.
- Filter the view by date range and / or a single client.
- Use Print to send it to a physical printer (the sidebar and nav drop out via a print stylesheet), or Download PDF for a landscape branded PDF.
- The four headline numbers — Invoiced · Credited · Paid · Outstanding — are also shown above the table.
7 · Customer statements
A statement is the same data, but cut by a single client and laid out for posting or emailing.
- Open Statements from the tab; pick a client to drill in.
- The statement shows: invoiced and credited totals, the current open balance, and an aging breakdown — Not due / 0–30 / 31–60 / 61–90 / 91+ days.
- Aging is computed from each invoice's due date (or issue date if no due date is set) relative to today in the display timezone.
- Filter by date range to produce a "for the month of …" statement.
- Download PDF renders a portrait branded statement on company letterhead, ready to send.
8 · Clients
Clients are managed per company. When you pick a client on a new invoice, their address and tax ID are copied onto that document — later edits to the client never change historical invoices.
9 · Products & services
- Set a default unit (hour, project, run…) and a unit price.
- Override the VAT rate only if the line is zero-rated or exempt; otherwise leave it blank to inherit the company default.
- Leave the SKU blank — it's auto-generated from the name plus the product ID, e.g. BRAN-0007.
10 · CSV imports
You can bulk-create clients, products, invoices or credit notes from a spreadsheet. Each list page has an Import CSV button that gives you a downloadable template with the right columns.
- Clients and Products imports create independent records.
- Invoices and Credit notes imports use one row per line item — group rows together with the same number and the importer treats them as a single document.
- Rows missing a name (or a product price, or a client name on documents) are skipped — the rest still import.
11 · PDF tips
- Logos render best as PNG or SVG with a transparent background, around 400 px wide.
- Set both brand and accent colors — every PDF (invoice, credit note, ledger, statement) uses a gradient between them on the header band and total badge.
- PDFs always render on white paper regardless of the screen theme.
- The PDF is regenerated on every request — edit a document and refresh.
12 · Localization & time
- The default South African profile is ZAR · en-ZA · 15% VAT · Cape Town · Western Cape. Each company can override its locale.
- Money renders as R 1 234,56 for ZAR and follows the company locale for any other currency.
- Time is anchored to GMT. The server runs in UTC; the UI converts to the display timezone (default Africa/Johannesburg, GMT+2) — visible in the sidebar footer.
- Override the display timezone with the APP_TZ environment variable.
13 · Database
- InvoiceMe runs on SQLite by default — a single file under DATA_DIR/invoiceme.db.
- To use PostgreSQL, either set DATABASE_URL (Railway) or open /setup and paste a connection URL.
- The env var wins. The setup screen writes to DATA_DIR/config.json and only applies when the env var is unset.
- The schema is created and migrated on first connect — no manual step.
- /healthz reports the active source and engine.
14 · Theme
- InvoiceMe ships in dark mode by default. The toggle in the sidebar flips between day and night and remembers the choice locally.
- An inline script applies the saved theme before the first paint, so there's no flash on reload.
- PDFs always render on white paper regardless of the screen theme.