DocuSign Bulk Send Campaign
From a recipient list (Dataverse/Excel/Sheet), the flow runs a DocuSign bulk send of a templated document - policy acknowledgements, NDAs, renewals - tracks per-recipient status, retries failures, and reports completion rates to Teams. Automates large-scale signature campaigns.
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
This flow runs a DocuSign bulk signature campaign from a Dataverse recipient list. On a schedule it reads every recipient still marked Pending for the active campaign, sends each one a personalized envelope built from a shared DocuSign template, writes the per-recipient status (and envelope id) back to Dataverse, retries failures up to a configurable limit, and posts a completion-rate report to a Microsoft Teams channel.
Why it matters: sending the same document (policy acknowledgement, NDA, renewal) to many people one-by-one is impractical. This turns a recipient table into an automated, trackable signature drive - every recipient gets their own envelope id so progress is auditable and nothing is sent twice.
Ships Off (demo).
Use Case
HR/Operations needs everyone in a group to sign a document and wants progress tracked. Load the recipients into the Dataverse table, set the campaign name + DocuSign template, turn the flow on, and watch the completion rate climb in Teams. Failed sends are retried automatically until the retry cap is reached.
Flow Architecture
Scheduled Recurrence
RecurrenceRuns on a schedule (default daily 08:00 ET); each run picks up Pending recipients and retries prior failures.
Initialize Trace, Config & Counters
Initialize variableMints a guid() correlation id, binds the 8 env vars, and seeds sent/failed/total counters.
List Pending Recipients
Dataverse - ListRecordsReads all recipient rows for this campaign with Send Status = Pending (includes retry rows).
For Each Recipient
Apply to each (sequential)In a try Scope creates an envelope from the template, adds the recipient to the template role, and sends; on success stamps the row Sent with its envelope id and increments the sent counter; on failure increments retry count, parks as Failed at the cap (else leaves Pending), and increments the failed counter.
Report Completion
Compose + TeamsComputes the completion rate and posts sent/failed/total/rate + correlation id to the campaign Teams channel.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_DocuSignAccountId | String | 00000000-0000-0000-0000-000000000000 | DocuSign API account ID for all envelope operations. |
| flowlibs_BulkTemplateId | String | 00000000-0000-0000-0000-000000000000 | DocuSign template ID of the document sent to every recipient. |
| flowlibs_DefaultSignerRole | String | Signer 1 | Template role bound when a row has no Signer Role. |
| flowlibs_RecipientTableName | String | flowlibs_bulksendrecipients | Dataverse entity set of the recipient list (documentation). |
| flowlibs_CampaignName | String | Q3 Policy Acknowledgement | Only rows with this Campaign Name are sent. |
| flowlibs_MaxSendRetries | String | 3 | Max send attempts per recipient before parking as Failed. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams group/team for the progress channel. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel for the completion report. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| DocuSign | shared_docusign | CreateEnvelopeFromTemplateNoRecipients AddRecipientToEnvelope SendDraftEnvelope |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords UpdateRecord |
| Microsoft Teams | shared_teams | PostMessageToConversation |
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.
- Schedule
- Change the recurrence frequency (hourly during a drive, weekly for renewals).
- Segment by template
- Run multiple campaigns by Campaign Name, each pointing at a different template and signer role.
- Reminders
- Add a parallel scheduled flow using DocuSign AddReminders to nudge non-signers on Sent envelopes.
- Compliance report
- Add a Dataverse ListRecords filtered to Sent/Pending and email a who-has-not-signed digest.
- Status sync
- Pair with a DocuSign OnEnvelopeStatusChanges trigger flow to update the row to Completed when the recipient signs.
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.01Pending filter (OData)
Selects this campaign's pending recipients (and retries).
EXPR.02Retry + give-up logic
Parks as Failed at the retry cap, else leaves Pending.
EXPR.03Completion rate %
Sent divided by total, percent.
EXPR.04Role fallback
Uses the row's signer role or the default.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.