Add/Edit Templates - You must have the Add/Edit Templates permission to access this setting.
Create templates for generating project documents with automatic variable replacement.
Overview
Document Templates allow you to create standardized documents (Word, Excel, PDF) that can be generated for any project. When you generate a document from a template, variables are automatically replaced with project-specific information like contact names, addresses, financial data, and more.
Accessing This Setting
- Go to Settings > Projects > Document Templates
| Format | Upload | Variable Replacement | Print to PDF |
|---|
.docx (Word) | ✅ | ✅ | ✅ |
.doc (Word Legacy) | ✅ | ❌ | ❌ |
.xlsx (Excel) | ✅ | ✅ | ❌ |
.xls (Excel Legacy) | ✅ | ✅ | ❌ |
.pdf | ✅ | ❌ | ✅ |
Use .docx format for most templates. It supports variable replacement and can be converted to PDF when printing.
Creating Templates
Step 1: Create a Document in Word or Excel
Create your document in Microsoft Word (.docx) or Excel (.xlsx). Insert variables where you want dynamic content to appear.
Variable Format:
- Word documents: Use
${variable_name} syntax
- Excel documents: Use
${variable_name} syntax
Example text in a Word document:
Dear ${full_contact_name},
Thank you for choosing us for your ${project_type} project at ${house_address_1}, ${house_city}.
Your salesperson ${salesperson_full_name} will be in touch soon.
Project ID: ${project_id}
Contract Amount: $${contract_amount}
Step 2: Upload to ReadyBuild
- Go to Settings > Projects > Document Templates
- Click Add Template
- Enter a Template Name for internal reference
- Select a Category to organize templates
- Click Upload and select your document file
Available Variables
Date Variables
| Variable | Description | Example Output |
|---|
${short_date} | Current date (short format) | 1/15/2025 |
${long_date} | Current date (long format) | January 15, 2025 |
| Variable | Description |
|---|
${full_contact_name} | Contact display name: shows company name for commercial contacts, or "John and Jane Smith" for residential (combines spouse if present) |
${main_first_name} | Primary contact's first name |
${main_last_name} | Primary contact's last name |
${spouse_full_name} | Spouse/partner's full name |
${spouse_first_name} | Spouse/partner's first name |
${spouse_last_name} | Spouse/partner's last name |
${email} | Primary contact's email |
${email_spouse} | Spouse/partner's email |
${contact_note} | Notes from contact record |
Phone Numbers
| Variable | Description |
|---|
${primary_home_phone} | Primary contact's home phone |
${primary_cell_phone} | Primary contact's cell phone |
${primary_work_phone} | Primary contact's work phone |
${secondary_home_phone} | Secondary contact's home phone |
${secondary_cell_phone} | Secondary contact's cell phone |
${secondary_work_phone} | Secondary contact's work phone |
Project Address (Job Site)
| Variable | Description |
|---|
${house_address_1} | Job site street address |
${house_city} | Job site city |
${house_state} | Job site state |
${house_zip} | Job site ZIP code |
${house_year} | Year house was built |
${house_county} | Job site county |
${house_municipality} | Job site municipality |
| Variable | Description |
|---|
${contact_address_1} | Contact's mailing address |
${contact_city} | Contact's city |
${contact_state} | Contact's state |
${contact_zip} | Contact's ZIP code |
${contact_full_address} | Complete formatted address |
| Variable | Description |
|---|
${project_id} | Project ID number |
${project_title} | Project title |
${project_type} | Project type name(s) |
${project_note} | Intake/project notes |
${description} | Project description |
${division} | Division/opportunity type |
${source} | Lead source |
${work_scope} | Combined work scope from estimate (formatted) |
| Variable | Description |
|---|
${sold_amount} | Project sold amount |
${contract_amount} | Contract amount (same as sold_amount) |
${total_sold_amount} | Total sold amount (including change orders) |
${total_est_cost} | Total estimated cost |
${cost} | Actual cost |
${final_estimated_margin_dollars} | Estimated margin in dollars |
${final_estimated_margin_percent} | Estimated margin percentage |
${final_actual_margin_dollars} | Actual margin in dollars |
${final_actual_margin_percent} | Actual margin percentage |
${cost_variance_dollars} | Cost variance in dollars |
${margin_variance_dollars} | Margin variance in dollars |
${margin_variance_percent} | Margin variance percentage |
| Variable | Description |
|---|
${contract_date} | Date contract was signed |
Staff Assignments
Salesperson
| Variable | Description |
|---|
${salesperson_first} | Salesperson's first name |
${salesperson_last} | Salesperson's last name |
${salesperson_full_name} | Salesperson's full name |
Inside Sales
| Variable | Description |
|---|
${inside_sales_person_first} | Inside sales first name |
${inside_sales_person_last} | Inside sales last name |
Estimator
| Variable | Description |
|---|
${estimator_first_name} | Estimator's first name |
${estimator_last_name} | Estimator's last name |
${estimator_full_name} | Estimator's full name |
Project Manager
| Variable | Description |
|---|
${pm_first_name} | Project manager's first name |
${pm_last_name} | Project manager's last name |
${pm_full_name} | Project manager's full name |
Designer
| Variable | Description |
|---|
${designer_first_name} | Designer's first name |
${designer_last_name} | Designer's last name |
${designer_full_name} | Designer's full name |
Drafter
| Variable | Description |
|---|
${drafter_first_name} | Drafter's first name |
${drafter_last_name} | Drafter's last name |
${drafter_full_name} | Drafter's full name |
Intake/Created By
| Variable | Description |
|---|
${intake_date} | Date project was created |
${intake_first_name} | Creator's first name |
${intake_last_name} | Creator's last name |
${intake_full_name} | Creator's full name |
| Variable | Description |
|---|
${first_appt_date} | First appointment date (short format) |
${first_appt_date_long} | First appointment date (long format) |
${first_appt_time} | First appointment time |
${first_appt_assigned_first_name} | Assigned person's first name |
${first_appt_assigned_last_name} | Assigned person's last name |
Current User (Person Generating Document)
| Variable | Description |
|---|
${current_user_first} | Current user's first name |
${current_user_last} | Current user's last name |
Custom Fields
Any custom fields defined for Contacts or Projects are automatically available as template variables. You do not need to add them manually — when a document is generated, the system looks up all custom fields for the project and its contact and includes their values.
Use the field's Field Name (not the display label) as the variable name. To find a field's field name, go to Settings > Form Fields and look at the Field Name column.
For example, if you have a custom field with field name permit_number, use:
If a custom field has no value for a given project or contact, the variable is replaced with an empty string.
This applies to both single-project document generation and Mail Merge. Any custom field you add in Settings > Form Fields for contacts or projects becomes available immediately — no template re-upload needed.
Enable for Mail Merge
Templates can be enabled for Mail Merge, which allows generating documents for multiple projects at once with tracking.
To enable a template for Mail Merge:
- Edit a
.docx template
- Check Enable for Mail Merge
- Save the template
Only .docx (Word) templates support Mail Merge. The checkbox only appears for .docx files.
Once enabled, the template appears in the Template dropdown on the Projects > Mail Merge page.
Two Ways to Generate Documents
| Generate from Template | Mail Merge |
|---|
| Access | Project > Documents tab > Generate from Template | Projects > Mail Merge in the main menu |
| Scope | One project at a time | Multiple projects at once |
| Templates | All templates | Only templates with Enable for Mail Merge checked |
| Output | Single document | Merged document for all selected projects |
| Tracking | No record kept | Generation recorded with date, user, and project |
| Best for | Quick one-off documents | Batch operations like client letters |
See Mail Merge for details on bulk document generation.
Using Document Templates
Generating Documents from a Project
- Open a project
- Go to the Documents tab
- Click Generate from Template
- Select a template
- Choose to Download or Print (converts to PDF)
Template Tips
- Test your templates - Generate a document to verify all variables are replaced correctly
- Use consistent formatting - Variables inherit surrounding text formatting in Word
- Handle missing data - If data is missing, the variable will be replaced with an empty string
- Work scope formatting - The
${work_scope} variable includes HTML formatting and works best in Word documents
Common Templates
- Project Proposal Cover Letter
- Scope of Work Document
- Pre-Construction Checklist
- Material Selection Sheet
- Project Completion Certificate
- Warranty Information
- Site Access Agreement
- Subcontractor Information Sheet
Troubleshooting
Variables Not Replacing
- Check the format - Ensure you're using
${variable_name} with curly braces
- Check the file type - Only
.docx, .xlsx, and .xls support variable replacement
- Check spelling - Variable names are case-sensitive and must match exactly
- Check for hidden formatting - In Word, variables may have hidden formatting. Try retyping the variable
Variable Shows Empty
This usually means the data doesn't exist for that project:
- Contact or spouse information may not be filled in
- Staff assignments may not be set
- Custom field may be empty