The Proposal Autopilot
Turns a finished discovery call into a branded PDF proposal in the client's inbox. No re-listening, no manual drafting.
Section One
What You're Building
A system that turns a finished discovery call into a proposal sitting in the client's inbox, with nobody re-listening to anything. The moment a client record is marked ready in Airtable, it finds the matching call in Fireflies, pulls the full transcript, and hands it to Claude.
Claude reads the conversation and drafts four sections: what we discussed, key takeaways, what happens next, and pricing. A code step builds that straight into a branded HTML proposal using the client's name, business, and logo already sitting in Airtable, converts it to a PDF, and emails it from Gmail.
Nobody opens a template. Nobody plays back a recording to remember what was quoted. The proposal reads like someone was paying close attention on the call, because something was.
Sections
4 sectionsWhat We Discussed
From transcriptKey Takeaways
From transcriptWhat Happens Next
From transcriptPricing
From transcriptIncludes
Branded HTML template
Includes
Auto-converts to PDF
Includes
Sends via Gmail
Fig. 1 — system flow
Trigger
Airtable
Client record marked ready
Fetch
Fireflies
Matches the transcript by client email
Draft
Claude
Writes the 4 sections from the transcript
Deliver
PDF.co + Gmail
Converts to PDF, sends to the client's inbox
The rule that makes this work
Claude only writes the words. A code step builds the HTML, not a second AI call. That's the difference between a proposal that renders correctly every time and one you're babysitting for broken tags and hallucinated links.
Section Two
What You Need
▸ Prerequisites
- Claude connected to n8n via the MCP connector
- Airtable Clients table set up with the required fields
- Discovery calls already recording, titled or tagged with the client's email
- PDF.co account created, API key grabbed from settings
- Gmail OAuth2 credential connected in n8n
▸ The Stack
A note on Claude. You are not going to build a single node by hand. You connect Claude to your n8n account, describe the system in plain language, and Claude builds it, tests it, and fixes its own errors while you watch. Each step below is either a two-minute setup task or a prompt you paste into Claude.
Total stack cost if you're starting from zero: Fireflies and PDF.co both have usable free tiers, so this often runs for close to the price of n8n alone (plus a Claude plan that supports connectors).
Section Three
Step-by-Step Build
01
Step One
Connect Claude to n8n
In n8n: Settings, then n8n API, create an API key. In Claude (claude.ai): Settings, Connectors, Add custom connector, name it n8n, and use your instance MCP URL: https://YOUR-INSTANCE.app.n8n.cloud/mcp-server/http with the API key. Once connected, Claude can create, edit, run, and debug workflows in your account.
02
Step Two
Two-minute prerequisites
Airtable: build (or point at) a Clients table with the fields from Section II. Fireflies: confirm your discovery calls are already being recorded and titled or tagged with the client's email. PDF.co: create an account and grab the API key from settings. Gmail: connect the OAuth2 credential in n8n.
03
Step Three
Paste the build prompt
Open a Claude chat with the n8n connector on, paste the prompt below with your base and table IDs filled in, then watch it work. A full build takes a few minutes.
Copy this: the build prompt
Connect to my n8n and build a workflow called Client Proposal Autopilot. My values: Airtable base ID = [YOURS], Clients table ID = [YOURS]. The system, in order: 1. Manual trigger for now (we'll swap this for an Airtable automation once it's tested). 2. Get Client Record: Airtable search on the Clients table for the record I specify. Use .first() everywhere downstream, not .item, which is unreliable on single-record searches. 3. List Fireflies Transcripts: GraphQL request for all transcript titles and ids on the account. 4. Find Matching Transcript: a code node that searches the list for a title containing the client's email, and throws a clear error if nothing matches. 5. Get Full Transcript: GraphQL request for that transcript's full sentence data. 6. Combine Transcript Text: code node, joins the sentences into one string. 7. Generate Proposal Sections: an AI Agent node (Claude) with a Structured Output Parser, given the full transcript, returning a sections array: What We Discussed, Key Takeaways, What Happens Next, Pricing. 8. Build Proposal HTML: a code node that assembles the branded proposal directly from the Airtable fields (name, business, logo) plus the AI sections. Do not use a second AI call for this step. 9. Convert HTML to PDF: HTTP request to PDF.co. 10. Download PDF: pull the binary from PDF.co's returned URL. 11. Send Proposal Email: Gmail node, sends the PDF to the client's email from Airtable. Use my existing credentials for Airtable, Fireflies, Anthropic, PDF.co, and Gmail. Remember every field read off an Airtable node needs .json.fields, not straight off .json. Build it, then validate it, and tell me what you built before running anything.
04
Step Four
Test it with Claude
Paste the test prompt below. Claude runs the workflow, reads its own execution logs, and repairs whatever breaks. This loop is the entire debugging experience: you never open an error message yourself.
Copy this: the test prompt
Run the workflow manually against one client record. Check the execution: if any node failed, read the error, fix the node, and run it again. Repeat until the proposal PDF lands in the test inbox. Do not wire up the Airtable trigger yet. When it succeeds, summarize what happened at each node.
Why this works
The email landing in the inbox IS the test passing. Everything upstream of Gmail had to work for that PDF to exist, so one visible result verifies eleven invisible steps.
05
Step Five
Turn it on
Confirm the test proposal opened correctly, logo and pricing included. Then swap the manual trigger for an Airtable automation: "when a record's status changes to Ready for Proposal, run this workflow." From there, marking a client ready in Airtable is the only step anyone has to remember.
A few things that trip people up
Why did my Airtable fields come back empty?Airtable data comes back nested under .fields, not flat on the record. Read every field off .json.fields, not straight off .json — it's an easy way to burn a full test run before you catch it.
Why does PDF.co say I'm not authenticated?PDF.co's API key goes in a header named x-api-key, not a Bearer token. Sending it as Authorization: Bearer looks exactly like an auth failure until you know that.
Section Four
The Upgrade Path
Run it against a handful of real calls before you trust it unattended. You're not just checking for errors, you're checking whether the four sections actually reflect what got said, and whether pricing pulls the right number from Airtable instead of guessing. Once ten proposals in a row need no edits, it's ready to run on the Airtable trigger without you watching.
From there the same skeleton scales sideways. The same transcript-matching pattern works for onboarding calls, contract renewals, or any other "catch up on what was said and produce a document" task. And nothing here is locked to one vendor: if PDF.co ever changes terms, the HTML-to-PDF step is a single swappable node.
“The email landing in the inbox IS the test passing. Everything upstream of Gmail had to work for that PDF to exist, so one visible result verifies eleven invisible steps.”
— The Proposal Autopilot, p. 6
§ Fin.
Rather have it built for you?
This guide is one system from the Soulwire Studio workflow library. We build AI automations for businesses that run on process: intake, scheduling, proposals, compliance-heavy operations. If you'd rather spend your time closing deals than debugging automation, book an audit and we'll find the automation hiding in your business.

