V1 Mail Merge Templates (Legacy Reference)
This article covers the legacy V1 Mail Merge format. If you are building new templates or migrating existing ones, use Tag Templates instead. Tag Templates are faster, support more file types, and use an industry-standard tag syntax. See What Are Tag Templates? to get started, or email support@scopestack.io for migration help.
Starter Templates
The templates below use the V1 Mail Merge format. They continue to work for accounts already using them and are provided here as a reference.
Download starter templates from Google Drive — open with Microsoft Word.
Professional Services-Only Template
The standard single-phase task document. Key features:
- Follows the task ordering set in the Scope Editor.
- Applies unique language filtering — only unique language per phase is listed for Language Fields.
Required language fields:
out— Out of Scopecustomer— Client or Customer Responsibilitiesassumptions— Assumptionsdeliverables— Deliverables
Managed Services-Only Template
The standard managed-services document. Key features:
- Follows the task ordering set in the Scope Editor.
- Applies unique language filtering.
Requires the out (Out of Scope) language field.
PS + MS Template
Displays both Professional Services and Managed Services in a single document. Key features:
- Follows the task ordering set in the Scope Editor.
- Applies unique language filtering.
Required language fields:
out— Out of Scopecustomer— Client or Customer Responsibilitiesassumptions— Assumptionsdeliverables— Deliverables
Field Syntax
V1 templates use Word Mail Merge fields. To insert a merge field in Word, go to Insert > Field, select Mail Merge from the Categories list, then choose MergeField from the Field Name list.
Key-Pair Value Fields
A key-pair field inserts a single value into the document at the location of the field. The field name always starts with an equals sign:
<<= price >>
<<= project_name >>
<<= client_name >>The value that is inserted inherits the formatting of the field placeholder in your template.
Flow-Control Fields
Flow-control fields direct the merge process to loop over arrays or conditionally include content. They always come in pairs: an opening field that starts the block and a closing field that ends it.
Conditional (if/endIf):
<<= price:if(present) >>
This project is priced at <<= price >>.
<<= price:endIf >>The merge process adds the text between the if(present) and endIf fields only when the value exists. You can include additional merge fields inside the block.
Each loop:
<<= phases_with_tasks:each(phase) >>
Phase: <<= phase.phase >>
<<= phases_with_tasks:endEach >>The each block iterates over an array. The name in parentheses — phase in the example above — becomes a temporary variable you can use to access fields on each item. You can nest conditionals inside each loops, and each loops inside conditionals.
Common V1 data objects:
phases_with_tasks— Professional Services phases. Services are referred to as “tasks” in this object; subservices are “features.”managed_services— Managed Servicesproject_pricing— Pricing elements, including nested arrays. Dot notation accesses nested values:project_pricing.professional_services.revenue.language_fields— Language fields available on the project, structured similarly tophases_with_tasks.third_party_services— Containspartner_services(from Partner Requests) andvendor_quotes(ad hoc additions). Each has a vendor description and an “Our Description” value.locations— Project locations with assigned services.lines_of_business— Professional Services organized by Line of Business at the top level.
Text Blocks
Text blocks are reusable content blocks created in Settings > Documents > Text Blocks. They can include merge variables using a modified syntax.
In a document template, the key-pair field =fieldname inserts a value. In a text block, the same variable uses double-curly-brace syntax:
\{\{client_name\}\}This lets you dynamically insert project data — such as the client name — into text block content, which is then merged into the final document. The same pattern works for any key-pair merge variable.
Text blocks cannot use Service Descriptions, Language Fields, or Customer Summary blocks.
To insert a text block by its Merge ID, use the key-pair field:
<<= signature_block >>where signature_block is the Merge ID defined in your text block settings.
Markdown Formatting
Markdown is supported in the following areas of the platform:
- Text Blocks
- Terms and Conditions
- Service Descriptions
- Language Fields
Content in these areas uses the formatting styles already present in your Word document template.
Supported Markup
- Plain text — rendered with the “Normal” paragraph style.
- Headings (H1, H2, H3) — rendered with the Heading 1, Heading 2, and Heading 3 styles from your Word document.
- Bold and Italic — rendered as Normal style with bold or italic applied.
- Bulleted lists — requires a style named
ListBulletin your Word document. - Numbered lists — requires a style named
ListNumberin your Word document. - Use three spaces to denote deeper hierarchy levels in bulleted and numbered lists.
You can create these styles via the Styles Pane in Word. See Microsoft’s documentation on adding styles for details.
Additional Markdown syntax may work; the items above have been verified. For a full Markdown syntax reference, see the Markdown Guide cheat sheet .
Inserting Markdown-Formatted Fields
Fields that support markdown have two versions in the merge data: a raw content key and a formatted_content key. Use formatted_content in an each block to render the formatted version:
<<= term.formatted_content:each(item) >>
<<= item >>
<<= term.formatted_content:endEach >>The formatting applied to the merge field placeholder itself has no bearing on output. Rendered content always inherits styles from the Word document.
Products (Materials)
Products are accessible in V1 templates through the materials object. The correct loop structure is:
«materials.items:each(item)»
«item.name» - Qty: «item.quantity» - Price: «item.ext_price»
«materials.items:endEach»materials.items is the array of product line items. Each item exposes name, quantity, unit_price, ext_price, and other product fields.
Common mistake: Looping over materials.categories expecting nested items does not work:
«materials:each(mat)»
«mat.categories:each(cat)»
«cat.items:each(item)»...«cat.items:endEach»
«mat.categories:endEach»
«materials:endEach»materials.categories is a flat string array of category names, not an array of objects with their own items arrays. Iterating it with each will not give you product rows. Use materials.items:each(item) to access the actual product list.
Common Fields Reference
A comprehensive list of common V1 merge fields is maintained as a downloadable Word document.
View the Common Merge Fields document — download from Google Drive and open with Microsoft Word.
This reference covers frequently used key-pair fields and flow-control patterns for projects, phases, tasks, pricing, and language fields. Fields can be copied directly from the document into your templates.
For V2 (Tag Template) fields, see the V2 Field Reference instead.