# Log signed Documenso contracts as closed won in HubSpot

> When a contract is fully signed, we read the agreed terms, move the matching HubSpot deal to closed won, and post a deal desk summary to Slack.

- Workflow type: agent
- Services: Documenso, HubSpot, Slack Bot
- Categories: Sales, Operations
- Published: 2026-08-07

## What it does

- Picks up every contract the moment it reaches fully signed, so nothing waits on someone remembering to update the CRM.
- Reads the signed PDF for the terms that were actually agreed: contract value, start date, term length, and any renewal or auto renewal language.
- Finds the matching opportunity in HubSpot, moves it to closed won with the right amount and close date, and files a plain English summary of the terms on the record.
- Posts a deal desk summary to Slack covering value, who signed, and anything legal or finance should see. If the right deal is not obvious, it asks a person to link it instead of guessing.

## What you'll need

- A Documenso account where your contracts are sent for signature, with permission to turn on notifications when a document is completed.
- A HubSpot account with the deals you want moved to closed won.
- A Slack workspace and a channel where the deal desk summaries should land.
- A shared view of what counts as a confident match, for example the same company plus an open late stage deal.

## Prompt

When a contract is fully signed in Documenso, close the loop in the CRM automatically so signed deals never sit unrecorded. Trigger this workflow on the Documenso webhook for the document completed event. Use the envelopeId field on the webhook payload as the canonical identifier for the envelope rather than the legacy numeric document id, and ignore any event where the envelope status is not COMPLETED.

Start with Get Envelope in Documenso to pull the envelope title, the full recipient list with names and email addresses, and the signing timestamps for each recipient. Then use Download Envelope Item to fetch the signed PDF, so you are reading the terms that were actually agreed rather than what was originally quoted.

Read the signed PDF and extract: the total contract value and currency, the start date, the term length, any renewal or auto renewal language including notice periods, and any unusual clauses worth a second look. Unusual means things like non standard payment terms, uncapped liability, custom service levels, termination for convenience, or bespoke discounting.

Find the matching opportunity in HubSpot using Search Deals. Match on the signer email domain and the company name from the envelope, and cross check against the deal name, the amount, and recent activity. Treat the match as confident only when the evidence lines up: the same company, an open deal in a late stage, and an amount in the same range as the contract. If several deals could plausibly match, or the only candidates are already closed or belong to a different company, treat that as no confident match.

When the match is confident, use Update Deal to move the deal to closed won, set the amount to the contract value you read from the signed PDF, and set the close date to the date the final signer completed. Then use Create Note to attach a plain English summary of the terms to that same deal, covering contract value, start date, term length, renewal terms, who signed and when, and anything unusual, so the account team has the detail on the record without opening the PDF.

Finally, post a deal desk summary to Slack using the Slack Bot Send a Message operation. Include the contract value, the company, who signed and when, the deal you updated, and a short flagged section for anything legal or finance should look at, such as auto renewal, unusual liability language, or payment terms outside the standard. Link back to the HubSpot deal so the team can jump straight to it.

If no confident deal match exists, do not guess and do not write anything to HubSpot. Writing closed won to the wrong deal is worse than doing nothing. Instead, post to Slack with the envelope title, the signers, the contract value you read, and the candidate deals you considered and rejected, and ask a human to link it to the right opportunity manually.

## How to customize

- Change which Slack channel gets the summary, and add a second channel for legal or finance when a contract has unusual terms.
- Adjust how strict the deal matching has to be, and what happens when the workflow is unsure: ask in Slack, or route it to a named person.
- Choose which terms get pulled out of the contract, for example add payment terms, notice periods, or discount levels to the summary.

## FAQ

### What happens if it cannot tell which deal the contract belongs to?

It stops and asks. Rather than risk marking the wrong opportunity as won, it posts the contract details to Slack, lists the deals it considered, and asks someone to link it manually. Nothing is written to HubSpot until a person confirms.

### Will it overwrite the deal amount our rep entered?

Yes, and that is the point. It sets the amount to the value in the signed contract, which is the number that was actually agreed rather than the number that was quoted. Your previous figure stays visible in the deal history.

### Does this work with the free version of HubSpot?

Deals and notes are part of the free CRM, so the core of this works. Things like custom deal properties and multiple pipelines depend on your plan.

### Can it handle contracts with more than one signer?

Yes. It reads every recipient and the time each one signed, and uses the final signature as the close date on the deal.

### What if a contract has unusual terms?

It calls them out. Auto renewal clauses, non standard payment terms, and unusual liability or termination language get flagged in the Slack summary and included in the note saved on the deal.

Use this prompt in General Input: https://www.generalinput.com/prompts/log-signed-documenso-contracts-as-closed-won-in-hubspot