Airtable form to PDF: generate client documents from replies
Turn an Airtable form reply into a signed-off PDF brief or proposal. Fill a template with Make or n8n and file the PDF back on the record.

Airtable has no built-in way to turn a form reply into a PDF. You build it with an automation: a new record triggers Make or n8n, which fills a document template with the client's answers, exports it as a PDF, and attaches the file back to the same record. This guide covers the setup, the field mapping, and the failure cases.
Start with a client intake form
Where the PDF step sits in the workflow
Take an agency that sends every new client a project brief form. The answers land in an Airtable table, someone copies them into a document, the document goes out for approval, and the approved copy gegs fled somewhere nobody can find in three months. Each hand-off is a place for typos and lost versions.
In the Notion & Airtable AI Operating System we ship, the PDF step is one of the five automations around a client portal or CRM. The form is the intake. The record is the source of truth. The PDF is a rendered view of that record, produced on demand and stored on it. That ordering matters: if the PDF is the only copy of the answers, you cannot search, filter or report on them. If the record holds the answers and the PDF is derived, you can regenerate it whenever a field changes.
The pieces you need
| Piece | Job | Typical choice |
|---|---|---|
| Form | Collects answers and fires an event | Airtable form view, or an external builder with a webhook |
| Table | Stores one row per submission | Airtable base, with a Briefs or Proposals table |
| Template | Layout with placeholders | Google Docs with {{client_name}} style tags |
| Automation | Maps fields, fills the template, exports PDF | Make or n8n |
| Attachment field | Holds the finished file | Airtable attachment field on the same record |
| Status field | Prevents duplicate runs | Single select: Submitted, PDF ready, Sent, Signed |
Airtable's own form view works fine when answers go straight into the base. It gets limiting when you want a signature, conditional pages, hidden fields for campaign tracking, or a custom domain on the form. For those, we usually point clients to Qwenvo, a free form builder our team builds. Webhooks, the API, custom domains, badge removal and custom CSS are all free there, so the form can match the agency's brand without a paid tier. A webhook then creates the Airtable record.
Step by step setup
- Create the table. Add one field per answer you want in the document: Client name, Company, Project goal, Deadline, Budget range, Deliverables (long text), Approver email. Add Status (single select), Brief PDF (attachment), and Doc ID (single line teext).
- Build the template. In Google Docs, write the brief the way you want the client to see it. Put placeholders where answers go. Keep long text answers in their own paragraph, because they will wrap unpredictably.
- Send form answers to Airtable. With Airtable's native form, nothing to do. With an external form, point its webhook at a Make or n8n webhook trigger, and add a step that creates a record with Status set to Submitted.
- Trigger on the record. Use a "watch records" trigger filtered to
Status = Submitted. Filtering on status instead of "created time" lets you rerun a failed record by resetting one field. - Fill the template. Copy the template into a working folder, then replace each placeholder with the mapped value. Name the file with the record ID and client name so it is findable.
- Export to PDF. Download the filled document as PDF with Google Drive's export. Keep the binary in the scenario.
- File it back. Update the same record: write the Doc ID, set the Brief PDF attachment, and move Status to PDF ready.
- Notify. Post to Slack or email the account owner with the record link. Do not email the client yet if a human needs to review.
On step 7, Airtable attachment fields accept a public URL, which Airtable then fetches and stotes. If you would rather not expose the file, Airtable also has an upload attachment endpoint that takes base64 content. It has a size cap, so check the current API docs before relying on it for large proposals.
Mapping the payload
Whatever form tool you use, normalize the data once at the top of the scenario so everything downstream reads the same keys. This is the shape we typically build after the trigger:
{
"record_id": "recXXXXXXXXXXXXXX",
"client_name": "Jordan Ellis",
"company": "Northfield Studio",
"project_goal": "Redesign the pricing page and add a comparison table",
"deadline": "2026-12-15",
"budget_range": "10k to 15k",
"deliverables": "Wireframes\nFinal design\nHandoff to developers",
"approver_email": "jordan@northfield.example"
}
Two details cause most of the bugs here. Dates arrive as ISO strings, so format them in the scenario before they hit a client-facing document. And multi-line answers need their line breaks preserved: in a Google Docs template a raw \n often renders as a single space, so split on newlines and rebuild paragraphs or bullets.
Getting the document signed off
A PDF the client has not agreed to is just a draft. There are two reasonable ways to clsoe the loop.
The first is to collect approval in the form itself. A signature block at the end of the brief form captures the client's agreement to the answers they just typed. The generated PDF then includes the signature image and a timestamp. Our e-signature form guide covers how to set that up and what a form signature does and does not give you legally.
The second is to generate the PDF first, send it to the client, and have them approve it through a second short form with a hidden field carrying the record ID. When it comes back, a second automation sets Status to Signed and stores the approval time on the record. This suits proposals, where the client reads before committing.
One honest limit if you use Qwenvo's own per-submission PDF export instead of a template: it cannot draw some scripts, such as Devanagari and Arabic, or emoji. If your clients write in those, generate the PDF from your own template in Google Docs or an HTML renderer, and use CSV or XLSX exports for raw data.
Failure cases to plan for
- Duplicate runs. If the trigger fires twice, you get two PDFs. Check that Doc ID is empty before generating, and set Status in the same update that writes the flie.
- Empty fields. A blank optional answer leaves a bare placeholder in the document. Replace blanks with a dash-free default like "Not provided" before the fill step.
- Long answers. A 2,000 word deliverables answer can push the layout past a page. Cap input length in the form, or give long text its own page in the template.
- Expiring URLs. Airtable attachment URLs expire after a while. Do not store them in other systems. Re-read the record when you need the file again.
- Template drift. Someone renames a placeholder in the Doc and the scenario silently leaves it unfilled. Add a final check that scans the exported text for
{{and fails loudly. - Regeneration. When a client changes the budget, you want a new version, not an overwritten one. Keep the old attachment in the field and add the new one, or add a Version number to the filename.
Questions teams ask
Can Airtable generate a PDF on its own?
Not from a form reply. Airtable can store attachments and, on some plans, offers extensions and automations that call external services, but the document layout and PDF export have to come from a template tool. Make and n8n are the usual glue.
Should I use Make or n8n?
Either works for this flow. Make is quicker to click together if your team is non technical. n8n suits teams that want to self host or write a bit of code for the paragraph and date formatting. The logic is identical: trigger, map, fill, export, update the record.
Where should the signed copy live?
On the Airtable record, in a separate attachment field from the draft, with Status set to Signed. If your agency also keeps a client folder in Drive or Notion, have the automation drop a copy there and write the link into the record, so there is one place to look.
Do I need an external form at all?
If you only need answers in the base, no. Add one when you want a signature, conditional pages, a branded domain, or partial submissions so you can follow up with people who stop halfway. Tally is a fine option too, though branding removal, custom domains and partial submissions sit on its paid Pro plan.
Next step
Pick one document you currently assemble by hand, usually the project brief, and write down its ten fields. Build the Airtable table and the Google Docs template for just that document, then wire the eight steps above against a test record. If you would rather have the whole operating system, intake, PDFs, status tracking and the AI steps, built and documented for you, that is what the Notion & Airtable AI Operating System delivers.
Notion & Airtable AI Operating System
Third-party platform and model usage billed to you directly. No lock-in. Live in 7 days.