Automate PandaDoc status updates to Airtable and Slack in Make.com, with webhook dedupe, idempotent upserts, and a sign-ready notification flow.
Introduction
When a PandaDoc document moves from “sent” to “viewed” to “signed,” your operations team needs that status in Airtable and a clear Slack notification. The manual way is usually spreadsheet checks, searching by name or email, copy-pasting status values into Airtable, and then sending a Slack message that still needs follow-up when someone spots a mismatch.
This is exactly the kind of Cross-Platform Automation (XPA) workflow you want: PandaDoc emits events, Make.com normalises them, Airtable becomes the system of record, and Slack becomes the human alert layer. By the end, you will know how to build a production-ready Make.com scenario that handles duplicates, late webhooks, and partial payloads.
What You'll Need
- PandaDoc account with access to your documents
- PandaDoc API access and a way to configure webhooks or an existing PandaDoc status event mechanism
- Airtable base with a table for document status tracking (IDs, status, timestamps, and links)
- Slack workspace and a channel where you want notifications
- Make.com account, paid plan recommended for reliable webhook execution and retries
- Permissions:
- Make.com connected to PandaDoc, Airtable, and Slack
- Airtable API access token with permission to create and update records
If you are new to XPA patterns like this, this primer helps with the general approach: Cross-Platform Automation (XPA).
How It Works (The Logic)
Make.com uses a webhook trigger for PandaDoc status events. For each event, it extracts document_id, event_id (or the closest equivalent unique identifier), and the new status. It then runs an idempotency check using a processed-events store. If the event is new, it upserts the corresponding record in Airtable, updates the latest status and timestamps, and posts to Slack only for actionable transitions like Signed or Declined.
This logic assumes webhook delivery is at-least-once, so duplicates and out-of-order events are expected and handled.
Step-by-Step Setup
1) Create Airtable tables that support idempotency
In Airtable, build two tables.
Table A: Document Status Tracking
PandaDoc Document ID(single line text, indexed if possible)Envelope/Doc URL(URL or text)Current Status(single select with values like Sent, Viewed, Signed, Declined, Completed)Last Status Change At(date-time)Last Event ID(single line text)Recipient Email(single line text, optional)
Table B: Processed Webhook Events
Event ID(single line text, unique in practice)PandaDoc Document ID(text)Event Type(text)Received At(date-time)Outcome(single select: success, error, ignored)
This is the simplest way to make the Make.com scenario safe under retries.
2) Build a dedicated Make.com scenario that receives PandaDoc webhooks
- In Make.com, create a new Scenario
- Add the trigger: Webhooks > Custom webhook
- Set it to accept POST
- Copy the webhook URL and register it in PandaDoc’s webhook configuration
Gotcha: configure PandaDoc to send status transitions you actually care about, for example signed, declined, completed. Do not ingest every internal draft update unless you need it.
3) Normalise webhook payload fields right after the trigger
Immediately after the webhook trigger, add steps to extract:
event_id(prefer a unique per-event ID if PandaDoc provides one)document_id(PandaDoc document identifier)event_type(status changed, signed, declined, etc.)new_status(raw value)event_timestamp(convert to ISO 8601 UTC if needed)recipient_email(if present)doc_url(if present)
In Make.com, use Tools modules like JSON parse, then set variables so the rest of your scenario is not coupled to payload shape.
4) Deduplicate before you touch Airtable
Add an Airtable search for Processed Webhook Events.
- Module: Airtable > Search records
- Base:
Processed Webhook Events - Filter:
Event IDequalsevent_id
Then:
- If found: stop the scenario (Outcome = ignored)
- If not found: continue
This prevents duplicates from churning Airtable and spamming Slack.
5) Enrich missing fields only when needed
If your webhook sometimes omits recipient_email or the document URL:
- Add a conditional step: if
recipient_emailis empty, call PandaDoc > Get Document (or equivalent PandaDoc API request) - Extract the missing values
Only call the PandaDoc API when fields are missing. This keeps latency and API usage under control.
6) Map PandaDoc statuses to your Airtable “Current Status” enum
Create a mapping step using Make.com tools or a router:
- PandaDoc sent → Airtable Sent
- PandaDoc viewed → Airtable Viewed
- PandaDoc signed → Airtable Signed
- PandaDoc declined → Airtable Declined
- PandaDoc completed → Airtable Completed
If your statuses do not map one-to-one, normalise to stable Airtable values so your Slack filters are consistent.
7) Upsert the Airtable record safely
Make.com does not give you a true “atomic upsert” in Airtable by default, so implement upsert as search then update/create.
-
Step A: Airtable > Search records in
Document Status Tracking- Filter:
PandaDoc Document IDequalsdocument_id
- Filter:
-
Step B:
- If found: Airtable > Update record
- If not found: Airtable > Create record
Update fields:
Current Status= mapped statusLast Status Change At=event_timestampLast Event ID=event_idRecipient Email=recipient_emailEnvelope/Doc URL=doc_url
Gotcha: if you receive out-of-order events, consider adding a timestamp guard. Only update Airtable if event_timestamp is newer than Last Status Change At.
8) Post to Slack only for actionable transitions
Before the Slack step, add a filter.
Slack rule examples:
- Send only when
new_statusin [Signed, Declined, Completed]
Then:
- Module: Slack > Send a channel message
Suggested message:
PandaDoc {{document_id}} is now *{{new_status}}*Recipient: {{recipient_email}}Airtable: {{record_url}}
Capture the Airtable record ID during upsert so you can build a direct record URL.
9) Mark the event as processed after success
After Airtable upsert succeeds, create a row in Processed Webhook Events.
- Module: Airtable > Create record in
Processed Webhook Events - Set:
Event ID=event_idPandaDoc Document ID=document_idEvent Type=event_typeReceived At= nowOutcome= success
If Slack fails after Airtable update, you still want the state to be correct. You can treat Slack as “best effort” and still mark the event processed.
10) Add failure handling that ops can replay
Use Make.com’s error handling route.
On persistent failure:
- Post a message to a private ops Slack channel with:
event_iddocument_id- error text
- Do not write a “success” processed-event row
Optionally add a manual replay mechanism, for example a separate Airtable table where ops can paste an event_id to re-run processing.
Real-World Business Scenario
A legal operations team at a services business runs NDA and MSA approvals through PandaDoc. Their Airtable base is used as the internal status dashboard for each matter, while Slack is the channel for immediate action when signature completes.
After switching to this Make.com pipeline, every PandaDoc Signed or Declined transition updates the correct Airtable record through idempotent upserts. Duplicates no longer cause multiple Airtable churns, and Slack gets notified exactly when a meaningful state boundary is crossed.
The operational outcome is simple: fewer “did it sign?” messages, faster triage, and an audit-like history in the processed-events table that makes incident troubleshooting straightforward.
Common Variations
- Route by recipient domain: add a filter so Slack messages only fire for specific email domains, for example company.com.
- Create follow-up tasks: on Signed, create a ClickUp task or an Asana task using the Airtable record ID and link it back to Airtable.
- Add a daily reconciliation job: schedule a Make.com scenario that pulls PandaDoc document status for the last N days and checks Airtable drift using
Last Event IDandLast Status Change At.
What you built, and how we help
You built an advanced PandaDoc status sync that works the way real Cross-Platform Automation (XPA) should: webhook ingestion in Make.com, strict deduplication, safe Airtable upserts, and Slack notifications only for actionable transitions.
Olmec Dynamics builds and hardens these exact PandaDoc → Airtable → Slack workflows, including the production details like idempotency windows, replay mechanics, and runbooks. If you want help implementing this for your document lifecycle, start at Olmec Dynamics.