Skip to Content
HelpDocuments & TemplatesMerge Data Field Reference

V2 Merge Data Field Reference

This reference documents every field available in V2 merge data for tag templates. It is organized by top-level namespace. Use the field paths here directly in template tags.

For tag syntax (loops, conditionals, rich text), see How Tag Templates Work and the Template Expression Reference.


Top-Level Structure

V2 merge data is organized into four namespaces plus several top-level collections.

Namespace / CollectionWhat it contains
projectProject metadata, contacts, narratives, attachments, custom fields
project_pricingFinancial totals, professional services, managed services, products, governance
project_paymentsPayment terms, pricing model, payment schedule
locationsService locations with phases and services nested inside
language_fieldsAggregated language content (deliverables, assumptions, etc.) by type
currencyCurrency settings for the project
survey_responsesQuestionnaire response values, keyed by response slug

Important: project_pricing and project_payments are top-level namespaces. They are not children of project. Using {project.project_pricing} will not work.


project fields

Core metadata

FieldExample tagNotes
project_name{project.project_name}The project’s name
client_name{project.client_name}Client company name
account_name{project.account_name}Your organization’s name
created_on{project.created_on}Date the project was created
printed_on{project.printed_on}Current date (when document is generated)
submitted_at{project.submitted_at}Date and time the project was submitted for approval
approved_at{project.approved_at}Date and time the project was approved
msa_date{project.msa_date}MSA date, if set on the project
project_version{project.project_version}Latest version name string

Date fields like created_on and printed_on support the .to_short_date filter when Include Formatting is enabled:

{project.printed_on.to_short_date}

Current version object

The current_version object exposes details about the most recently created named version.

FieldExample tag
Name{project.current_version.name}
Comment{project.current_version.comment}
Created by{project.current_version.created_by}
Created date{project.current_version.created}

Narrative fields

Narrative fields are arrays of strings (one entry per paragraph). Loop over them to render each paragraph, or use the formatted_ version for a single rich text block.

NarrativeArray tagFormatted tag
Executive summary{#project.executive_summary}{.}{/project.executive_summary}{~~project.formatted_executive_summary}
Solution summary{#project.solution_summary}{.}{/project.solution_summary}{~~project.formatted_solution_summary}
Our responsibilities{#project.our_responsibilities}{.}{/project.our_responsibilities}{~~project.formatted_our_responsibilities}
Customer responsibilities{#project.customer_responsibilities}{.}{/project.customer_responsibilities}{~~project.formatted_customer_responsibilities}
Out of scope{#project.out_of_scope}{.}{/project.out_of_scope}{~~project.formatted_out_of_scope}

Use the array approach when you need to apply per-paragraph styling or numbering. Use formatted_ when you want a single formatted block without per-item control.

Contacts

All contact objects expose name, email, title, and phone.

Primary contact

The project’s primary customer contact. Wrap in a conditional block in case none is set.

{#project.primary_contact} {name} {title} {email} {phone} {/project.primary_contact}

Primary contacts also include user_defined_fields if your account has custom contact variables defined.

Presales engineer and sales executive

{#project.presales_engineer} {name} — {email} {/project.presales_engineer} {#project.sales_executive} {name} — {email} {/project.sales_executive}

All contacts (loop)

project.contacts is an array of all active contacts on the project. Each contact includes name, email, title, phone, and contact_type (a slug such as primary_customer_contact).

{#project.contacts} {name} ({contact_type}) {/project.contacts}

Teammates

Project collaborators (internal team members). Each teammate exposes the same name, email, title, phone fields.

{#project.teammates} {name} — {email} {/project.teammates}

Client object

project.client is an object with all non-sensitive client attributes. Commonly used fields:

FieldExample tag
Name{project.client.name}
Logo URL{project.client.logo_url}
Custom client variablesmerged directly onto the client object

Business unit

project.business_unit is an object with the project’s business unit, if assigned.

FieldExample tag
Name{project.business_unit.name}
Logo URL{project.business_unit.logo_url}
Slug{project.business_unit.unit_slug}

Rate table

FieldExample tag
Name{project.rate_table.name}
Accounting code{project.rate_table.accounting_code}
Slug{project.rate_table.slug}

Tags

project.tags is an array of tag strings applied to the project.

{#project.tags}{.}{/project.tags}

Terms and conditions

An array of active terms and conditions attached to the project. Each item has name, slug, content (plain text), and formatted_content (HTML).

{#project.terms_and_conditions.length>0} {#project.terms_and_conditions} {~~formatted_content} {/project.terms_and_conditions} {/project.terms_and_conditions.length>0}

Note: terms and conditions must be accessed with the project. prefix. {#terms_and_conditions} without a prefix will not render.

Text blocks

Text blocks are pre-written content configured in ScopeStack settings. Access them under project.text_blocks using the block’s slug. Always use {~~} rich text syntax.

{~~project.text_blocks.signatures} {~~project.text_blocks.project_acceptance} {~~project.text_blocks.change_management}

User-defined fields (custom project variables)

Custom variables defined in your account settings are available under project.user_defined_fields. Each field is accessed by its variable name and exposes a value property.

{project.user_defined_fields.project_number.value} {project.user_defined_fields.duration_weeks.value} {project.user_defined_fields.sow_id.value}

Use conditionals to show content based on a custom variable’s value:

{#project.user_defined_fields.msa_on_file.value=="yes"} MSA is on file. {/project.user_defined_fields.msa_on_file.value=="yes"}

Attachments and logos

FieldExample tagNotes
Account logo{%project.account_logo_url}Use {%} image syntax
Client logo{%project.client.logo_url}Use {%} image syntax
Attachmentssee belowArray of attachment objects

project.attachments is an array. Each attachment has a slug (derived from its type name) and a url.

{#project.attachments} {url} {/project.attachments}

project_pricing fields

Top-level totals

These are the rollup financial figures for the entire project.

FieldExample tagNotes
total_contract_revenue{project_pricing.total_contract_revenue.to_currency}PS revenue + MRR over contract length
total_contract_value{project_pricing.total_contract_value.to_currency}Contract revenue (alias)
total_service_revenue{project_pricing.total_service_revenue.to_currency}PS + MS + third party revenue
total_contract_cost{project_pricing.total_contract_cost.to_currency}Total cost
total_contract_profit{project_pricing.total_contract_profit.to_currency}Revenue minus cost
total_contract_margin{project_pricing.total_contract_margin}Margin as a percentage string
total_customer_payment{project_pricing.total_customer_payment.to_currency}Contract revenue minus payment credits
total_location_service_revenue{project_pricing.total_location_service_revenue.to_currency}Sum of service revenue across all locations

Currency fields require .to_currency when Include Formatting is enabled.

professional_services

The professional_services object contains phases, locations, and lines of business for PS work, plus summary figures.

FieldExample tagNotes
revenue{project_pricing.professional_services.revenue.to_currency}Total PS revenue
net_revenue{project_pricing.professional_services.net_revenue.to_currency}PS revenue after adjustments
adjustment{project_pricing.professional_services.adjustment.to_currency}Price adjustment amount
discounted?{#project_pricing.professional_services.discounted?}Exists in merge data but crashes the template parser if used in a tag. Use a numeric comparison on adjustment instead.
any?{#project_pricing.professional_services.any?}Exists in merge data but crashes the template parser if used in a tag. Use a .length > 0 check on phases or services instead.

Phases

project_pricing.professional_services.phases is an array. Each phase contains a list of services and rollup financials.

FieldNotes
namePhase display name
slugPhase identifier slug (e.g., no_phase, onsite_implement_language)
servicesArray of service objects for this phase
locationsArray of location objects for this phase
total_revenuePhase total revenue
total_costPhase total cost
service_revenuePhase service revenue
service_costPhase service cost
pm_revenuePhase PM revenue
language_fieldsArray of language field objects aggregated for this phase
{#project_pricing.professional_services.phases} {^slug=="no_phase"}Phase: {name}{/slug=="no_phase"} {#services} {name} {~~formatted_service_description} {/services} {/project_pricing.professional_services.phases}

Common phase slugs: no_phase, inhouse_prep_language, onsite_implement_language, remote_implement_language, post_support_langauge (note: the last slug has a typo in the platform — “langauge” — and must be used exactly as written).

Lines of business

project_pricing.professional_services.lines_of_business is an array of LOB objects. Each LOB has name, code, slug, services (array), and service_categories (array of service category objects).

Each service category under a LOB also has name, code, slug, and services.

Locations (within professional_services)

project_pricing.professional_services.locations is an array of location objects. Each location has name, address, services, and rollup financial fields (total_revenue, service_revenue, etc.).

managed_services

FieldExample tagNotes
mrr{project_pricing.managed_services.mrr.to_currency}Monthly recurring revenue
mrr_adjustment{project_pricing.managed_services.mrr_adjustment.to_currency}MRR price adjustment
billing_frequency{project_pricing.managed_services.billing_frequency}e.g., “Monthly”, “Quarterly”
billing_interval{project_pricing.managed_services.billing_interval}e.g., “month”, “quarter”
billing_revenue{project_pricing.managed_services.billing_revenue.to_currency}MRR times billing months
billing_discount{project_pricing.managed_services.billing_discount.to_currency}MRR adjustment times billing months
billing_net_revenue{project_pricing.managed_services.billing_net_revenue.to_currency}Net MRR times billing months
contract_start_date{project_pricing.managed_services.contract_start_date.to_short_date}Service start date
contract_end_date{project_pricing.managed_services.contract_end_date.to_short_date}Calculated contract end date
contract_length{project_pricing.managed_services.contract_length}Number of months
discounted?{#project_pricing.managed_services.discounted?}Exists in merge data but crashes the template parser if used in a tag. Use a numeric comparison on mrr_adjustment instead.
any?{#project_pricing.managed_services.any?}Exists in merge data but crashes the template parser if used in a tag. Use a .length > 0 check on services instead.
servicessee service fieldsArray of managed service objects
locationsarrayMS locations, same structure as PS locations
lines_of_businessarraySame LOB structure as PS

resources

project_pricing.resources is an array of resource summary rows. One row per resource, plus a TOTAL row at the end.

FieldNotes
resource_nameResource display name (or TOTAL for the summary row)
resource_slugURL-safe slug (e.g., senior_engineer). The total row uses project_total.
external_nameResource external name
descriptionResource description
accounting_codeResource accounting code
line_of_businessName of the LOB the resource is assigned to
quantityTotal hours for this resource
hourly_rateResource hourly rate
hourly_costResource hourly cost
discounted_rateSame as hourly_rate
service_revenueRevenue from services (excluding governance)
pm_revenueRevenue from governance/PM
total_revenueService revenue plus PM revenue
totalTotal revenue (alias for total_revenue)

To loop over resources and exclude the total row:

{#project_pricing.resources} {^resource_slug=="project_total"} {resource_name} | {quantity} hrs | {hourly_rate.to_currency}/hr | {total.to_currency} {/resource_slug=="project_total"} {/project_pricing.resources}

To show only the total row:

{#project_pricing.resources} {#resource_slug=="project_total"} Total: {total.to_currency} {/resource_slug=="project_total"} {/project_pricing.resources}

product

The project_pricing.product object contains hardware and product line items.

FieldNotes
itemsArray of product line items (see fields below)
revenueTotal product revenue
costTotal product cost
categoriesArray of unique category slugs present in the product list
subcategoriesArray of unique subcategory slugs present in the product list

Each item in project_pricing.product.items:

FieldNotes
nameProduct name
descriptionProduct description
skuSKU
quantityQuantity
unit_of_measureUnit of measure
categoryCategory name
category_slugCategory name as a slug
subcategorySubcategory name
subcategory_slugSubcategory name as a slug
manufacturer_part_numberManufacturer part number
customWhether this is a custom product
list_priceList price per unit
unit_priceSelling price per unit
unit_costCost per unit
vendor_discountVendor discount percentage
markupMarkup percentage
revenueExtended selling price (quantity times unit_price)
costExtended cost
location_nameName of the service location this product is assigned to
location_addressAddress of the service location
user_defined_fieldsCustom product variables, if defined

project_governance

project_pricing.project_governance contains governance items (project management, overhead, etc.).

FieldNotes
itemsArray of governance line items (see fields below)
revenueTotal governance revenue
costTotal governance cost

Each item in project_pricing.project_governance.items:

FieldNotes
descriptionGovernance description
external_nameExternal-facing name
hourly_rateHourly billing rate
hourly_costHourly cost
hoursTotal hours
resourceResource name
resource_slugResource name as a slug
revenueRevenue for this governance item
costCost for this governance item
calculation_typeHow the item is calculated (e.g., fixed_hours, percent_of_total)
rateRate value — either a percentage string or a number, depending on calculation_type
assign_effort_to_serviceBoolean — whether effort counts toward service hours

travel_and_expense

project_pricing.travel_and_expense contains expense line items.

FieldNotes
included?Boolean — whether expenses are included in the contract price
itemsArray of expense items (see fields below)
revenueTotal expense revenue
costTotal expense cost
travel_hoursTotal travel hours across all resource-rate expenses

Each item in project_pricing.travel_and_expense.items:

FieldNotes
nameExpense name
descriptionExpense description
quantityQuantity
rateUnit rate
revenueExtended revenue
costExtended cost
travel_hoursTravel hours (only present for resource-rate expenses)

payment_credits

project_pricing.payment_credits contains applied payment credits.

FieldNotes
itemsArray of credit items
totalTotal credit amount

Each item:

FieldNotes
criteriaArray of strings describing the credit criteria
formatted_criteriaHTML-formatted criteria (use {~~})
amountCredit amount
payment_sourceSource of the credit
descriptionCredit description

third_party_services

project_pricing.third_party_services contains subcontractor quotes.

FieldNotes
revenueTotal third party revenue
costTotal third party cost
profitTotal third party profit
itemsArray of quote objects (see fields below)

Each item in items:

FieldNotes
descriptionQuote description
total_hoursTotal quoted hours
costQuote cost
revenueQuote price
hourly_revenueRevenue per hour
hourly_costCost per hour
profitQuote profit
line_of_businessLOB name
service_categoryService category name
service_typeService type slug
pricing_levelEither service or quote
subcontractorVendor object with name and address fields
servicesArray of third party service line items

Service fields

Service objects appear inside phase loops ({#services}), location phase loops, LOB loops, and managed services. A service can be either a professional service or a managed service.

The following fields are available on every service object.

Identification

FieldNotes
nameService name
uuidService UUID
service_typeprofessional or managed (StringInquirer — supports service_type=="professional")
task_sourceSource of the service (e.g., standard, custom)
skuSKU, if set
lobLine of business name
service_categoryService category name
do_not_printBoolean — if true, the service is marked to exclude from documents

Hours and quantity

FieldNotes
quantityQuantity (number of units)
total_hoursTotal hours for this service (quantity times hours per unit)
extended_hoursExtended hours (accounts for overrides)
override_hoursOverride hours value, if set
actual_hoursActual hours logged, if tracked
multiple?Boolean — true when quantity is greater than 1

Pricing

FieldNotes
total_revenueTotal revenue including PM allocation
total_costTotal cost
service_revenueService revenue (excluding PM)
service_costService cost
pm_revenuePM revenue allocated to this service
unit_revenueRevenue per unit (total_revenue divided by quantity)
pricing_modelString: time_and_materials or fixed_fee
pricing_strategyPricing strategy integer code
target_marginTarget margin, if set
advanced_pricingBoolean — true if custom price or custom hours are set

Resource

FieldNotes
resource_nameResource name (or subcontractor name for third party services)
resource_external_nameResource external name
resource_accounting_codeResource accounting code
third_party?Boolean — true for subcontractor services

Description

FieldNotes
service_descriptionArray of strings (paragraphs). Always iterate: {#service_description}{.}{/service_description}
formatted_service_descriptionHTML-formatted description. Use {~~formatted_service_description}. At subservice level, use the array form instead to avoid duplication.

Uniqueness and deduplication

FieldNotes
uniqueBoolean — true for the first occurrence of this service name in the project
unique?Exists in merge data but crashes the template parser if used in a tag. Use unique (without ?) instead.
unique_countNumber of times this service name appears in the project (set only when unique is true)

Use unique to de-duplicate services when you want to show each service name only once:

{#services} {#unique} {name} (appears {unique_count} times) {/unique} {/services}

Language fields on a service

Each service has a language_fields object keyed by language field slug. Access per-service language content directly without an outer loop:

{#services} {name} {#language_fields.deliverable.sentences} {.} {/language_fields.deliverable.sentences} {#language_fields.customer.sentences} {.} {/language_fields.customer.sentences} {/services}

User-defined fields on a service

If your account has custom service variables defined, they appear under user_defined_fields on each service object, using the same structure as project-level variables.

Subservices

Each service has a subservices array. Subservices share most fields with services but have a reduced set.

FieldNotes
nameSubservice name
quantityQuantity
service_descriptionArray of strings. Always use {#service_description}{.}{/service_description} at subservice level. Do not use {~~formatted_service_description} on subservices — it causes content duplication.
total_revenueRevenue
total_costCost
service_revenueService revenue
service_costService cost
resource_nameResource name
language_fieldsLanguage fields object keyed by slug
{#services} {name} {#service_description}{.}{/service_description} {#subservices} ({quantity}) {name} {#service_description}{.}{/service_description} {/subservices} {/services}

locations fields

locations is a top-level array of service location objects. Use this for location-first document layouts. Each location includes all its phases and services pre-organized.

Location object fields

FieldNotes
nameLocation name
streetStreet address line 1
street2Street address line 2
cityCity
stateState
postal_codePostal code
countryCountry name (full English name, not code)
addressFull formatted address string (combines street, city, state, postal code, country)
remoteBoolean — true for remote locations
service_revenueTotal service revenue for this location
phasesArray of phase objects containing services at this location
lines_of_businessArray of LOB objects for this location
productsArray of product items assigned to this location
user_defined_fieldsCustom location variables, if defined

Phases within a location

Each phase object inside locations[].phases has:

FieldNotes
namePhase name
slugPhase slug
servicesServices at this location in this phase
user_defined_fieldsCustom location variables for this phase-location combination

Location-first template pattern

{#locations} {name} {address} {#phases} {^slug=="no_phase"} Phase: {name} {/slug=="no_phase"} {#services} {name} {~~formatted_service_description} {#subservices} ({quantity}) {name} {#service_description}{.}{/service_description} {/subservices} {/services} {/phases} {/locations}

language_fields

Language fields aggregate supplementary content (deliverables, assumptions, customer responsibilities, out-of-scope items) across all services. They exist at three scopes: top-level (entire project), per-phase, and per-service.

Top-level language_fields

language_fields is a top-level array. Each entry represents one language field type.

FieldNotes
nameDisplay name of the language field
slugIdentifier slug
introductionArray of preamble strings
formatted_introductionHTML-formatted preamble. Use {~~formatted_introduction}.
conclusionArray of postamble strings
formatted_conclusionHTML-formatted postamble. Use {~~formatted_conclusion}.
sentencesArray of all content sentences aggregated from services
formatted_sentencesHTML-formatted sentences. Use {~~formatted_sentences}.
phasesArray of phase objects, each with name, slug, sentences, and formatted_sentences
managed_servicesObject with sentences and formatted_sentences for MS-only content

Standard language field slugs

SlugSection
deliverableDeliverables
customerCustomer Responsibilities
assumptionsKey Assumptions
outOut of Scope

Note: the slugs are abbreviated. Use "out", not "out_of_scope". Use "customer", not "customer_responsibilities".

Top-level language field loop

{#language_fields} {#slug=="deliverable"} Deliverables {~~formatted_introduction} {#phases} {#sentences}{.}{/sentences} {/phases} {~~formatted_conclusion} {/slug=="deliverable"} {#slug=="customer"} Customer Responsibilities {~~formatted_introduction} {#sentences}{.}{/sentences} {/slug=="customer"} {/language_fields}

Phase-scoped language content

To show language content grouped by phase, use the phases array within each language field:

{#language_fields} {#slug=="deliverable"} {#phases} {name} {#sentences}{.}{/sentences} {/phases} {/slug=="deliverable"} {/language_fields}

project_payments fields

Payment terms and schedule data live under project_payments.

Pricing model and payment terms

FieldNotes
pricing_modelString: fixed_fee, time_and_materials, mixed, or other. mixed is the default when no payment term is set.
payment_terms.namePayment terms name
payment_terms.include_expensesBoolean — whether expenses are included in pricing
payment_terms.include_hardwareBoolean — whether hardware is included in pricing
payment_terms.slugPayment terms slug

Currency objects

FieldNotes
default_currency.nameDefault currency name
default_currency.conversion_rateConversion rate
project_currency.nameProject currency name
project_currency.converted?Boolean — true when project currency matches default

Payment schedule

project_payments.schedule is an array of payment schedule items.

FieldNotes
descriptionPayment description or milestone
amount_dueAmount due for this payment
payment_dateScheduled payment date (if set)
{#project_payments.schedule.length>0} Payment Schedule: {#project_payments.schedule} {description}: {amount_due.to_currency} {#payment_date}{payment_date.to_short_date}{/payment_date} {/project_payments.schedule} {/project_payments.schedule.length>0}

project_payments.arr_schedule follows the same structure but groups payments annually.

Conditional blocks by pricing model

{#project_payments.pricing_model=="fixed_fee"} This is a fixed fee engagement. {/project_payments.pricing_model=="fixed_fee"} {#project_payments.pricing_model=="time_and_materials"} This engagement is billed on a time and materials basis. {/project_payments.pricing_model=="time_and_materials"} {^project_payments.payment_terms.include_expenses} Expenses are billed separately and are not included in this estimate. {/project_payments.payment_terms.include_expenses}

currency fields

currency is a top-level object with the project’s currency settings.

FieldNotes
nameCurrency name (e.g., “US Dollar”)
symbolCurrency symbol (e.g., ”$“)
iso_codeISO currency code (e.g., “USD”)
conversion_rateExchange rate from default currency
unitCurrency symbol for manual formatting (e.g., ”$”). Use as {currency.unit}{value*1|toFixed:2} when formatting is disabled.
separatorDecimal separator character (e.g., ”.”)
delimiterThousands grouping character (e.g., ”,“)
precisionNumber of decimal places for currency display

survey_responses

survey_responses is a flat object keyed by response slug. Each value is the response text or a selected option value. Date-type responses are formatted according to account settings.

{survey_responses.implementation_scope} {survey_responses.customer_size}

Formatted fields summary

Every field that has a formatted_ counterpart is listed below. These fields contain HTML and must be rendered with {~~}.

Raw fieldFormatted field
project.executive_summary (array)project.formatted_executive_summary
project.solution_summary (array)project.formatted_solution_summary
project.our_responsibilities (array)project.formatted_our_responsibilities
project.customer_responsibilities (array)project.formatted_customer_responsibilities
project.out_of_scope (array)project.formatted_out_of_scope
service_description (array)formatted_service_description (service level only)
language_fields[].introduction (array)language_fields[].formatted_introduction
language_fields[].conclusion (array)language_fields[].formatted_conclusion
language_fields[].sentences (array)language_fields[].formatted_sentences
project.terms_and_conditions[].contentproject.terms_and_conditions[].formatted_content
project_pricing.payment_credits.items[].criteria (array)project_pricing.payment_credits.items[].formatted_criteria
project.text_blocks.*(text blocks are always HTML — always use {~~})

User-defined fields summary

Custom variables can be defined at multiple levels in ScopeStack. Each level’s variables appear under a user_defined_fields object on the corresponding item.

ContextAccess path
Project{project.user_defined_fields.<name>.value}
Contact (primary){#project.primary_contact}...{user_defined_fields.<name>.value}...{/project.primary_contact}
Service{#services}...{user_defined_fields.<name>.value}...{/services}
Product{#project_pricing.product.items}...{user_defined_fields.<name>.value}...{/...}
Service location{#locations}...{user_defined_fields.<name>.value}...{/locations}
Teammate{#project.teammates}...{user_defined_fields.<name>.value}...{/project.teammates}

The variable name in the path is the internal variable name set in your account’s project variables configuration, not the display label.

Last updated on