Back to Alchemy
Alchemy RecipeIntermediateworkflow

Digital Agency Client Proposal Generation from Brief to Final Deck

24 March 2026

Introduction

The proposal generation process at a digital agency is a necessary evil. A prospect sends a brief, someone spends hours synthesising the requirements, drafting sections, designing a deck, and sending it back. By the time it lands in the client's inbox, at least half a day of billable time has vanished. The irony is that most of this work follows a predictable pattern: extract key points, structure them logically, create visuals, compile into a presentation. These steps don't require creative thinking; they require consistency and speed.

What if the entire journey from brief to polished proposal deck happened automatically? You receive an email with a client brief attachment, and within minutes, a professional presentation lands in your shared folder, ready for review and minor customisation. No manual copy-pasting between documents. No hours spent reformatting. No waiting for designers to build slides.

This workflow is entirely achievable with a combination of four AI tools and a capable orchestration platform. The challenge is not whether individual tools can do this; it is wiring them together so that the output of one feeds directly into the next, with zero human intervention between steps.

The Automated Workflow

Architecture Overview

The workflow follows this sequence: a brief arrives (usually as an email attachment or uploaded to a folder), gets summarised and analysed for key themes, generates proposal copy for each section, and then converts that copy into a structured presentation deck. We will use n8n as the orchestration backbone because it offers robust file handling, multiple LLM integrations, and good error visibility.

Here is the data flow:

  1. Trigger: Brief document arrives (email attachment or cloud storage).
  2. Extract: Parse the brief using Claude or GPT to identify scope, deliverables, timeline, and budget expectations.
  3. Analyse: Use Resoomer AI to summarise the brief and pull key themes.
  4. Generate: Use ChatGPT Writer and AI-Boost to draft proposal sections (executive summary, approach, timeline, investment, next steps).
  5. Structure: Compile sections into JSON format.
  6. Create: Use Preswald AI to generate a presentation from the structured data.
  7. Output: Save the final deck to cloud storage and send notification.

Prerequisites and Setup

Before building this, gather the following:

  • API keys for ChatGPT Writer, AI-Boost, Resoomer AI, and Preswald AI.

  • A cloud storage connection (Google Drive, Dropbox, or OneDrive) for input and output.

  • An email account or webhook endpoint for triggering the workflow.

  • An n8n account (self-hosted or cloud; we recommend cloud for simplicity on first attempt).

Step-by-Step Implementation

Step 1: Set Up the Trigger

In n8n, create a new workflow. Add an HTTP Request node configured to accept POST requests. Alternatively, use the Gmail node if you prefer email triggers.

If using email:


Node Type: Gmail
Action: Watch for Emails
Label Filter: [proposals] or similar
Attachment: Yes (we expect a PDF or DOCX)

If using HTTP webhook:


Node Type: Webhook
Method: POST
Path: /proposal-workflow
Expected JSON payload:
{
  "client_name": "Acme Corp",
  "brief_url": "https://drive.google.com/file/d/...",
  "contact_email": "alice@acme.com"
}

Step 2: Extract and Parse the Brief

Add a node to download and parse the brief. If it arrives as an email attachment, use the Extract Binary Data node to isolate the file. If it is a cloud storage link, use the Google Drive API or similar.

Once you have the file content (as text), send it to Claude via API for initial extraction. This step identifies the core proposal elements.


Node Type: HTTP Request (Claude API)
Method: POST
URL: https://api.anthropic.com/v1/messages
Headers:
  Content-Type: application/json
  x-api-key: YOUR_CLAUDE_API_KEY
Body:
{
  "model": "claude-3-5-sonnet-20241022",
  "max_tokens": 2048,
  "messages": [
    {
      "role": "user",
      "content": "You are a digital agency strategist. Extract the following from this client brief and return as JSON: client_name, project_scope, key_deliverables (array), timeline, budget_range, decision_makers, pain_points (array). Brief text: {{$node.FileContent.data}}"
    }
  ]
}

Parse the response and extract the JSON object. Store this in workflow variables for use in later steps.

Step 3: Summarise and Analyse with Resoomer AI

Resoomer AI excels at condensing long documents into concise summaries. Use it to pull the three to five most critical points from the brief.


Node Type: HTTP Request (Resoomer API)
Method: POST
URL: https://api.resoomer.com/api/summarize
Headers:
  Authorization: Bearer YOUR_RESOOMER_TOKEN
  Content-Type: application/json
Body:
{
  "url_source": "{{$node.DownloadedBrief.data.url}}",
  "output_sentences": 5,
  "output_length": "short"
}

Alternatively, if Resoomer does not have direct file upload, use Claude to perform the summarisation:


{
  "role": "user",
  "content": "Summarise this brief in 3-4 bullet points focusing on business objectives and key challenges: {{$node.ParsedBrief.content}}"
}

Step 4: Generate Proposal Sections with ChatGPT Writer and AI-Boost

This is where the proposal actually gets written. Break this into multiple nodes, each responsible for a section. Use ChatGPT Writer for narrative sections and AI-Boost for headlines and copywriting.

For the Executive Summary:


Node Type: HTTP Request (ChatGPT Writer API)
Method: POST
URL: https://api.chatgptwriter.com/v1/generate
Headers:
  Authorization: Bearer YOUR_CHATGPT_WRITER_KEY
  Content-Type: application/json
Body:
{
  "prompt": "Write a compelling executive summary (150 words) for a digital agency proposal to {{$node.ExtractedBrief.client_name}}. Context: {{$node.SummarizedBrief.summary}}. Include what we will deliver and the business impact.",
  "temperature": 0.7,
  "max_tokens": 300
}

For the Approach section:


{
  "prompt": "Write a 200-word 'Our Approach' section for a proposal to {{$node.ExtractedBrief.client_name}}. The client wants: {{$node.ExtractedBrief.key_deliverables}}. Emphasise our process, team expertise, and methodology. Be professional but conversational.",
  "temperature": 0.6,
  "max_tokens": 400
}

For the Timeline and Investment sections, use AI-Boost or a simpler prompt to generate structured output:


{
  "prompt": "Create a project timeline table (3-4 phases) for a {{$node.ExtractedBrief.project_scope}} project lasting {{$node.ExtractedBrief.timeline}}. Return as a markdown table with columns: Phase, Deliverable, Duration, Milestone. Keep it realistic.",
  "temperature": 0.5,
  "max_tokens": 300
}

For investment (pricing), use a rules-based approach rather than AI generation:


Node Type: Function
Code:
const scope = $node.ExtractedBrief.project_scope;
const timeline = $node.ExtractedBrief.timeline;
const baseRate = 5000;
const multiplier = timeline.includes("3 months") ? 1.5 : timeline.includes("6 months") ? 2.0 : 1.0;
const totalInvestment = baseRate * multiplier;
return {
  description: `Total investment for ${scope}`,
  amount: totalInvestment,
  payment_terms: "50% upfront, 50% on completion"
};

Step 5: Compile Into Structured Format

Create a single node that collects all generated sections and formats them as JSON suitable for Preswald AI.


Node Type: Function
Code:
return {
  title: `Proposal: ${$node.ExtractedBrief.client_name}`,
  client: $node.ExtractedBrief.client_name,
  date: new Date().toLocaleDateString('en-GB'),
  slides: [
    {
      type: "cover",
      title: `${$node.ExtractedBrief.client_name} Digital Strategy Proposal`,
      subtitle: "Delivered by Your Agency"
    },
    {
      type: "text",
      title: "Executive Summary",
      content: $node.ExecutiveSummary.text
    },
    {
      type: "text",
      title: "Our Approach",
      content: $node.Approach.text
    },
    {
      type: "text",
      title: "Project Timeline",
      content: $node.Timeline.text
    },
    {
      type: "text",
      title: "Investment",
      content: `${$node.Investment.description}: £${$node.Investment.amount}\n\n${$node.Investment.payment_terms}`
    },
    {
      type: "closing",
      title: "Next Steps",
      content: `We are excited to partner with ${$node.ExtractedBrief.client_name}. Please reply to confirm your interest, and we can schedule a kickoff call.`
    }
  ]
};

Step 6: Generate the Presentation with Preswald AI

Preswald AI takes structured slide data and outputs a professional presentation file (PPTX or PDF).


Node Type: HTTP Request (Preswald API)
Method: POST
URL: https://api.preswald.ai/v1/generate-presentation
Headers:
  Authorization: Bearer YOUR_PRESWALD_KEY
  Content-Type: application/json
Body:
{
  "presentation_data": {{$node.CompileSlides.output}},
  "theme": "modern",
  "output_format": "pptx",
  "branding": {
    "company_name": "Your Agency",
    "logo_url": "https://your-agency.com/logo.png",
    "colour_scheme": "professional"
  }
}

Step 7: Save Output and Send Notification

Once Preswald generates the deck, save it to cloud storage and notify the team.


Node Type: Google Drive
Action: Upload File
File Content: {{$node.PrestwaldGeneration.file_binary}}
File Name: {{$node.ExtractedBrief.client_name}} - Proposal - {{date 'YYYY-MM-DD'}}.pptx
Folder ID: [your proposals folder ID]

Finally, send a summary email:


Node Type: Send Email
To: {{$node.TriggerPayload.contact_email}}
CC: proposals@your-agency.com
Subject: Your Proposal is Ready: {{$node.ExtractedBrief.client_name}}
Body:
Dear {{$node.ExtractedBrief.client_name}},

Your custom proposal is attached. It covers your project scope, our approach, timeline, and investment. We are confident this partnership will deliver exceptional results.

Please review and let us know any questions.

Best regards,
Your Agency Team

Testing and Refinement

Before running this on live briefs, test with a sample document. Common issues include:

  • API rate limits from Claude or ChatGPT Writer; add delays between requests using a Wait node.

  • Malformed JSON responses; add Try/Catch blocks around parsing operations.

  • File encoding issues; ensure all documents are converted to plain text before processing.

Run the workflow a few times with test data. Check the generated proposal for tone consistency and accuracy. Adjust prompts as needed. The first version will rarely be perfect; refine the ChatGPT Writer and Claude prompts based on output quality.

The Manual Alternative

If you prefer not to build the full automated workflow immediately, you can automate individual steps:

  • Use ChatGPT Writer directly to draft sections, then manually compile them.

  • Run the brief through Claude once to extract key points, then use those in manual proposal writing.

  • Generate the presentation deck in Preswald AI by hand, feeding in your own copy.

This approach sacrifices speed but maintains full creative control. You can also use this as an intermediate step: automate the first draft, then have a team member review and refine before sending to the client. This still saves the majority of the grunt work whilst keeping a human checkpoint.

Pro Tips

1. Handle Rate Limits Gracefully

Claude and ChatGPT Writer both have rate limits. If you are generating multiple proposal sections in parallel, you will hit these quickly. Use n8n's Rate Limit node to throttle requests: allow 3 requests per minute for Claude and 5 per minute for ChatGPT Writer. This adds only a few seconds to the overall runtime but prevents API rejections.


Node Type: Rate Limit
Max Requests: 3
Time Window: 1 minute

2. Add Human Review Gates

After section generation but before final compilation, insert a manual review step. Assign the generated content to a team member who approves or requests changes. This takes 5 minutes but catches any AI hallucinations before the deck is sent.


Node Type: Wait
Action: Wait for Webhook
Webhook Path: /proposal-approved

3. Store Proposal Templates

Rather than generating every section from scratch, maintain a library of reusable templates keyed by project type (e-commerce, SaaS, B2B service). Use Claude to select the appropriate template based on the brief, then customise it with specific client details. This reduces API calls and improves consistency.

4. Log All Generated Content

Store every generated proposal section, along with the input brief, in a database or spreadsheet. This creates a searchable archive and allows you to analyse which prompts produce the best results. Over time, you will refine your prompt library significantly.


Node Type: Google Sheets
Action: Append
Sheet: Proposal History
Columns: Client Name, Date, Brief Summary, Generated Sections, Preswald Output URL

5. Set Reasonable Boundaries for Customisation

The proposal deck is a draft, not final output. Leave clear placeholders for custom case studies, specific technical details, or proprietary methodologies. Encourage the team to spend 15 minutes customising the automated output rather than building from scratch. This maintains quality whilst preserving speed.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
ChatGPT WriterPay-as-you-go£20-40Charged per API call; proposal generation typically costs 2-5p per proposal.
AI-BoostProfessional£29-79Subscription model; includes multiple AI models. Optional if using Claude alone.
Resoomer AIPremium£10-15Good for summarisation; can be replaced with Claude if budget is tight.
Preswald AIProfessional£49-99Subscription; generates multiple presentations monthly.
n8n CloudStandard£25-50Monthly fee for hosted workflows; alternatively, self-host for free.
Claude APIPay-as-you-go£15-30Charged per million tokens; proposal analysis costs roughly 1-3p per proposal.
Total Estimated£150-315Supports approximately 50-100 proposals monthly. Cost per proposal: £1.50-3.15.

For agencies generating 10+ proposals weekly, this cost is negligible compared to labour savings. A senior staff member generating a proposal manually costs £100-200 in billable time. Automation recovers that investment within the first few uses.

If budget is tight, consolidate to the essentials: Claude (for extraction and writing), Preswald AI (for presentation generation), and n8n (for orchestration). This core setup costs roughly £70-120 monthly and handles 80% of the workflow.