{{ … }}
Email variables
Personalize the subject and message of your scheduled and recurring invoice emails with placeholders that resolve to real values — the send date, the billing period, the invoice number — at the moment each email goes out.
How to use them
- 1
Open Save & Schedule on an invoice (or edit a recurring rule under Settings → Automations). Variables work in the email subject and the email message.
- 2
Type {{ anywhere — an autocomplete dropdown appears with every variable. Keep typing to filter, then press Enter to insert. You can also write them by hand.
- 3
A live preview appears under the field showing exactly how your text resolves. Anything that can't be resolved is highlighted so you can fix a typo before it sends.
- 4
Hit Send test to email yourself the real thing — same template, same data, same rendering as the client's email.
Variable interpolation
A variable is a placeholder wrapped in double curly braces. When the email sends, each placeholder is replaced with the real value from the invoice — the client's name, the invoice number, the total. Type two opening braces in the subject or message and autocomplete lists everything available.
You write
Hello {{ client }}, invoice {{ invoice_number }} is attached.It sends as
Hello Acme Co, invoice 2026-0074 is attached.Dates and formatting
Date variables resolve at the moment the email sends. Add the date filter with a format string to control how they read, and shift them with add_days or add_months — useful for payment deadlines.
You write
Sent {{ today | date: "dddd, MMMM Do" }} — due {{ today | add_days: 14 | date: "MMM D, YYYY" }}.It sends as
Sent Sunday, June 14th — due Jun 28, 2026.Invoice number math
The add filter bumps the trailing number of your invoice number while keeping its prefix and zero-padding intact, and ordinal turns it into 1st / 2nd / 74th — handy for referencing this invoice or the next one in a series.
You write
Your {{ invoice_number | ordinal }} invoice ({{ invoice_number }}); the next is {{ invoice_number | add: 1 }}.It sends as
Your 74th invoice (2026-0074); the next is 2026-0075.Chaining filters
Filters run left to right, each transforming the result of the previous one. Here a date is shifted back a month, formatted, then upper-cased.
You write
{{ today | add_months: -1 | date: "MMMM YYYY" | upper }}It sends as
MAY 2026Putting it together
A recurring monthly invoice whose subject carries the invoice number as an ordinal and the billing window — written once, correct on every future send.
You write
{{ invoice_number | ordinal }} Monthly Invoice ({{ period_start | date: "MMM D, YYYY" }} – {{ period_end | date: "MMM D, YYYY" }})It sends as
74th Monthly Invoice (May 14, 2026 – Jun 14, 2026)Variables
Each variable resolves against the invoice being sent and the moment it sends.
| Variable | What it is | Example |
|---|---|---|
| {{ invoice_number }} | Invoice number | 2026-0074 |
| {{ client }} | Client (Bill To) name | Acme Co |
| {{ sender }} | Your (From) name | Jane Doe |
| {{ total }} | Invoice total | $5,000.00 |
| {{ doc_type }} | Document type | Invoice |
| {{ today }} | Send date | Jun 13, 2026 |
| {{ tomorrow }} | Day after the send | Jun 14, 2026 |
| {{ yesterday }} | Day before the send | Jun 12, 2026 |
| {{ issue_date }} | Invoice issue date | Jun 13, 2026 |
| {{ due_date }} | Invoice due date | Jun 30, 2026 |
| {{ period_start }} | Billing period start | May 14, 2026 |
| {{ period_end }} | Billing period end | Jun 13, 2026 |
Filters
Filters transform a value — chain them after a variable with the | character. Date formats use tokens: YYYY (2026), MMMM (June), MMM (Jun), MM (06), DD (13), D (13), Do (13th), dddd (Saturday).
| Filter | What it is | Example |
|---|---|---|
| | date: "MMMM D, YYYY" | format a date | June 13, 2026 |
| | add: 1 | add/subtract from a number | 2026-0075 |
| | add_days: 7 | shift a date by days | Jun 20, 2026 |
| | add_months: -1 | shift a date by months | May 13, 2026 |
| | ordinal | number → ordinal (74 → 74th, 2026-0074 → 74th) | 2026-0074 → 74th |
| | truncate: 20 | shorten long text | BitterBrains Intern… |
| | capitalize | capitalize the first letter | June |
Good to know
- Anything unknown is sent exactly as written — a typo like {{ cliennt }} stays visible instead of silently disappearing. The preview flags these in amber.
- period_start / period_end use the rule's real cadence window; on one-off sends they default to the month ending at the send.
- If the invoice is in Spanish, month and weekday names render in Spanish (junio, sábado) with day-first dates.
- Dates like {{ today }} resolve in your timezone — captured when you schedule — so a late-night send doesn't drift to the wrong day.