Automate contract e-signatures in n8n with TurboDocx and Slack

a woman sitting at a table with lots of papers

A contract sitting unsigned in someone’s inbox isn’t a completed deal. It’s a stalled one. The standard fix is to chase people manually, copy a PDF into the right folder after it comes back, and update a spreadsheet by hand. n8n can handle all of that except the signature itself.

That gap closes with the TurboDocx verified node. This guide walks through a two-part workflow written by Nicolas Fry, CEO of TurboDocx, that moves a contract from an Excel row to a signed PDF in SharePoint with one human decision in the middle: a Slack approval click.

️ What You’re Building

The workflow splits into two independent parts.

Part A (send) runs on a 15-minute schedule. It reads your Excel table, picks up every row marked Ready to send, generates a contract PDF from your Word template via TurboDocx, posts an Approve/Reject message in Slack, and waits. Approved contracts go out for signature. Rejected ones get marked in Excel and the team gets notified.

Part B (file) runs when someone signs. A TurboDocx Trigger fires, downloads the executed PDF, uploads it to your SharePoint contracts folder, marks the row Signed, and posts the news to Slack.

n8n handles the scheduling, looping, branching, and data movement. TurboDocx handles the two things n8n doesn’t do natively: rendering a finished contract from a Word template, and collecting a legally binding e-signature.

What You Need Before You Start

  • An n8n instance, cloud or self-hosted. A free trial works fine.
  • The TurboDocx node, installed from the n8n Node panel.
  • A TurboDocx account. The free tier includes 5 document generations and 5 signatures per month, which covers building and testing.
  • Microsoft 365 with Excel and SharePoint, plus credentials configured in n8n.
  • A Slack workspace with an approvals channel such as #contract-approvals.

You can import the workflow template directly and follow along.

Step 1: Set Up Your Contract Queue in Excel

Each row in your Excel table is one contract. The Status column drives everything. The workflow picks up rows marked Ready to send and updates the status as the contract moves through each stage.

Create a table in a workbook stored in SharePoint or OneDrive with these columns:

  • Status: moves from Ready to send to Sent or Rejected, then to Signed
  • Client Name, Company, Email
  • Amount, Start Date
  • Document ID and Signed At (the workflow fills these in)

In the Microsoft Excel node, set Operation to Lookup, Lookup Column to Status, Lookup Value to Ready to send, and enable Return All Matches.

Not an Excel shop? The queue layer swaps out. Any app with an n8n node that can read and update a record works the same way: Salesforce, HubSpot, Pipedrive, Zoho CRM, Google Sheets, Airtable, Postgres, or monday.com. With a CRM you can also skip the 15-minute schedule and fire the workflow the moment a deal hits Closed Won.

person in orange long sleeve shirt writing on white paper

Step 2: Prepare the Contract Template

Start with the Word .docx file your legal team already approved. Replace the fields that change with merge variables: {clientName}, {amount}, {startDate}. Add two signature anchors: {client_sig} marks where the signature goes, and {client_date} marks the signing date.

Upload the file to TurboDocx and copy the template ID. Everything outside the variables stays exactly as legal wrote it. The clauses don’t drift.

⚙️ Step 3: Generate the Contract

Open the Generate Agreement Docx node, paste in the template ID, and map each variable to its Excel column:

clientName  → {{ $json["Client Name"] }}
amount      → {{ $json["Amount"] }}
startDate   → {{ $json["Start Date"] }}

Run the node on a test row. You’ll get a finished contract back in seconds, formatted exactly like the template.

Step 4: Get Slack Approval

The Slack node uses Send and Wait for Response to post the contract to your approvals channel with Approve & send and Reject buttons. The workflow pauses until someone clicks one.

Include the client name, deal value, and a document link in the message so the approver has what they need without digging. The If node routes approvals forward to signature. Rejections flip the Excel row to Rejected and notify the team.

Slack logo

✍️ Step 5: Send for Signature

Once approved, the workflow passes the PDF to the TurboSign: Send Signature node. Map the signer’s name and email from the Excel row.

TurboSign places signature and date fields at the {client_sig} and {client_date} anchors automatically. You never drag fields into position by hand. The signer gets an email and signs from any device. The Excel row flips to Sent.

️ Step 6: File the Signed PDF in SharePoint

Part B opens with the TurboDocx Trigger. Its webhook registers itself when you activate the workflow, so there’s no URL to copy manually.

In the Microsoft SharePoint node, pick your site and your signed-contracts folder. When the client signs, the executed PDF uploads automatically, the Excel row updates to Signed, and Slack announces it to the team.

Step 7: Test End to End

Before pointing this at real clients, run one contract through with your own email as the signer:

  1. Activate the workflow.
  2. Add a row to Excel with your email as the signer and set Status to Ready to send.
  3. Wait for the next scheduled run or trigger it manually.
  4. Click Approve & send in Slack.
  5. Sign the contract from your inbox.
  6. Confirm the PDF is in SharePoint and the row reads Signed.

If all six checks pass, you’re done. From here, marking a row Ready to send and clicking Approve are the only steps left for a human.

Common Pitfalls

  • Signed contracts not filing: The workflow must be activated. The signature webhook only registers on activation.
  • Rows not picked up: The status filter matches text exactly. Check for typos or extra spaces in Ready to send.
  • No Slack message: Confirm the Slack app has been added to the approvals channel.
  • Signature lands in the wrong spot: Check anchor spelling in your template. It must be exactly {client_sig} and {client_date}.
  • Self-hosted n8n webhook errors: The signature trigger needs a public HTTPS address. n8n Cloud provides this out of the box. On self-hosted, put n8n behind HTTPS or a tunnel and set WEBHOOK_URL to that address.

What This Doesn’t Handle (Yet)

As published, the template sends to one signer and doesn’t support redlines or negotiation rounds. Contracts that need edits should go back through the template before being marked Ready to send again.

Where to Take It Next

  • Trigger from a CRM deal stage in Salesforce or HubSpot instead of a 15-minute schedule.
  • Draft variable sections with AI by adding an OpenAI or Anthropic node before generation. Fixed clauses stay unchanged.
  • Route by deal value to send high-value contracts to a different approver or channel.
  • Use the same signature step for sales quotes. TurboDocx also has a CPQ quote template that runs through the same engine.

The free TurboDocx tier covers the full build and test cycle. Create an account and import the workflow template to run your first contract through today.

Stay on top of AI & Automation with BizStack Newsletter
BizStack  —  Entrepreneur’s Business Stack
Logo