All document types
Dataverseaccountcontactyour own agreement table

Generate a contract from Dataverse

Contracts are where mail-merge tools give up. The party details are easy; what breaks is the clause that only applies when the term exceeds twelve months, the schedule that repeats per site, and the requirement that the signed copy be archived as PDF/A. Contracts are also exactly the documents you do not want rendered on someone else's server.

VerseDocs handles the clause logic with {{#if}} and {{#unless}} on any field, including raw option-set codes and numbers; repeats schedules with {{#each}} over related rows; and writes PDF/A-1b, 2b or 3b on request. Because the plug-in runs in your Dataverse sandbox, the draft never leaves the environment it was generated in.

Unlimited watermarked use, no time limit. $2,400 a year per tenant removes the watermark.

How it works

From record to contract in 3 steps

01

Model the agreement

A custom Agreement table with lookups to the account and the signatory contact, a term in months, a start date and a choice column for the jurisdiction. Or bind directly to account if the agreement is one-per-customer.

02

Write the clauses as a template

Paste your standard agreement into Word. Replace names, dates and amounts with tokens. Wrap optional clauses in {{#if}} on the field that decides them. Put a link-entity for schedules or sites in the manifest and loop over it.

03

Generate and archive

Generate from the record as a Word draft for negotiation, then as PDF/A for the signed version by setting pdfConformance in Options from a flow. Attach it to the record's timeline or file it to SharePoint.

The template

Start from a starter

There is no generic contract in the starter pack because every organisation's clauses differ. Start from the Letter starter in Template Studio, which gives you a bound header and body, and paste your own agreement text under it.

Tokens in the template

THIS AGREEMENT is made on {{agreement._raw.startdate:d MMMM yyyy}}
between [Your company] and {{agreement.accountid}} ("the Customer").

{{#if agreement._raw.longterm}}Clause 7 — Extended term
Where the initial term exceeds twelve months, the Customer may …{{/if}}

Schedule 1 — Sites
{{#each agreement.sites}}{{name}}, {{address1_city}}{{/each}}

Signed for the Customer: {{agreement.signatoryid}}

Paste any of this into the template playground with the sample data to see it render in your browser.

Questions
Can a clause depend on an option-set value?
Yes. Use the raw code: {{#if agreement._raw.jurisdiction}} tests a number, and for a specific value you add a Yes/No or calculated column that holds the decision and test that. Templates deliberately do not embed comparison logic, so the rule lives on the table where it can be audited.
Is the output suitable for e-signature?
The generated PDF is an ordinary PDF; send it to your e-signature provider from a flow. If you sign in-house, vdocs_PdfSign applies a certificate-based digital signature with a certificate you supply, inside your environment.
Where is the contract rendered?
In the Dataverse plug-in sandbox of your own environment. No third-party service receives the template or the data; the only outbound traffic from VerseDocs is optional aggregate usage counts, which you can switch off.

Rendered in your tenant. Priced per tenant.

VerseDocs is a managed solution of Dataverse plug-ins. Templates, field values and generated files stay in your environment. Try every feature free with a watermark; one licence key removes it for every environment, user and document in the tenant.