Alchemy RecipeIntermediateautomation

Grant proposal generation from research project outline

Published

Applying for research grants is one of the most time-consuming tasks in academia and research organisations. You've got a solid project outline, but transforming it into a polished grant proposal that meets funder requirements feels like starting from scratch. Most researchers end up manually rewriting sections, adjusting tone, and formatting documents across multiple platforms. Between Copy.ai, Chat with PDF, and Wordsmith AI, you already have the tools. What's missing is the connective tissue to make them work together without opening a dozen browser tabs....

This workflow takes your research project outline, extracts key information, generates multiple proposal variations, and produces a final grant document ready for submission. Nothing sits in your inbox waiting for you to copy and paste. Everything flows automatically from one tool to the next.

The good news is this isn't complex. You need an orchestration layer (Zapier, n8n, Make, or Claude Code), three AI writing tools, and about 30 minutes to set up. Once it's running, you'll generate grant proposals in a fraction of the time.

The Automated Workflow

We'll build this workflow using n8n as the orchestrator. n8n is free to self-host, gives you granular control over each step, and handles API requests cleanly. You'll also see equivalent Zapier and Make steps where relevant, so you can swap platforms if you prefer.

Architecture Overview

The workflow works in five stages:

  1. Receive your project outline (via webhook, file upload, or email).
  2. Extract content using Chat with PDF.
  3. Generate proposal sections using Copy.ai.
  4. Polish and refine output using Wordsmith AI.
  5. Compile everything into a formatted Word document and email it to you.

Step 1:

Set Up the Webhook Trigger

Start by creating a webhook endpoint in n8n that receives your project outline. This is where the automation begins.


POST /webhook/grant-proposal
Content-Type: application/json

{
  "projectTitle": "Machine Learning for Early Disease Detection",
  "researcher": "Dr. Sarah Chen",
  "duration": "36 months",
  "budget": "£250,000",
  "outline": "Research project outline content here..."
}

In n8n, add a Webhook node and configure it to accept POST requests. The webhook URL will look like this:


https://your-n8n-instance.com/webhook/grant-proposal

Set the Authentication to None (or use a simple API key if you want to restrict access). Save this webhook URL; you'll use it to trigger proposals from Postman, your frontend, or even a Zapier form.

Step 2:

Extract Content with Chat with PDF

If your project outline is a PDF, Chat with PDF by Copilotus can summarise and extract key sections. If it's already text, you can skip to Step 3.

Add an HTTP Request node in n8n to call the Chat with PDF API:


POST https://api.copilotus.ai/v1/chat
Authorization: Bearer YOUR_COPILOTUS_API_KEY
Content-Type: application/json

{
  "document_url": "{{ $json.pdfUrl }}",
  "query": "Extract the research objectives, methodology, expected outcomes, and budget breakdown from this document."
}

The response will contain structured text extracted from your PDF:

{
  "response": "Objectives: 1. Develop ML models for early diagnosis... 2. Validate against clinical datasets...",
  "confidence": 0.94
}

Store this extracted text in a variable for the next step. In n8n, use an Assignment node:


extractedContent = $json.response

If you're using Zapier, the equivalent is a Formatter step with the Text template. In Make (Integromat), use a Text Parser module.

Step 3:

Generate Proposal Sections with Copy.ai

Now you have clean, structured content. Copy.ai will generate multiple variations of key proposal sections: executive summary, research methodology, impact statement, and budget justification.

Add an HTTP Request node for Copy.ai:


POST https://api.copy.ai/v1/generate
Authorization: Bearer YOUR_COPYAI_API_KEY
Content-Type: application/json

{
  "prompt": "You are writing a research grant proposal for a funder focused on medical innovation. Using the following research outline, write a compelling Executive Summary (250 words) that explains the problem, solution, and impact.",
  "context": "{{ extractedContent }}",
  "style": "academic_formal",
  "temperature": 0.7,
  "max_tokens": 500
}
```......

Copy.ai will return generated text:

```json
{
  "generated_text": "This research addresses a critical gap in early disease detection...",
  "usage": {
    "input_tokens": 342,
    "output_tokens": 289
  }
}

Repeat this HTTP Request node three more times with different prompts:

For Research Methodology:


POST https://api.copy.ai/v1/generate
...
{
  "prompt": "Write a detailed Research Methodology section (400 words) explaining the approach, data sources, analytical methods, and timeline.",
  "context": "{{ extractedContent }}",
  ...
}

For Impact Statement:


POST https://api.copy.ai/v1/generate
...
{
  "prompt": "Write a compelling Impact Statement (300 words) explaining how this research will benefit patients, clinicians, and the healthcare system.",
  "context": "{{ extractedContent }}",
  ...
}

For Budget Justification:


POST https://api.copy.ai/v1/generate
...
{
  "prompt": "Write a Budget Justification section (250 words) explaining the allocation across personnel, equipment, and overheads, with clear rationale for each line item.",
  "context": "{{ extractedContent }}",
  ...
}

Use n8n's Loop node or multiple parallel HTTP Request nodes to run these simultaneously. Parallel execution is faster, though you may hit Copy.ai's rate limits (typically 100 requests per minute for standard plans). If you hit limits, add a small delay between requests using a Wait node.

Store each response in separate variables:


executiveSummary = responses[0].generated_text
methodology = responses[1].generated_text
impactStatement = responses[2].generated_text
budgetJustification = responses[3].generated_text

Step 4:

Polish with Wordsmith AI

The Copy.ai output is strong, but Wordsmith AI adds final polish: consistency checking, tone refinement, and readability improvements.

Add another HTTP Request node:


POST https://api.wordsmith.ai/v1/enhance
Authorization: Bearer YOUR_WORDSMITH_API_KEY
Content-Type: application/json

{
  "text": "{{ executiveSummary + methodology + impactStatement + budgetJustification }}",
  "style": "academic",
  "fixes": ["grammar", "tone_consistency", "readability", "uk_english"],
  "checks": {
    "passive_voice_limit": 0.2,
    "reading_level": "university",
    "word_count_alert": true
  }
}

Wordsmith AI returns enhanced text plus detailed feedback:

{
  "enhanced_text": "...",
  "metrics": {
    "flesch_kincaid_grade": 14.2,
    "passive_voice_percentage": 18,
    "reading_time_minutes": 8
  },
  "suggestions": [
    {
      "type": "tone",
      "original": "The study aims to discover",
      "suggestion": "This research will establish",
      "reason": "More authoritative tone"
    }
  ]
}

Create an Assignment node to store the polished content:


finalProposal = $json.enhanced_text

Step 5:

Compile and Deliver

Finally, combine all sections into a formatted document. Use a Document Generation tool (like Pandoc via HTTP, or a native Word generator). Here's an approach using a simple HTTP request to a document service:


POST https://api.documentapi.io/v1/generate
Authorization: Bearer YOUR_DOC_API_KEY
Content-Type: application/json

{
  "format": "docx",
  "title": "{{ $json.projectTitle }} - Grant Proposal",
  "sections": [
    {
      "heading": "Executive Summary",
      "content": "{{ executiveSummary }}"
    },
    {
      "heading": "Research Methodology",
      "content": "{{ methodology }}"
    },
    {
      "heading": "Impact Statement",
      "content": "{{ impactStatement }}"
    },
    {
      "heading": "Budget Justification",
      "content": "{{ budgetJustification }}"
    }
  ],
  "styles": "formal_academic"
}

The API returns a download link:

{
  "document_url": "https://documents.example.com/grants/proposal_12345.docx",
  "expires_in_hours": 24
}

Finally, send an email with the completed proposal:


POST https://api.sendgrid.com/v3/mail/send
Authorization: Bearer YOUR_SENDGRID_API_KEY
Content-Type: application/json

{
  "personalizations": [
    {
      "to": [{"email": "{{ $json.researcherEmail }}"}],
      "subject": "Your Grant Proposal is Ready: {{ $json.projectTitle }}"
    }
  ],
  "from": {"email": "grants@yourorganisation.com"},
  "content": [
    {
      "type": "text/html",
      "value": "<p>Your grant proposal has been generated and is ready for review.</p><p><a href='{{ documentUrl }}'>Download Proposal</a></p>"
    }
  ]
}

Add a delay using a Wait node before sending to avoid rate-limiting issues. n8n's built-in error handling will catch failed API calls and retry automatically.

The Manual Alternative

If you prefer more hands-on control, you can still use these tools separately:

  1. Open your project outline in Chat with PDF and manually request key extractions.
  2. Copy the output into Copy.ai and generate proposal sections one at a time, tweaking prompts as needed.
  3. Run each section through Wordsmith AI individually, adjusting suggestions where appropriate.
  4. Copy and paste everything into a Word template.
  5. Send it to yourself.

This takes about 90 minutes instead of 5 minutes, but it gives you direct editorial control at each stage. For researchers who want to heavily customise proposals for specific funders, this approach is often better.

Pro Tips

Rate Limiting and API Quotas. Copy.ai and Wordsmith AI both impose rate limits. Standard plans allow roughly 100 requests per minute. If you're generating proposals for multiple projects, space them out with n8n's Wait node (set to 30 seconds between requests). Check your API dashboard monthly to stay under quota.

Error Handling and Retries. Add error handling to every HTTP Request node in n8n. If Copy.ai is temporarily unavailable, n8n can retry up to three times with exponential backoff. In the node settings, enable "Retry On Fail" and set to 3 attempts with a 5-second initial wait.

Template Customisation for Different Funders. Modify the Copy.ai prompts based on funder requirements. For instance, if applying to a European funder, adjust the prompt to emphasise international collaboration. Store prompt templates in a spreadsheet or config file and pull them dynamically based on the funder type.

Cost Optimisation. Chat with PDF charges per page extracted; if your outline is 50 pages, that could be £2-5 per proposal. Consider preprocessing: extract only relevant sections manually, or use OCR to convert images to text before sending to Chat with PDF. Copy.ai and Wordsmith AI charge per token; monitor usage in your dashboard weekly.

Test with a Sample Outline First. Before running this on real proposals, test with a short sample outline (300 words). Verify that extracted content makes sense, generated sections are coherent, and output formatting is correct. Adjust prompts based on results before scaling.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
n8n (self-hosted)Free (open source)£0Hosting costs apply if using cloud; typically £10-50/month for small deployments
Chat with PDFStandard£15Per-page pricing; approximately £0.05-0.10 per page extracted
Copy.aiProfessional£49100,000 words/month included; overages at £0.001 per word
Wordsmith AIStandard£29Up to 50,000 words/month; ideal for polish step
Document generation APIStandard£10For converting text to formatted Word files
SendGrid (email)Free tier£0Up to 100 emails/day free; sufficient for most research teams
Total Monthly£103-168Depends on proposal volume; cost per proposal ranges from £2-8

For a research team generating 10-15 proposals monthly, your cost per proposal is roughly £7-10, compared to 2-3 hours of manual labour. Most teams will find this worthwhile.

More Recipes