Mirror Adobe Sign agreements into a Notion contracts database

By General Input

Every time an Adobe Sign agreement changes state, the matching row in your Notion contracts database is created or updated so legal and ops share one live tracker.

Integrations

  • Adobe Acrobat Sign
  • Notion

Type

Deterministic Code

Categories

  • Operations

Every time an Adobe Acrobat Sign agreement changes state, I want to mirror that agreement into our Notion contracts database so legal and ops have one live source of truth. This is deterministic and should run as code, not an agent.

Trigger: a webhook from Adobe Sign firing on agreement lifecycle events. I want to react to sent, signed, completed, cancelled, expired, and rejected. Ignore other event types.

When a webhook arrives, extract the Adobe Sign agreement ID and the event timestamp from the payload. Then call Adobe Sign Get Agreement to pull the latest metadata for that agreement (name, status, senderEmail, createdDate, lastModifiedDate, and the participant set summary), and Adobe Sign Get Agreement Members to pull the full participant list so we can capture counterparty name(s) and signer emails.

Next, use Notion Query a Data Source against the contracts database, filtering the "Agreement ID" property equal to the Adobe Sign agreement ID. The result tells us whether a page already exists for this agreement.

If no page exists, call Notion Create a Page under the contracts data source and populate the properties: title (the agreement name), Agreement ID (the Adobe Sign agreement id — this is the deterministic key), Counterparty (comma-joined names of non-sender participants from Get Agreement Members), Sender (senderEmail), Status (the Adobe Sign status: OUT_FOR_SIGNATURE, SIGNED, COMPLETED, CANCELLED, EXPIRED, REJECTED — map to friendly labels if the client has a status select configured), Sent Date (createdDate), Last Modified (lastModifiedDate), Signer Emails (comma-joined emails of signer participants), and Agreement Link (a URL back to the agreement in Adobe Sign, of the form https://secure.<shard>.adobesign.com/account/agreements/<agreementId> using the account's data center).

If a page already exists, call Notion Update a Page for that page id and refresh the same fields, with one guardrail for out-of-order events: before overwriting Status and Last Modified, compare the incoming lastModifiedDate from Get Agreement to the Last Modified value already stored on the Notion page. If the incoming timestamp is older or equal, leave Status and Last Modified alone (but still refresh Counterparty and Signer Emails, since those are derived from the current agreement snapshot). If the incoming timestamp is newer, overwrite Status and Last Modified as well. This makes the workflow safe against webhook retries and out-of-order delivery.

Configuration the user should be able to set: the Notion database (data source) id, the exact Notion property names for Agreement ID / Counterparty / Sender / Status / Sent Date / Last Modified / Signer Emails / Agreement Link (defaults to those names), and the set of Adobe Sign event types that should trigger the sync.

Error handling: if Get Agreement returns RESOURCE_NOT_FOUND, log and exit (the agreement may have been deleted). If Notion Query a Data Source returns more than one page for the same Agreement ID, update the most recently edited one and log a warning about the duplicate. Honor Retry-After on 429s from both services.

Related prompts

Explore more prompts
Screen chartered vessels for AIS gaps and sanctions red flagsCompare candidate store locations with drive time trade areasBrowse every competitor ad and build a Notion swipe fileAudience persona studio for brand and product marketersArtwork desk for the Notion posts still missing an imageShare of voice dashboard for your brand and competitorsInfluencer campaign roster board with AI creator briefsSmart home entity health cockpit for Home AssistantOpen model approval desk for your production AI stackBid board that watches every procurement portal for you