You get a lead at 2 PM. By the time you've gathered requirements, written the proposal, formatted it, had someone proofread it, exported the PDF, and emailed it — it's Thursday. The lead has already talked to three competitors who responded faster.
Speed wins deals. Not flashy designs. Not 40-page documents. Speed.
According to a Zendesk benchmark, responding to a lead within an hour makes you 7x more likely to qualify them. Most small businesses take 2–3 days to send a proposal. That's 2–3 days of the client shopping around, forgetting about you, or going with the first responder.
The fix isn't hiring a proposal writer. It's automating the mechanical parts so you can focus on the 20% that actually requires human judgment.
Here's an n8n workflow that takes submitted lead data, generates a formatted proposal document, creates a PDF, and emails it to the prospect — all within minutes of their initial inquiry.
The Problem: Proposals Are 80% Boilerplate
Look at your last 10 proposals. I'll bet they share 80% of the same structure:
- Introduction and company overview
- Scope of work (with a few line items swapped)
- Pricing section (pulled from a rate card)
- Timeline and milestones
- Terms and conditions
- Next steps
The only parts that change per proposal are the client name, specific deliverables, pricing for their scope, and timeline. Everything else is copy-paste — and copy-paste is exactly what automation should handle.
When you write proposals manually, you're spending 4–5 hours on what should take 30 minutes of review and 2 minutes of generation.
The Architecture: Lead Form to Sent Proposal
Here's the end-to-end flow:
Webhook Trigger (lead form submission)
→ Validate and enrich lead data
→ Look up pricing from rate card (Google Sheets)
→ Select template based on service type
→ Populate proposal template (Docu-templating or Google Docs)
→ Generate PDF
→ Send proposal email to prospect
→ Log proposal to CRM/tracking sheet
→ Notify team in Slack
→ Schedule follow-up reminder (3 days)
The entire pipeline runs in under 5 minutes from form submission to proposal in the client's inbox.
Step 1: Webhook Trigger — Catch the Lead
Start with a Webhook node that receives form submissions from your lead intake (Tally, Typeform, or a custom form).
{
"node": "Webhook",
"parameters": {
"httpMethod": "POST",
"path": "generate-proposal",
"responseMode": "lastNode"
}
}
The webhook receives a payload like:
{
"name": "Jordan Rivera",
"email": "jordan@riveraconsulting.com",
"company": "Rivera Consulting Group",
"service": "monthly-retainer",
"budget_range": "5000-10000",
"notes": "Looking for ongoing marketing support, 6-month engagement"
}
Validate the basics right away — required fields present, email format valid. If validation fails, send a polite error response and skip the rest of the workflow. No point generating a proposal for an incomplete lead.
Step 2: Look Up Pricing from Your Rate Card
Connect a Google Sheets node that reads your rate card. This is where you maintain your pricing by service type, tier, and any add-ons.
Your rate card sheet might look like:
| Service | Tier | Monthly Price | Setup Fee | Deliverables |
|---|---|---|---|---|
| monthly-retainer | standard | $3,500 | $1,000 | Strategy + 12 posts/mo |
| monthly-retainer | premium | $6,000 | $2,000 | Strategy + 20 posts + ads |
| project-based | standard | $5,000 | — | Audit + report |
| project-based | premium | $8,500 | — | Audit + report + implementation |
The workflow matches the service field from the form to the rate card, then picks the tier based on the budget_range. This means your proposals always reflect current pricing — update the sheet once, and every proposal from that point forward uses the new numbers.
No more "oops, I quoted last year's rate."
Step 3: Generate the Proposal Document
Use an HTTP Request node or a document-generation service (like Docu-templating or the Google Docs API via n8n) to populate your proposal template.
The template has placeholders like {{client_name}}, {{company_name}}, {{scope_description}}, {{monthly_price}}, {{setup_fee}}, and {{deliverables}}. The workflow maps the lead data and rate card lookup results into these fields.
Here's the key design decision: keep the template simple and modular. Three sections max — scope, pricing, and next steps. Clients don't read 15-page proposals. They read the pricing page and the deliverables bullet list. Optimize for that reality.
If you're using Google Docs as your template engine, the n8n Google Docs node can duplicate a template document and perform find-and-replace operations on the copy:
{
"node": "Google Docs - Copy Template",
"parameters": {
"operation": "copy",
"fileId": "YOUR_TEMPLATE_FILE_ID",
"name": "Proposal - {{company_name}} - {{date}}"
}
}
Then a follow-up node replaces the placeholders:
{
"node": "Google Docs - Replace Placeholders",
"parameters": {
"operation": "replaceAll",
"fileId": "{{$('Copy Template').json.id}}",
"replacements": [
{ "find": "{{client_name}}", "replace": "={{$json.name}}" },
{ "find": "{{company_name}}", "replace": "={{$json.company}}" },
{ "find": "{{monthly_price}}", "replace": "={{$('Rate Card').json.monthly_price}}" },
{ "find": "{{deliverables}}", "replace": "={{$('Rate Card').json.deliverables}}" }
]
}
}
Step 4: Create the PDF
Use a PDF conversion node. If you went the Google Docs route, n8n's Google Drive node can export as PDF:
{
"node": "Google Drive - Export PDF",
"parameters": {
"operation": "download",
"fileId": "{{$('Copy Template').json.id}}",
"mimeType": "application/pdf"
}
}
If you prefer self-hosted document generation, the n8n-nodes-document-generator community node or a simple Puppeteer-based microservice work well. The key is getting a clean PDF with your branding — logos, colors, fonts.
Step 5: Send the Proposal Email
Use the Send Email node (or Gmail/SMTP node) to deliver the proposal:
{
"node": "Send Email",
"parameters": {
"fromEmail": "proposals@smbscaleup.com",
"toEmail": "={{$json.email}}",
"subject": "Your Proposal from SMB Scale Up — {{$json.company}}",
"body": "Hi {{$json.name}},\n\nThanks for reaching out. We've put together a proposal based on your requirements.\n\nPlease find it attached. We'd love to chat through the details — feel free to book a call at your convenience.\n\nBest,\nThe SMB Scale Up Team",
"attachments": "={{$('Export PDF').json.data}}"
}
}
Keep the email short. The proposal PDF does the heavy lifting. The email's only job is to get the attachment opened.
Step 6: Log and Notify
Two final nodes:
Google Sheets — Log Proposal: Append a row to your proposal tracking sheet with the client name, service, price, date sent, and status ("sent").
Slack — Notify Team: Post a message to your sales channel: "NewProposal sent to {{$json.company}} — {{$json.service}} @ {{$json.monthly_price}}/mo"
This gives your team visibility without anyone having to remember to update a spreadsheet manually.
Step 7: Schedule the Follow-Up
Add a Wait node set to 3 days, then a follow-up email:
Wait (3 days)
→ Send follow-up email ("Checking in on your proposal...")
→ Update tracking sheet status to "followed-up"
Three days is the sweet spot — long enough that they've read the proposal, short enough that you're still top of mind. Most small businesses never follow up on proposals. Automating the follow-up alone puts you ahead of 80% of your competitors.
The ROI: Hours Back, Deals Closed Faster
Here's what this workflow delivers:
| Metric | Manual Process | Automated Workflow |
|---|---|---|
| Time from lead to proposal | 2–3 days | 5 minutes |
| Hours per proposal | 4–5 hours | 15 minutes (review only) |
| Follow-up consistency | Maybe | Always, day 3 |
| Pricing accuracy | Manual lookup | Rate card synced |
| Proposal tracking | Spreadsheet you forget to update | Automatic logging |
At 10 proposals per month, that's 35–40 hours reclaimed. And faster proposals mean more deals — not just because you're first, but because you're responsive. Responsiveness signals professionalism. Professionalism wins contracts.
Getting Started
Build your rate card in Google Sheets first. This is the single most important piece — if your pricing is messy, your proposals will be messy regardless of automation.
Create a clean proposal template. Three sections: what you'll do, what it costs, what happens next. That's it. Don't overcomplicate the template.
Set up your lead form. Make sure it captures service type and budget range — those two fields drive the entire proposal generation.
Build the workflow in stages. Start with webhook → template → PDF → email. Add the rate card lookup and follow-up scheduling once the core pipeline works.
Review every proposal before it goes out. Automation handles the boilerplate. You handle the 20% that needs a human touch — custom scope adjustments, relationship-building language, strategic pricing decisions.
The goal isn't to remove yourself from proposals entirely. It's to remove the 80% that's pure mechanical repetition so you can spend your time on the parts that actually close deals.
Have questions about setting up proposal automation for your business? Drop a comment — happy to share more specifics on the n8n configuration.
Top comments (0)