Downloads
Download the n8n workflow (JSON)
proposal-generator-n8n-claude.json · n8n workflow · 19 steps · starts with Call notes form · uses Google Sheets, Anthropic, Google Drive, Google Docs, Slack, Gmail · 36 KB
Import into n8n: Create Workflow, then the menu, then Import from File.
How to import it into n8n
- In n8n, create a new workflow.
- Open the ⋯ menu at the top right and choose Import from File, then pick the downloaded .json. (Or open the file, copy everything and paste it on the canvas.)
- Open each node with a warning and connect your own account: the file carries no passwords or keys.
- Run it once with Test workflow, check the result, then switch it to Active.
What this workflow does
Right after a discovery call, you paste your rough notes into a short form. Claude reads the notes and your rate card and drafts the proposal: a summary of what the client wants, the scope, a phased timeline, assumptions and what is out of scope. A small code step prices every line from your rate card sheet and adds GST, so no price ever comes from AI. Your own Google Docs template is copied and filled in. You get the doc link on Slack to review and edit. Tap Approve and the proposal is emailed to the client as a PDF with a short cover note.
Who it is for
Digital and creative agencies, consultants, IT service firms, interior designers, event planners, CA and legal firms: anyone who sends a proposal or quotation after a call and usually writes it late at night.
What you need
- n8n (Cloud or self-hosted)
- An Anthropic API key for Claude
- A Google Sheet with
Rate cardandProposalstabs - A Google Docs proposal template with placeholders
- Slack for review
- Gmail to send
The workflow, step by step
Step 1 · Notes in, right after the call
Paste your rough call notes into a short form: client, contact email, what they need, budget hints, deadline. Messy notes are fine. A guard stops the same proposal being made twice.
- Call notes form (n8n Form Trigger): client name, company, email, call notes, budget mentioned, deadline.
- Clean up notes (Set): builds the proposal id, today's date and a valid-until date 15 days out.
- Already drafted today? (Remove Duplicates): one proposal per company per day.
Step 2 · Claude drafts the scope
Claude reads your notes and your rate card and writes the scope, timeline, assumptions and what is out of scope. It can only pick services that exist in your rate card.
- Get rate card (Google Sheets) and Bundle rate card (Aggregate).
- Draft proposal with Claude (Basic LLM Chain) with Claude (temperature 0.3) and Proposal fields (Structured Output Parser). Claude is told never to write a price and to list anything unclear as a question for the client.
Step 3 · Prices come from your rate card
A code step prices every line from your rate card sheet, adds 18% GST and the total. Claude never sets a price. Your Google Docs template is copied and filled, and the proposal is logged.
- Price from rate card (Code): quantity x rate for every line, subtotal, GST and total in Indian number format. Services not on the rate card are flagged.
- Copy proposal template (Google Drive) and Fill the template (Google Docs, replace all placeholders).
- Log proposal (Google Sheets, append or update on Proposal ID): Status = Draft.
Step 4 · You review it on Slack
You get the Google Doc link, the total and anything Claude was unsure about. Edit the doc if you like, then tap Approve. Needs changes keeps it as a draft.
- Review on Slack (Slack, Send and Wait), Approved? (IF), and Mark as needs changes (Google Sheets).
Step 5 · PDF to the client
Approved proposals are exported as PDF and emailed to the client with a short cover note. If the email fails you get an alert, and the sheet shows Sent.
- Export as PDF (Google Drive download with PDF conversion), so your edits are included.
- Email proposal to client (Gmail, PDF attached, 3 retries).
- Mark as sent (Google Sheets) and Alert: email failed (Slack, on the error output).
Setup
- Import the JSON into n8n and connect Anthropic, Google Sheets, Google Drive, Google Docs, Slack and Gmail.
- Create the
Rate cardtab: Service, Unit, Rate (plain rupees, like 12000), Description. Use clear service names; Claude must copy them exactly. - Create the
Proposalstab: Proposal ID, Date, Client, Company, Email, Total, Weeks, Doc, Status, Sent on. - Make your proposal template in Google Docs with your logo and terms, and type the placeholders where text should go:
[[CLIENT_NAME]],[[COMPANY]],[[DATE]],[[VALID_UNTIL]],[[SUMMARY]],[[SCOPE]],[[TIMELINE]],[[PRICE_TABLE]],[[SUBTOTAL]],[[GST]],[[TOTAL]],[[ASSUMPTIONS]],[[OUT_OF_SCOPE]]. - Paste the template's id and a drafts folder id into Copy proposal template. Replace
YOUR_SHEET_IDand the Slack channel. - Fill the form with notes from a real past call and your own email as the client. Review on Slack and approve.
How to customise
- Voice notes: record the call summary on your phone, transcribe it, and paste the text into the form. Or add a step that sends a WhatsApp voice note to a transcription API first.
- Discount line: add a Discount column to the form and apply it in Price from rate card, never in the prompt.
- Different GST: change
0.18in the code. For exports of services, set it to 0. - CRM: add a HubSpot or Notion node after Mark as sent to create a deal.
- Follow-up: a second workflow can read
Proposalsdaily and remind you about anything Sent 3 days ago with no reply.
Guardrails
- Nothing reaches the client until you tap Approve. Prices come only from your rate card, never from AI.
- Claude can only use services listed in your rate card. Anything else is flagged on Slack.
- Open questions are listed for you to check, not guessed.
- The PDF is exported after approval, so any edit you make in the doc goes to the client.
Troubleshooting
- A line is missing from the price table: the service name Claude chose did not match the rate card exactly. Check the Slack warning and tidy the rate card names.
- Placeholders still visible in the doc: the text in the template must match exactly, including the double square brackets.
- Totals look wrong: Rate must be a plain number in the sheet (12000, not "12k").
- PDF attachment missing: Export as PDF must output the file in the
datafield, which is the default.
Want the members-only resources too?
A free account unlocks them all, including the ones shared in DMs.

