DocuSign Send-for-Signature from Dataverse
When a record reaches a Ready-to-Sign status in Dataverse, the flow merges its data into a DocuSign template, sends the envelope to the right signers in order, writes the envelope ID back, and tracks status until completion. Automates outbound signature requests from the system of record.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
Automates outbound e-signature requests directly from the system of record. When a Signature Request row in Dataverse reaches the Ready to Sign status, a send flow creates and dispatches a DocuSign envelope from a template, writes the envelope id (and a correlation id) back to the row, and notifies operations. A companion tracker flow polls DocuSign hourly for completed envelopes and reconciles each one back to its source row.
Why it matters: Manually preparing and sending agreements is slow and error-prone. Driving DocuSign from Dataverse keeps signature requests accurate and timely, and the completion write-back keeps the system of record in sync without anyone watching the DocuSign console.
Built as: one solution, two flows + one Dataverse table (event-driven send + scheduled completion reconciliation). Both flows ship Off.
Use Case
A sales/operations team manages agreements (quotes, contracts, NDAs) as Dataverse rows. When a row is marked Ready to Sign, the agreement should be sent for signature automatically, the envelope id captured against the row, and the row flipped to Completed once everyone has signed - all without manual DocuSign steps.
Flow Architecture
When a Signature Request is updated
Microsoft Dataverse - SubscribeWebhookTriggerFlow A: Fires on any update to a Signature Request row (message = Update, scope = Organization) on flowlibs_signaturerequest.
Initialize Correlation Id
Initialize VariableMint guid() trace id (hand-off to the tracker flow).
Initialize config variables
Initialize VariableLoad env-var-backed config (Ready Status, Sent Status, Account Id, Template Id, Notify Email) into variables.
Check Ready To Sign
Condition (If)Proceed only when Signing Status = Ready-to-Sign value.
Send DocuSign Envelope
DocuSign - CreateEnvelopeFromTemplateNoRecipientsCreate and send the envelope from the template (status Sent); recipients come from the template.
Write Back Envelope Id
Microsoft Dataverse - UpdateRecordWrite envelope id + correlation id, stamp Sent On, set status to Sent for Signature.
Notify Sender
Office 365 Outlook - SendEmailV2Email operations that the envelope was sent.
Skip Not Ready
Terminate (Succeeded)Unrelated update - end cleanly (else branch).
Every hour (Flow B)
Recurrence (Hour/1)Flow B tracker: Poll DocuSign hourly for completed envelopes.
Search Completed Envelopes
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_DocuSignAccountId | String | <configure> | DocuSign account that owns the template. |
| flowlibs_DocuSignTemplateId | String | <configure> | Template merged into the envelope. |
| flowlibs_ReadyToSignStatus | String | Ready to Sign | Status value that triggers a send. |
| flowlibs_SentStatus | String | Sent for Signature | Status written back after sending. |
| flowlibs_CompletedStatus | String | Completed | Status written back on completion. |
| flowlibs_SignatureNotifyEmail | String | alerts@yourcompany.com | Notification mailbox. |
| flowlibs_SignatureRequestTableSet | String | flowlibs_signaturerequests | Entity set name for List rows lookup. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| DocuSign | shared_docusign | CreateEnvelopeFromTemplateNoRecipients SearchListEnvelopes |
| Microsoft Dataverse | shared_commondataserviceforapps | SubscribeWebhookTrigger UpdateRecord ListRecords |
| Office 365 Outlook | shared_office365 | SendEmailV2 |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Conditional template
- Branch on a deal-type column to pick a different templateId per agreement.
- Multi-signer routing
- Define signer roles and routing order on the DocuSign template; the flow sends without changing.
- Reminders / expiry
- Add a DocuSign AddReminders call after the send to enable nudges.
- CC parties
- Add observer roles on the template.
- Real-time completion
- Replace Flow B's hourly poll with a DocuSign Connect webhook (CreateHookEnvelopeV3) trigger for instant reconciliation.
- Tune the poll window
- Flow B searches the last 7 days; widen for low-volume, narrow for high-volume.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Status gate (Flow A)
Only proceeds when the row is at the Ready-to-Sign status.
EXPR.02Envelope id write-back
Captures the DocuSign envelope id for write-back.
EXPR.03Correlation id
Minted in Initialize_Correlation_Id for cross-flow tracing.
EXPR.04Completed-envelope search window
Searches the last 7 days of completed envelopes.
EXPR.05Match row by envelope (Flow B)
Finds the source Dataverse row by envelope id.
EXPR.06First match id
Resolves the matched row's primary key.
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.