Introduction
You can personalise your document templates by using variables that automatically populate with information from your Ledgy account. Variables are placeholders like {stakeholder.name} or {amount} that get replaced with actual data when you generate documents.
What you can do with variables:
Automatically insert stakeholder details, transaction information, and vesting schedules
Create consistent, error-free documents without manual data entry
Customise templates for different document types like grant/exercise/termination letter, holding confirmations and share certificates
Important to know: Not all variables work with every document template. The variables available depend on your document type.
Below, you'll find all available variables organised by category, with examples showing exactly how to use them in your templates.
Tip: You can view the full list of variables and their descriptions by navigating to Reporting > Operational > Transactions, then clicking Table columns in the top-right corner.
Or simply head to: https://app.ledgy.com/"your_company_ID"/data-fields
General variables
Variable | Example | Description |
{today} | 18 Mar 2020 | Date of today |
{currency} | EUR | Transaction's currency |
Stakeholder variables
Variable | Example | Description |
{stakeholder.name} | Elon Must | Stakeholder's name as inserted on Ledgy |
{stakeholder.email} |
| |
{stakeholder.nationality} | US |
|
{stakeholder.birthdate} | 28 Jun 1971 |
|
{stakeholder.notes} |
| Stakeholder's Internal Notes |
{stakeholder.address.line1} | Rocket Road 1 |
|
{stakeholder.address.line2} | c/o SpaceX Corp. |
|
{stakeholder.address.postcode} | 9808 |
|
{stakeholder.address.city} | Hawthorne |
|
{stakeholder.address.country} | India |
|
{stakeholder.identifier} | EM-1234 |
|
{stakeholder.personalEmail} |
|
Usage
Stakeholder variables can be used wherever a stakeholder is involved.
The base prefix is "stakeholder". When adding variables to your template document, you may reference any of the sub-fields of the stakeholder, e.g. {stakeholder.name}, {stakeholder.email}, etc., as shown in the example below.
On Transfer templates, the transfer prefix is "fromStakeholder". E.g. {fromStakeholder.name} is the variable to denote the stakeholder from which the transfer originates.
One quick way to view and edit stakeholder properties is using Bulk Import and Edit (Stakeholders > "Bulk" button at the top bar). The easy-edit spreadsheet is designed to make adding, updating and checking stakeholder information effortlessly.
In the event that a template variable is used, but the stakeholder information is missing, we have also added a template validation feature that checks for misspelled variables or missing inputs in transactions before the document is created.
Stakeholder beneficiary variables
A beneficiary refers to the economic beneficiary of a transaction and first needs to be added to Ledgy as a stakeholder. At each individual transaction level, a stakeholder beneficiary can then be designated. This will then also reflect in the Usage column on the Stakeholder page.
The stakeholder beneficiary's personal details can also be retrieved during the templating workflow.
The base prefix is ''beneficiary". Similarly to the stakeholder variables, combine the prefix with any of the beneficiary's sub-fields e.g. {beneficiary.name}, {beneficiary.identifier} and {beneficiary.address.postcode}, and custom fields.
See the guidance on Custom stakeholder variables for more details.
Variable | Example | Description |
{beneficiary.name} | Elon Must | Stakeholder's name as inserted on Ledgy |
{beneficiary.email} |
| |
{beneficiary.nationality} | US |
|
{beneficiary.birthdate} | 28 Jun 1971 |
|
{beneficiary.notes} |
| Stakeholder's Internal Notes |
{beneficiary.address.line1} | Rocket Road 1 |
|
{beneficiary.address.line2} | c/o SpaceX Corp. |
|
{beneficiary.address.postcode} | 9808 |
|
{beneficiary.address.city} | Hawthorne |
|
{beneficiary.address.country} | India |
|
{beneficiary.identifier} | EM-1234 |
|
Option, warrant, and phantom grant variables
Variable | Example | Description |
| Follow the link to see the available stakeholder variables that can be used | |
| Follow the link to see the available vesting variables that can be used | |
{amount} or {granted} | 10,000 | The number of grants being granted |
{sharePrice} | 2.00 | Grant's purchase price (price to pay per each of the grants to receive them - usually applicable for Warrants) |
{totalSharePrice} | 20'000 | The amount to be paid by the stakeholder to receive all their grants |
{strikePrice} | 3.1415926535 | Grant's strike/exercise price (price to pay per each of the grants to exercise them - usually applicable for Options and Warrants |
{totalStrikePrice} | 31,415.926535 | The amount to be paid by the stakeholder to exercise all their grants in the future |
{date} | 12 Jul 2024 | Date of the grant |
{expiryDate} | 12 Jul 2030 |
|
{notes} | Grant transaction's internal note | |
{investment} | 20,000.00 | The amount payable by the stakeholder to receive the grants |
{dilutedShareCapital} | 100.00 | = number of grants issued * nominal value per grant |
{dilutedGranted} | 100 | The number of diluted grants being granted |
Vesting variables
Variable | Applicable Vesting Type | Example | Description |
{vesting.startDate} | simple + custom | 1 Jul 2020 |
|
{vesting.duration} | simple | 48 | Vesting duration in months |
{vesting.interval} | simple | 1 | Vesting interval in months |
{vesting.cliff} | simple | 12 | Vesting cliff in months |
{vesting.type} | All |
| Type of trigger(s) that vesting is contingent on. |
{vesting.accelerateVestingDate} | simple + custom | 31 Dec 2028 | Accelerated vesting date when all grants or shares fully vest. |
{vesting.schedule} | custom | 12 months/3 steps | X months / Y steps |
{vesting.vestingOn} | simple | 31 Mar 2027 | Possible values: Start date, grant date, first day of the month, last day of the month |
{vesting.rounding} | All |
| Adjusts partial vesting to the nearest whole share. |
{vesting.lastDayOfVesting} | All | 1 July 2025 | The last day of a vesting schedule marks the end of the predetermined vesting timeline. |
Usage
Vesting variables can be used wherever vesting or reverse vesting can be added. You may reference any of the sub-fields of the vesting, e.g. {vesting.duration}, {vesting.cliff}, etc., as shown in the example below. Currently, templating only supports simple vesting schedules.
Vesting variables (Performance conditions specific)
Variable | Applicable Vesting Type | Example | Meaning |
{#vesting.performanceCondition}{name} | Performance condition(s) | MRR 10M | Shows the name(s) of performance condition(s) defined |
{weight}{/vesting.performanceCondition} | Performance condition(s) | 50 | Percentage of grant to be vested if corresponding performance condition is achieved. |
Sample use of above in template:
Performance Conditions | % of grant |
{#vesting.performanceCondition}{name} | {weight}{/vesting.performanceCondition} |
Sample output of above in template:
If a single performance condition exists, the output looks like the one below.
Performance Conditions | % of grant |
MRR 10M | 100 |
If more performance conditions exist, then the output can look like the following.
Performance Conditions | % of grant |
MRR 10M | 75 |
MRR 12M | 25 |
Vesting variables (Custom schedule vesting periods)
Variable | Applicable Vesting Type | Example | Description |
{#vesting.period}{number} | Custom | 1 | Vesting period number |
{duration} | Custom | 12 | Duration of vesting period |
{interval} | Custom | 1 | Vesting period interval |
{weight}{/vesting.period} | Custom | 50 | Percentage of grant to be vested during corresponding vesting period. |
Sample use of above in template:
Vesting Period | Vesting Duration | Vesting Interval (in months) | % of grant |
{#vesting.period}{number} | {duration} | {interval} | {weight}{/vesting.period} |
Sample output of above in template:
Vesting Period | Vesting Duration | Vesting Interval (in months) | % of grant |
1 | 12 | 12 | 5 |
2 | 12 | 12 | 15 |
3 | 12 | 6 | 40 |
4 | 12 | 6 | 40 |
Vesting variables (Milestones + Multi-trigger)
Variable | Applicable Vesting Type | Example | Meaning |
{#vesting.performanceCondition}{name} | Milestones with multi-tigger Performance condition(s) | MRR 10M | Shows the name(s) of performance condition(s) defined |
{weight}{/vesting.performanceCondition} | Milestones with multi-tigger Performance condition(s) | 50 | Percentage of grant to be vested if corresponding performance condition is achieved. |
{#vesting.triggers}{name}{/vesting.triggers} | Milestones with multi-tigger
| Exit event | Shows the name(s) of performance condition(s) defined as additional trigger(s) |
{vesting.trigger} |
|
| Short cut for a single trigger |
Sample use of above in template:
Performance Conditions | % of grant |
{#vesting.performanceCondition}{name} | {weight}{/vesting.performanceCondition} |
Additional triggers |
{#vesting.triggers}{name}{/vesting.triggers} |
Sample output of above in template:
Performance Conditions | % of grant |
MRR 10M | 75 |
MRR 12M | 25 |
Additional triggers |
Exit event |
Vesting variables (Simple Time + Multi-trigger)
Variable | Applicable Vesting Type | Example | Meaning |
{vesting.startDate} | Time with multi-trigger | 1 Jul 2020 |
|
{vesting.duration} | Time with multi-trigger | 48 | Vesting duration in months |
{vesting.interval} | Time with multi-trigger | 1 | Vesting interval in months |
{vesting.cliff} | Time with multi-trigger | 12 | Vesting cliff in months |
{vesting.trigger} | Time with multi-trigger | Exit event | Shows the name of the single performance condition defined as an additional trigger |
Sample use of above in template:
Vesting Start Date | Vesting Duration | Vesting Interval | Vesting Cliff |
{vesting.startDate} | {vesting.duration} | {vesting.interval} | {vesting.cliff} |
Additional triggers |
{#vesting.triggers}{name}{/vesting.triggers} |
Sample output of above in template:
Vesting Start Date | Vesting Duration | Vesting Interval | Vesting Cliff |
Jan 1, 2023 | 48 | 1 | 12 |
Additional triggers |
Exit event |
Vesting variables (Custom + Multi-trigger)
Variable | Applicable Vesting Type | Example | Meaning |
{#vesting.period}{number} | Time with multi-trigger | 1 | Vesting period number |
{duration} | Time with multi-trigger | 48 | Duration of vesting period |
{interval} | Time with multi-trigger | 1 | Vesting period interval |
{weight}{/vesting.period} | Time with multi-trigger | 20% | Percentage of grant to be vested during vesting period. |
Sample use of above in template:
Vesting Period | Vesting Duration | Vesting Interval (in months) | % of grant |
{#vesting.period}{number} | {duration} | {interval} | {weight}{/vesting.period} |
Additional triggers |
{#vesting.triggers}{name}{/vesting.triggers} |
Vesting variables (Supporting tranches)
Variable | Applicable Vesting Type | Example | Meaning |
{#vesting.tranche}{number} | Simple + custom | 1 | Vesting tranche number |
{date} | Simple + custom | 1 Jan 2023 | Vesting date when the tranche ends. |
{amount}{/vesting.tranche} | Simple + custom | 100 | Amount to be vested during the tranche. |
Sample use of above in template:
Vesting Tranche | Date | To be vested amount |
{#vesting.tranche}{number} | {date} | {amount}{/vesting.tranche} |
Sample output of above in template:
Vesting Tranche | Date | To be vested amount |
1 | 31/03/2024 | 50 |
2 | 31/12/2024 | 50 |
Dynamic transaction variables
Variable | Description |
{automation:updateGrantDateFromSignature} | The grant date is automatically updated in the app when fully signed by all associated parties |
{automation:finalSignedDate} | The variable will update to show the final signatory date when fully signed by all associated parties.
Example: 12 Nov 2023
N.b. this variable only applies for Ledgy signatures (where signatory provider is Ledgy). |
**Final Signatory Date: | The variable will be appended with the final signatory date when fully signed by all associated parties.
Example: **Final Signatory Date: 10.19.23
(Tip: use a light colour for the variable text as this will also appear on the document. To prevent the text from showing on the document, use the same colour as the document background.)
N.b. this variable only applies for DocuSign signatures (where signatory provider is DocuSign). Learn more about DocuSign signatures here. |
Equity settlement variables (when exercising to settle)
General equity settlement variables
Variable | Example | Description |
|
| |
{amount} or {exercised} | 10,000 | Amount of grants being exercised/settled |
{date} | 1 Oct 2022 | Date of the settlement |
{sharePrice} | 3.1415926535 | Strike/exercise price |
{investment} | 17'671.46 | Amount payable by the stakeholder to exercise the grants = strike price * amount |
{class} | Common | Share class of settled shares |
{notes} | Transaction's internal note | |
{shareCapital} | 56.25 | = number of shares issued * nominal value per share |
{dilutedExercised} | 100 | The number of units exercised and settled on a fully diluted basis |
Variables relating to the original grant, that is being exercised and settled
Variable | Example | Description |
{grant.amount} or {grant.granted} | 10,000 | Total original grant amount |
{grant.strikePrice} | 3.1415926535 | Grant's strike/exercise price |
{grant.investment} | 20,000.00 | Original grant investment amount (= purchase price * granted amount) |
{grant.date} | 12 Jul 2024 | Original grant date |
{grant.expiryDate} | 12 Jul 2030 |
|
{grant.notes} | Original grant transaction's internal notes | |
{grant.dilutedShareCapital} | 100.00 | Original grant's diluted share capital (= number of grants granted * nominal value per grant) |
{grant.vesting.startDate} | 1 Jul 2024 |
|
{grant.vesting.duration} | 48 |
|
{grant.vesting.interval} | 1 |
|
{grant.vesting.cliff} | 12 |
|
Termination variables
Variable | Example | Description |
|
| |
{date} | 23 Oct 2025 | Date of the termination |
{amount} | 1,500 | Amount of grants terminated |
|
|
Share issuance variables
Variable | Example | Description |
|
| |
| For reverse vesting | |
{amount} or {issued} | 1,500 | Amount of shares issued |
{sharePrice} | 1.55 | Shares' issue price |
{investment} | 2,325.00 | = sharePrice * amount |
{class} | Common | Share class issued |
{date} | 3 Feb 2024 | Date of the share issuance |
{notes} | Share issuance transaction's internal note | |
{shareCapital} | 15 | = number of shares issued * nominal value per share |
{stakeholderCertificateId} | PA-123 | Certificate Id for increase transactions (e.g. increase shares, exercise and a stock grant from authorized capital) |
{fromStakeholderCertificateId} | PA-456 | Certificate Id for transfer transactions (e.g. transfer, exercise and a stock grant from reserved shares) |
Share certificates
Variable | Example | Description |
|
| |
{date} | 23 Oct 2025 | Date of the share certificate |
{amount} | 1,500 | Amount of shares issued |
{class} | Common | Share class issued |
{stakeholderCertificateId} | PA-123 | Certificate Id for increase transactions (e.g. increase shares, exercise and a stock grant from authorized capital) |
Holding Confirmations / Payroll Statements
Global variables for holding confirmations
You can use these global variables anywhere in your holding confirmation templates. These variables don't need to be inside tables and provide summary or general information.
Date and currency variables
Variable | Example | Description |
{today} | Oct 24, 2025 | Today's date (automatically updates) |
{date} | Sep 30, 2025 | The date you select in the form when generating the document |
{currency} | EUR | The company's default currency from your settings |
Stakeholder summary variables
Variable | Example | Description |
{stakeholder.stockVested} | 2,500 | Total number of vested shares the stakeholder holds |
{stakeholder.stockValue} | 45,000.00 | Total value of all shares the stakeholder holds |
{stakeholder.ownershipPercentage} | 2.5% | Stakeholder's ownership percentage in the company |
Additional stakeholder variables: You can also use standard stakeholder variables (like name, address, email) and custom stakeholder fields anywhere in your template. See the Stakeholder variables and Custom stakeholder variables sections for complete lists.
Conditional display variables for holding confirmations
What are conditional display variables?
Conditional display variables let you show or hide entire sections of your document based on whether a stakeholder has specific holdings. This is particularly useful for holding confirmation documents where you want to display only the relevant sections for each stakeholder.
How conditional display variables work
You use opening and closing tags to wrap content that should only appear if certain conditions are met. Content between these tags will only show up in the generated document if the stakeholder has the specified holdings.
Structure:
Opening tag:
{#stakeholder.hasStocks}(starts the conditional section)Content: Tables, text, or any information you want to display conditionally
Closing tag:
{/}(ends the conditional section)
If the stakeholder doesn't have any stocks, everything between the opening and closing tags will be hidden from the document.
Available conditional display variables
Variable | Closing Tag | Description | When to use |
{#stakeholder.hasStocks} | {/} | Shows content only if the stakeholder holds shares | Use in holding confirmations to display share holdings table and related information |
{#stakeholder.hasGrants} | {/} | Shows content only if the stakeholder has active grants (options, warrants, or phantoms) | Use in holding confirmations to display grant holdings table and related information |
{#stakeholder.hasConvertibles} | {/} | Shows content only if the stakeholder holds convertible loans | Use in holding confirmations to display convertible loan holdings and related information |
{#stakeholder.hasSettlements} | {/} | Shows content only if the stakeholder has exercised/settled grants | Use in holding confirmations to display settlement history and related information |
Example usage
Let's say you want to create a holding confirmation that shows different sections based on what each stakeholder holds.
In your template document:
Your Share Holdings
{#stakeholder.hasStocks} You currently hold the following shares:
[Insert shares table here]
{/}
{#stakeholder.hasGrants} You currently hold the following grants:
[Insert grants table here]
{/}
What stakeholders will see:
Stakeholder with shares only: They'll see the "Your Share Holdings" section with their shares table, but not the grants section
Stakeholder with grants only: They'll see the grants section, but not the shares section
Stakeholder with both: They'll see both sections
Stakeholder with neither: Neither section will appear in their document
Creating tables with repeating rows
To display all of a stakeholder's holdings in a table, you need to use repeating row variables. These variables tell Ledgy to create a new table row for each holding the stakeholder has.
How repeating row variables work
Repeating row variables work differently from conditional display variables:
Conditional variables (
{#stakeholder.hasStocks}...{/}) control whether an entire section appears or notRepeating row variables (
{#stakeholder.stocks}...{/stakeholder.stocks}) create multiple rows in a table, one for each holding
How to set up repeating rows:
Create a table in your document template
In the first column of the table row you want to repeat, add the opening loop variable
Add your data variables in the columns (like
{class},{amount}, etc.)In the last column of the same row, add the closing loop variable
Ledgy will automatically create one row for each holding, filling in the data for each one.
Available repeating row variables
Opening Variable | Closing Variable | Description | Use case |
{#stakeholder.stocks} | {/stakeholder.stocks} | Creates a row for each share holding | Use in holding confirmations to list all shares the stakeholder holds |
{#stakeholder.grants} | {/stakeholder.grants} | Creates a row for each grant holding | Use in holding confirmations to list all grants (options, warrants, phantoms) |
{#stakeholder.convertibles} | {/stakeholder.convertibles} | Creates a row for each convertible loan | Use in holding confirmations to list all convertible loans |
{#stakeholder.settlements} | {/stakeholder.settlements} | Creates a row for each settlement transaction | Use in holding confirmations to show exercise/settlement history |
Variables you can use inside repeating rows
Once you've set up repeating rows, you can use specific variables in each column to display details about each holding:
Inside {#stakeholder.stocks}...{/stakeholder.stocks}
Variable | Example | Description |
{issued} | 1,000 | Number of shares issued to the stakeholder |
{investment} | 15,000.00 | Total investment amount paid for these shares |
{stockValue} | 25,000.00 | Current value of the shares |
{class} | Common | Share class name (e.g., Common, Preferred A) |
{nominalSharePrice} | 0.01 | Nominal or par value per share |
{shareCapital} | 10.00 | Total share capital (number of shares × nominal value) |
{dilutedShareCapital} | 10.00 | Share capital on a fully diluted basis |
Inside {#stakeholder.convertibles}...{/stakeholder.convertibles}
Variable | Example | Description |
{date} | 10 March 2023 | Date when the convertible loan was issued |
{investment} | 100,000.00 | Principal amount of the convertible loan |
{cap} | 5,000,000 | Valuation cap for conversion |
{discount} | 20% | Discount rate applied at conversion |
{interest} | 5% | Annual interest rate on the loan |
Inside {#stakeholder.grants}...{/stakeholder.grants}
Variable | Example | Description |
{date} | 15 Jan 2025 | Date when the grant was issued |
{grantType} | Option | Type of grant (e.g., Stock Option, Warrant, Phantom) |
{granted} | 5,000 | Total number of grants originally awarded |
{outstanding} | 2,000 | Number of grants that remain outstanding (not yet exercised or terminated) |
{strikePrice} | 0.02 | Exercise price per grant (price to pay to convert to shares) |
{vesting.startDate} | 18 Feb 2025 | Date when the grant starts to vest |
{vesting} | 48 / 1 / 12 | Vesting schedule summary |
Inside {#stakeholder.settlements}...{/stakeholder.settlements}
Variable | Example | Description |
{date} | 18 Aug 2025 | Date of the equity settlement |
{grantDate} | 15 June 2024 | Date of the original grant that was exercised |
{exercised} | 1,000 | Number of grants that were exercised/settled |
{fmvAtExercise} | 8.50 | Fair market value per share at the time of exercise |
{exercisePrice} | 2.50 | Strike price paid to exercise the grants |
{totalFmvAtExercise} | 8,500.00 | Total fair market value at exercise (exercised amount × FMV) |
{totalGainLoss} | 6,000.00 | Total taxable gain from the exercise ((FMV - strike price) × exercised amount) |
Employment-related stakeholder fields that can be used as variables
Variable |
{stakeholder.employment.employmentStatus} |
{stakeholder.employment.employmentType} |
{stakeholder.employment.jobTitle} |
{stakeholder.employment.manager} |
{stakeholder.employment.payCurrency} |
{stakeholder.employment.payPeriod} |
{stakeholder.employment.payRate} |
{stakeholder.employment.startDate} |
{stakeholder.employment.team} |
{stakeholder.employment.terminationDate} |
{stakeholder.employment.workCity} |
{stakeholder.employment.workCountry} |
Custom variables
Would you like to have other customizable information in the document, and the variable is unavailable for replacement on Ledgy in the list above? Below you may find two alternatives to insert further custom information in your templates.
Transaction notes
Ledgy has all the usual variables needed for document templates, but sometimes there could be a small difference between some companies to others. For such cases, there is a workaround:
An existing variable is {notes}, and it retrieves the information present in the Internal note section of the transaction on Ledgy. If you have a variable that you would like to use on the document template, but that variable is not available within Ledgy's standard variables, you can input the value of the variable in the transaction's Internal Notes, and use the variable {notes} to retrieve it in the document. For example, if you would like to input the amount of money paid when exercising a particular transaction, you can write that number in the transaction's Internal Note and use the variable {notes} in the document where you would like the variable to be replaced.
Custom stakeholder variables
Additionally, it is also possible to use the Stakeholder custom fields as variables in document templates.
Follow the structure below to enter the information in your template accurately:
General structure: {stakeholder.X}
(where X is the name of the custom stakeholder field)
Example of custom stakeholder fields:
Custom stakeholder variables can be used as variables e.g
{stakeholder.Number of grants}
Custom transaction variables
You can also use Transaction custom fields as variables in your document templates.
Follow the structure below to enter the information in your template accurately:
General structure: {customField.X}
(where X is the name of the custom transaction field)
Example for the Board Approval Status: {customField.Board Approval Status} ⇒ Result: Pending
Pro-tips
Is your variable not working? Ledgy will automatically fill in with “undefined” if the variable cannot be found.
Ensure that the information to replace the variable is on Ledgy: if you use the variable {stakeholder.address.city} but you have not input the stakeholder’s city information on Ledgy, it will show up as “undefined”
Ensure the variable is written exactly as stated above: if you have written {stakeholder.adress.city} (with a missing d), it will show up as “undefined”
At the transaction level (any issuance, transfer, or convertible loan), we have added an automatic validation to help you along when a template document is uploaded. For example, if {vesting.cliff} is in use within the document but is not yet defined, Ledgy will identify this and prompt you to input the information.
Note: The document size should not exceed 32 MB.
Example
Let’s put the following text in a Word document for an option grant template:
Berlin, {today} Dear {stakeholder.name}, We hereby grant you the following number of Virtual Options according to the terms and conditions contained in the Agreement and in this Grant: Number of Options: {amount} Sincerely yours, Gwynne Sheetwell, Tom Baker |
The resulting PDF will contain the following:
Berlin, 18 Mar 2020 Dear Elon Must, We hereby grant you the following number of Virtual Options according to the terms and conditions contained in the Agreement and in this Grant: Number of Options: 10,000 Sincerely yours, Gwynne Sheetwell, Tom Baker |





