AutomationFlowsAI & RAG › Proposal Assistant Claude

Proposal Assistant Claude

proposal-assistant-claude. Uses lmChatAnthropic, googleDrive, slack. Webhook trigger; 5 nodes.

Webhook trigger★★★★☆ complexityAI-powered5 nodesAnthropic ChatGoogle DriveSlack
AI & RAG Trigger: Webhook Nodes: 5 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Google Drive → Slack recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "proposal-assistant-claude",
  "nodes": [
    {
      "id": "d4e5f6a7-0001-4000-8000-000000000001",
      "name": "Webhook Trigger",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        300
      ],
      "parameters": {
        "httpMethod": "POST",
        "path": "proposal-assistant",
        "responseMode": "onReceived",
        "options": {}
      }
    },
    {
      "id": "d4e5f6a7-0002-4000-8000-000000000002",
      "name": "Generate Proposal",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "typeVersion": 1,
      "position": [
        220,
        300
      ],
      "parameters": {
        "model": "claude-3-5-sonnet-20241022",
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You are a professional proposal writer for a consulting or freelance services business. Generate a clean, structured proposal from the discovery notes provided. Format the output as a professional document with these sections:\n\n1. Executive Summary (2-3 sentences)\n2. Problem Statement (what the client is dealing with)\n3. Proposed Solution (what you will deliver)\n4. Scope of Work (bulleted deliverables)\n5. Timeline (phases with durations)\n6. Investment (price range or fixed price)\n7. Next Steps (single clear call to action)\n\nWrite in second person. No em-dashes. Keep total length under 500 words."
            },
            {
              "role": "user",
              "content": "Client name: {{ $json.client_name }}\nCompany: {{ $json.client_company }}\nContact role: {{ $json.contact_role }}\nBudget range: {{ $json.budget_range }}\nTimeline expectation: {{ $json.timeline }}\n\nDiscovery notes:\n{{ $json.discovery_notes }}"
            }
          ]
        }
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "id": "d4e5f6a7-0003-4000-8000-000000000003",
      "name": "Parse Proposal",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3,
      "position": [
        440,
        300
      ],
      "parameters": {
        "mode": "manual",
        "fields": {
          "values": [
            {
              "name": "proposal_text",
              "type": "expression",
              "value": "={{ $json.message.content[0].text }}"
            },
            {
              "name": "client_name",
              "type": "expression",
              "value": "={{ $('Webhook Trigger').item.json.client_name }}"
            },
            {
              "name": "client_company",
              "type": "expression",
              "value": "={{ $('Webhook Trigger').item.json.client_company }}"
            },
            {
              "name": "budget_range",
              "type": "expression",
              "value": "={{ $('Webhook Trigger').item.json.budget_range }}"
            },
            {
              "name": "approver_email",
              "type": "expression",
              "value": "={{ $('Webhook Trigger').item.json.approver_email }}"
            }
          ]
        }
      }
    },
    {
      "id": "d4e5f6a7-0004-4000-8000-000000000004",
      "name": "Save to Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        660,
        300
      ],
      "parameters": {
        "operation": "create",
        "name": "={{ 'Proposal - ' + $json.client_company + ' - ' + new Date().toISOString().split('T')[0] }}",
        "driveId": {
          "value": "MY_DRIVE"
        },
        "folderId": {
          "value": "YOUR_PROPOSALS_FOLDER_ID"
        },
        "content": "={{ $json.proposal_text }}",
        "mimeType": "text/plain"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "id": "d4e5f6a7-0005-4000-8000-000000000005",
      "name": "Request Approval via Slack",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2,
      "position": [
        880,
        300
      ],
      "parameters": {
        "operation": "post",
        "select": "channel",
        "channelId": {
          "value": "#proposals"
        },
        "text": "New proposal ready for review.\nClient: {{ $('Parse Proposal').item.json.client_name }} at {{ $('Parse Proposal').item.json.client_company }}\nBudget: {{ $('Parse Proposal').item.json.budget_range }}\n\nProposal saved to Google Drive. Reply with 'approve' or 'revise' to proceed.",
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Generate Proposal",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Proposal": {
      "main": [
        [
          {
            "node": "Parse Proposal",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Proposal": {
      "main": [
        [
          {
            "node": "Save to Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save to Google Drive": {
      "main": [
        [
          {
            "node": "Request Approval via Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "staticData": null,
  "tags": [],
  "triggerCount": 1,
  "updatedAt": "2026-05-17T00:00:00.000Z",
  "versionId": "v1"
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

proposal-assistant-claude. Uses lmChatAnthropic, googleDrive, slack. Webhook trigger; 5 nodes.

Source: https://github.com/sondersos/n8n-workflows/blob/main/workflows/03-proposal-assistant/proposal-assistant-claude.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

cold-outbound-engine-claude. Uses httpRequest, lmChatAnthropic, airtable, slack. Webhook trigger; 10 nodes.

HTTP Request, Anthropic Chat, Airtable +1
AI & RAG

prompt-qa-lab-claude. Uses lmChatAnthropic, slack. Webhook trigger; 7 nodes.

Anthropic Chat, Slack
AI & RAG

meeting-intelligence-claude. Uses lmChatAnthropic, notion, slack. Webhook trigger; 6 nodes.

Anthropic Chat, Notion, Slack
AI & RAG

proposal-assistant-openai. Uses lmChatOpenAi, googleDrive, slack. Webhook trigger; 5 nodes.

OpenAI Chat, Google Drive, Slack
AI & RAG

strategy-generator-claude. Uses lmChatAnthropic, notion, slack. Webhook trigger; 5 nodes.

Anthropic Chat, Notion, Slack