🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Google Slides + Gmail proposals, approved in Sheets

Lisa Granqvist Partner Workflow Automation Expert

Proposals have a sneaky way of turning into rework. You draft something in a doc, copy it into slides, paste it into an email, then someone asks for “one small change,” and suddenly you’re hunting down the latest version again.

This proposal approval automation hits sales ops first, but freelancers sending retainers and agency teams pushing client SOWs feel the same friction. You want fast turnaround without sacrificing control, and you want a clear “approved” moment before anything gets sent.

This n8n workflow generates a proposal from a form, drafts the email, stores everything in Google Sheets for review, then sends a polished PDF through Gmail only when you mark it READY. Below, you’ll see exactly how it works, what you need, and what you can tweak.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Google Slides + Gmail proposals, approved in Sheets

The Problem: Proposals Get Stuck in Draft Hell

When proposals are manual, “sending a proposal” is rarely one task. It’s collecting notes after a call, rewriting sections to match the client, formatting it so it looks like your brand, converting to PDF, then writing an email that doesn’t sound rushed. After that, you still need internal review, which usually lives in Slack threads and half-updated spreadsheets. The result is slow turnaround, avoidable mistakes, and that lingering worry that you sent the wrong file.

The friction compounds. Here’s where it breaks down most often.

  • You rewrite the same core proposal sections over and over, which burns about 2 hours on a “simple” deal.
  • Approvals are scattered across email and Slack, so “final” is a guess instead of a status.
  • File naming and storage drift fast, and next month you cannot find what you sent.
  • Manual PDF exports and Gmail attachments invite errors, especially when you’re rushing before end of day.

The Solution: Generate, Review, Approve, Then Send

This workflow turns proposals into a controlled pipeline instead of a messy scramble. It starts with an n8n Form that captures the essentials right after a sales call (client name, scope, timeline, pricing, and any notes). OpenAI then generates structured proposal content based on your prompts, and n8n copies your chosen Google Slides template to create a fresh proposal deck for that client. The workflow fills in the Slides placeholders, creates a tailored email draft, and logs everything into Google Sheets as a simple “database” with a clear status.

Nothing goes out automatically. You review the proposal link and email draft inside Sheets, make edits if you want, then flip the status to READY. Only then does n8n export the Slides file as a PDF, send it via Gmail, store it in Google Drive, and update the status to SENT so everyone knows it’s done.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you send 10 proposals a week. Manually, even a careful process can take about 2 hours each (drafting, formatting in Slides, exporting PDF, writing the email, filing it), which is roughly 20 hours weekly. With this workflow, submitting the form takes maybe 5 minutes, generation and template fill runs in the background, and your review/approval in Google Sheets is often about 10 minutes. That’s closer to 2–3 hours a week total, not 20.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets for approval status and tracking.
  • Google Slides to generate the proposal from a template.
  • Gmail to send the PDF after approval.
  • Google Drive to store templates and generated PDFs.
  • OpenAI API key (get it from your OpenAI API settings page).

Skill level: Intermediate. You’ll connect Google credentials, paste a few IDs (Sheet, folder, template), and adjust prompts to match your voice.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A form submission kicks everything off. After a call (or whenever you’re ready), you submit an n8n Form with the deal details. That becomes the single source of truth for what the proposal should include.

AI turns those inputs into structured content. OpenAI generates the proposal sections in a predictable format, then n8n extracts the fields it needs (think: title, scope bullets, timeline, pricing, next steps) so they can be placed into a template without manual copying.

Google Slides becomes the “production file.” The workflow duplicates your Slides template, moves it into your “Generated Proposals” Drive folder, and fills in placeholders with the generated content. After that, it creates a matching email draft so you are not writing from scratch every time.

Google Sheets controls approval and sending. A row gets added to your tracker with the Slides link, the email draft, and a WAITING status. When you change status to READY, n8n exports the Slides deck as a PDF, sends it via Gmail, and updates the row to SENT.

You can easily modify the approval rules to include a second reviewer, or change the template selection to match different services. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Form Trigger

Set up the intake form that starts proposal generation when a client submits details.

  1. Add and open Form Intake Trigger.
  2. Set Form Title to Client Proposal Builder.
  3. Set Form Description to Fill out this form to generate a customized client proposal. The proposal is created automatically based on your inputs, including scope, pricing, and deliverables..
  4. Confirm all form fields match the workflow (e.g., Client Email, Client Name, Problem, Solution, Scope, timeline, need, Price, payment link, context if any).

The Flowpast Branding sticky note is informational only and does not require setup.

Step 2: Connect Google Sheets

Configure the spreadsheet that logs proposals and controls when emails are sent.

  1. Open Sheet Update Watcher and set Document ID to your spreadsheet ID (replace [YOUR_ID]).
  2. Set Sheet Name to Sheet1 and keep the poll time at everyMinute.
  3. Credential Required: Connect your googleSheetsTriggerOAuth2Api credentials in Sheet Update Watcher.
  4. Open Append Sheet Record and set Document ID to [YOUR_ID] and Sheet Name to Sheet1.
  5. Map columns in Append Sheet Record, including Date to {{$now}}, Email to {{$('Form Intake Trigger').first().json['Client Email']}}, Body Draft to {{$json.body}}, and Proposall Link to =https://docs.google.com/presentation/d/{{ $('Populate Slide Text').item.json.presentationId }}/edit.
  6. Credential Required: Connect your googleSheetsOAuth2Api credentials in Append Sheet Record and Mark Status Sent.

⚠️ Common Pitfall: Make sure your Sheet has columns that exactly match the names used in Append Sheet Record and Mark Status Sent, including typos like Project Titile and Proposall Link.

Step 3: Set Up Proposal Drafting with AI

Generate a structured proposal JSON from the form input.

  1. Open Draft Proposal Generator and verify the model is set to gpt-5.1.
  2. Confirm the system prompt and input mapping reference form fields such as {{ $json['Client Name'] }}, {{ $json.Problem }}, and {{ $json['payment link'] }}.
  3. Credential Required: Connect your openAiApi credentials in Draft Proposal Generator.
  4. Open Extract Proposal JSON and keep the provided JavaScript that parses $input.first().json.output[0].content[0].text into JSON.

⚠️ Common Pitfall: If Draft Proposal Generator outputs non-JSON text, Extract Proposal JSON will throw an error. Keep the AI prompt strict about JSON-only output.

Step 4: Configure Slide Creation and File Management

Duplicate the proposal template, move it to the correct folder, and populate slide placeholders.

  1. Open Duplicate Slide Template and set File ID to your Slides template ID (replace [YOUR_ID]).
  2. Set Name in Duplicate Slide Template to {{ $json.Title }}.
  3. Credential Required: Connect your googleDriveOAuth2Api credentials in Duplicate Slide Template and Relocate File.
  4. In Relocate File, set Folder ID to [YOUR_ID] and File ID to {{ $json.id }} to move the duplicated file.
  5. Open Populate Slide Text and keep Presentation ID as {{ $json.id }}.
  6. Verify text replacements such as {{title}}{{ $('Extract Proposal JSON').item.json.Title }} and {{payment_link}}{{ $('Extract Proposal JSON').item.json.PaymentLink }}.
  7. Credential Required: Connect your googleSlidesOAuth2Api credentials in Populate Slide Text.

Step 5: Generate the Email Draft and Log the Proposal

Create an email draft from the proposal content and store it in Google Sheets.

  1. Open Compose Email Draft and confirm the model is set to chatgpt-4o-latest.
  2. Keep the input reference {{ $('Draft Proposal Generator').first().json.output[0].content[0].text }} in the prompt.
  3. Credential Required: Connect your openAiApi credentials in Compose Email Draft.
  4. Open Extract Email JSON and keep the parsing code to transform AI output into subject and body.
  5. In Append Sheet Record, ensure Send Status is set to WAITING so the watcher flow can pick it up later.

The flow from Form Intake Trigger to Append Sheet Record is linear: Form Intake TriggerDraft Proposal GeneratorExtract Proposal JSONDuplicate Slide TemplateRelocate FilePopulate Slide TextCompose Email DraftExtract Email JSONAppend Sheet Record.

Step 6: Configure the Send-When-Ready Flow

Watch the sheet for READY rows, export the proposal PDF, email it, and mark it as SENT.

  1. Open Filter Ready Entries and confirm the condition: {{ $json['Send Status'] }} equals READY.
  2. In Batch Iterator, keep default settings to process READY rows iteratively.
  3. Open Export Proposal PDF and set File ID to {{ $json['Proposall Link'] }} and File Name to {{ $json['Project Titile'] }}.pdf.
  4. Credential Required: Connect your googleDriveOAuth2Api credentials in Export Proposal PDF.
  5. Open Dispatch Email and map Send To to {{ $('Sheet Update Watcher').item.json.Email }}, Subject to {{ $('Sheet Update Watcher').item.json['Project Titile'] }}, and Message to {{ $('Sheet Update Watcher').item.json['Body Draft'] }}.
  6. Credential Required: Connect your gmailOAuth2 credentials in Dispatch Email.
  7. In Mark Status Sent, update Send Status to SENT with matching column Email set to {{ $('Batch Iterator').item.json.Email }}.

⚠️ Common Pitfall: The PDF export relies on a valid Proposall Link URL. Ensure Populate Slide Text successfully outputs presentationId before the sheet is marked READY.

Final Step: Test and Activate Your Workflow

Run end-to-end tests to confirm proposal creation, sheet logging, and email delivery.

  1. Use Form Intake Trigger to submit a sample proposal request and confirm Append Sheet Record creates a new row with Send Status set to WAITING.
  2. Manually change the new row’s Send Status to READY and verify Sheet Update Watcher captures the change.
  3. Confirm Export Proposal PDF produces a PDF and Dispatch Email sends it to the client email.
  4. Verify Mark Status Sent updates the row to SENT.
  5. When everything works, toggle the workflow to Active for production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google credentials can expire or lack access to a specific Drive folder. If something breaks, check the credential in n8n and confirm the account can open the template and the destination folder.
  • If you’re using batch processing (the Split in Batches loop) and exporting PDFs for multiple READY rows, processing times can vary. Increase the wait time or reduce batch size if the PDF export sometimes returns an empty file.
  • OpenAI prompts that are too generic create bland proposals. Put your tone, structure, and “must-include” details into the proposal prompt early, or you’ll end up editing every single draft anyway.

Frequently Asked Questions

How long does it take to set up this proposal approval automation?

Plan for about an hour if your Google templates are ready.

Do I need coding skills to automate proposal approvals?

No. You’ll mostly connect accounts and paste in a few IDs. The only “technical” part is tweaking the AI prompts, and that’s just editing text.

Is n8n free to use for this proposal approval automation workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs (for many teams, it’s a few dollars a month unless you generate a lot of long proposals).

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this proposal approval automation workflow for multiple proposal templates?

Yes, and it’s one of the best tweaks to make. You can swap the Slides template by changing the template ID used in the “Duplicate Slide Template” step, and you can add simple rules (like “service type = Template 2”) before that copy happens. Common customizations include separate templates per offer, different email tones per market, and extra approval statuses like NEEDS_EDIT or LEGAL_REVIEW.

Why is my Google Sheets connection failing in this workflow?

Usually it’s the Google OAuth credential, not the Sheet itself. Make sure the same Google credential is selected across Sheets, Drive, Slides, and Gmail nodes, then confirm that Google account can actually open the tracker sheet in the browser. If you recently changed permissions on the Sheet or moved it into a shared drive, re-check access and reauthorize the credential.

How many proposals can this proposal approval automation handle?

A lot. On n8n Cloud, it depends on your plan’s execution limits, but most small teams can run hundreds of proposals a month comfortably. If you self-host, you’re mainly limited by your server and Google/OpenAI rate limits, and batching lets you pace the sends.

Is this proposal approval automation better than using Zapier or Make?

For approvals and document generation, n8n is usually the calmer choice because it handles multi-step logic, looping through READY rows, and richer data shaping without feeling bolted together. You also get the self-hosting option, which matters if you send a lot and don’t want per-task pricing surprises. Zapier or Make can still work if your flow is tiny, but Slides templating plus “only send when READY” tends to get complicated fast. Frankly, the review gate is where many simple automations fall apart. If you want help choosing, Talk to an automation expert.

Once this is running, proposals stop being a weekly time sink and become a repeatable, trackable system. The workflow handles the repetitive parts, so you can focus on the actual deal.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal