Automate Airtable record changes into PandaDoc proposals with Make.com, including merge-field mapping, line-item handling, and Slack error alerts for ops teams.
Introduction
If you generate PandaDoc proposals manually from Airtable, you already feel the pain: copy fields out of Airtable, paste them into the template, fix formatting, then copy the generated PDF link back into the record. It works until your line items get complex, a field is missing, or someone edits a record after generation.
This guide walks you through a production-style Cross-Platform Automation (XPA) that removes the copy-paste loop. When an Airtable record is marked ready, Make.com pulls the record, normalizes the data, creates a PandaDoc document from your template, then updates Airtable with the PandaDoc URL and status. When something breaks, Slack gets the exact context.
By the end, you will know how to build Airtable → Make.com → PandaDoc proposals with merge-field mapping, idempotency, and actionable failure alerts.
For the bigger picture on how XPA fits into system design, see Cross-Platform Automation (XPA).
What You'll Need
- Make.com scenario builder, with Airtable, PandaDoc, and Slack connections available.
- Airtable base with:
- A proposals table (example:
OpportunitiesorOrders). - Fields to drive the workflow:
- A boolean or status field like
generate_proposal. - Output fields like
panda_doc_document_id,panda_doc_url,proposal_status. - Line items stored either as linked records or as a pre-built string.
- A boolean or status field like
- A proposals table (example:
- PandaDoc:
- A proposal template created with merge fields that match the data you will send.
- The right template fields for customer details, proposal metadata, and the items block (often a single merge field).
- Slack:
- A channel the scenario can post into.
- Make connection permissions to post messages.
How It Works (The Logic)
At a high level, your XPA flow is:
- Trigger: Make.com watches Airtable records for changes (new/updated).
- Guard: It filters to only records where
generate_proposalis set. - Data prep: Make.com loads the full Airtable record, builds a PandaDoc-ready
itemsvalue, and normalizes dates and currency. - Idempotency: If
panda_doc_document_idalready exists, it stops to avoid duplicate proposals. - Action: It creates a PandaDoc document from your template, mapping Airtable fields to PandaDoc merge fields.
- Update: It writes
panda_doc_urlandproposal_statusback into Airtable. - Failure visibility: If validation fails or PandaDoc errors, it posts a Slack message with what failed and which Airtable record to fix.
Step-by-Step Setup
This is the advanced build pattern that stays maintainable when you add more fields later.
1) Create the Make.com scenario with an Airtable trigger
- Add an Airtable trigger: Watch Records (or the closest equivalent watch module).
- Choose the proposals table.
- Immediately follow the trigger with a filter:
- Condition:
generate_proposalequalstrue(orproposal_statusequalsReady).
- Condition:
Gotcha: If you do not filter here, every record edit will run PandaDoc again.
2) Fetch the complete record for reliable mapping
- Add Airtable: Get Record using the record ID from the trigger.
- Select all fields you need for PandaDoc merge fields:
- Customer fields (name, email, company)
- Proposal fields (number, issue date, due date, currency)
- Items source (linked line items or an Airtable string)
3) Build the items block Make-computes for PandaDoc
PandaDoc templates typically want merge fields, not raw linked-record structures. Most teams use a single merge field like {{items}}.
- If you store items as linked records:
- Use Airtable modules to retrieve the linked line items.
- Add Iterator over line items.
- Build each line into a formatted fragment, then combine with a Text aggregator.
- Example output style:
Consulting Session x2 @ 250.00Implementation Support x1 @ 500.00
- If items already exist as a text field in Airtable:
- Skip the transformation and map it directly.
Gotcha: Multi-select and linked-record fields usually need conversion. If you pass arrays directly to a merge field, the document can show empty content or throw errors.
4) Validate required fields before you call PandaDoc
Add a filter (or route logic) before the PandaDoc module.
Recommended required checks:
customer_emailis not emptycustomer_nameis not emptyproposal_numberis not emptyitems_list_text(or computed items string) is not emptytotal_amountis not empty
If validation fails, route to Slack (next step).
5) Add a dedicated Slack route for “missing data”
- Add a Slack module: Slack: Post Message.
- Include fields in the message so ops can fix quickly:
- Airtable record ID
- proposal number
- which fields failed validation
This prevents your scenario from failing silently.
6) Add idempotency so reruns do not duplicate documents
Before creating a PandaDoc document, add a conditional:
- If
panda_doc_document_idis not empty:- Stop scenario execution (or set
proposal_statustoAlready Created).
- Stop scenario execution (or set
- Else:
- Continue to the PandaDoc creation step.
Gotcha: This is the main control against duplicate PDFs when users update records after generation.
7) Create the PandaDoc document from a template
Add PandaDoc: Create Document from Template.
Configure:
template_id: your PandaDoc template- Merge field mapping:
customer_first_name← Airtablefirst_namecustomer_last_name← Airtablelast_namecustomer_email← Airtablecustomer_emailproposal_number← Airtableproposal_numberproposal_date← formatted Airtable dateitems← Make-computeditems_list_texttotal_amount← formatted currency string
Best practice: Normalize dates and currency in Make before mapping. Do it consistently for both formatting and locale expectations.
8) Capture the PandaDoc URL and document ID
Right after the PandaDoc creation module, extract:
- PandaDoc document ID
- PandaDoc document URL (or share URL, depending on your PandaDoc configuration)
If your PandaDoc module returns a response with different property names, map from the response fields you actually receive in Make.
9) Update Airtable with output fields
Add Airtable: Update Record. Update:
panda_doc_document_id← PandaDoc response document IDpanda_doc_url← PandaDoc response URLproposal_status←Created(orSent, if you share in the same run)generate_proposal←false- optionally
proposal_generated_at← current timestamp
Gotcha: Use the same record ID you got from the trigger, not a line item record ID.
10) Add a final error path for PandaDoc API failures
Wrap with error handling so PandaDoc failures do not just end the run.
- Route errors to Slack: Post Message.
- Include:
- Airtable record ID
- PandaDoc step
- the raw error message text from Make
This makes debugging fast, especially when you add more templates.
Real-World Business Scenario
An agency runs delivery proposals from Airtable. Ops marks generate_proposal = true when a scope is approved. The Make.com scenario generates the PandaDoc proposal instantly, using a strict merge-field map and a computed items block.
Ops then sees the generated PandaDoc URL and proposal_status = Created directly in Airtable. If someone forgets to add a customer email or a required item, Slack gets a message with the exact record ID and missing fields. The team stops spending time hunting for what went wrong and returns to delivery work.
Common Variations
- Create then approve, then send
- Split into two scenarios:
- Scenario A generates the PandaDoc document and stores the URL.
- Scenario B sends it only when an Airtable approval checkbox flips.
- Route by proposal type to different PandaDoc templates
- In Make, add a router based on Airtable
proposal_type:- Template A for retainers
- Template B for one-off projects
- Filter by business rules, not just
generate_proposal
- Only generate when
client_approved = trueandtotal_amount > 0.
The outcome you should expect
Your Airtable records now produce PandaDoc proposals automatically via Make.com, with:
- Correct merge-field mapping
- Consistent formatting for dates and currency
- Line item normalization into a PandaDoc-ready items block
- Idempotency so reruns do not spam duplicates
- Slack alerts that tell you exactly which record needs attention
If you want a hand mapping your exact Airtable fields to your PandaDoc template merge fields, Olmec Dynamics builds these Cross-Platform Automation workflows for real teams. You can see how we approach XPA delivery on our site and Cross-Platform Automation (XPA) for the XPA mindset behind the build.