Back to Alchemy
Alchemy RecipeAdvancedworkflow

Grant proposal generation from research outlines and academic papers

A typical academic researcher spends between 200 and 400 hours writing a single grant proposal. That's roughly 5 to 10 weeks of full-time work, much of it involving copy-pasting between research papers, existing grant applications, and the proposal document itself. The irony is acute: the researcher already possesses the intellectual material needed (published papers, literature reviews, preliminary data, previous proposals), yet the proposal writing process treats them as separate from the work itself. The researcher becomes a manual data shuttle service, transcribing their own expertise into grant formats. This workflow exists because grant funders have specific requirements, templates, and scoring criteria that don't map neatly onto how researchers think about their work. A successful proposal needs to extract the right claims from published papers, reframe them according to funder priorities, generate persuasive justification, and polish the language to meet institutional standards. Each step currently happens in isolation. We can fix that by connecting three tools with an orchestration layer, turning your PDF research library into a grant proposal factory.

The Automated Workflow

The workflow runs like this: you feed in a research outline and 2 to 5 PDF papers relevant to your grant. Chat With PDF by Copilot.us extracts structured information from each document. That structured data flows into Copy.ai, which generates proposal-ready paragraphs tailored to specific grant sections (innovation, feasibility, impact). Those paragraphs then route into Lex, where they land in a living document that a human can refine and finalise. We recommend n8n for orchestration because it handles file uploads cleanly, supports long-running workflows, and allows branching logic without needing to write deployment code.

Setting up n8n

First, create a new workflow in n8n. You'll need API keys for Chat With PDF by Copilot.us and Copy.ai. Store these as credentials in n8n's credential manager.

Triggering the workflow

Use an HTTP Request node as your entry point. This accepts a POST request containing:

json
{ "papers": [ { "file_url": "https://example.com/paper1.pdf", "section": "background" }, { "file_url": "https://example.com/paper2.pdf", "section": "methodology" } ], "grant_funder": "UKRI", "outline": "Study the effect of X on Y using Z methodology"
}

Validate this payload with a Switch node to ensure all required fields are present.

Extracting content from PDFs

For each paper in the incoming array, use an Item Lists node to iterate. In each iteration, call Chat With PDF by Copilot.us via HTTP Request:

POST https://api.copilot.us/chat/pdf/extract
Headers: Authorization: Bearer YOUR_COPILOT_API_KEY Content-Type: application/json Body:
{ "pdf_url": "{{ $node['Webhook'].json['papers'][0].file_url }}", "extraction_prompt": "Extract all claims about effectiveness, novelty, and feasibility. Format as JSON with keys: claims (array), methodology (string), key_results (array)"
}

The API returns structured JSON. Route this into a Set node that builds an object with the extracted claims plus the section label (background, methodology, etc.).

Grouping by section

After iterating through all papers, use a Group By node to cluster the extracted data by section. This gives you a clean mapping: background section gets data from all papers tagged "background", methodology gets the methodology papers, and so on.

Generating proposal text

For each section, call Copy.ai's API. Copy.ai has a /generate endpoint that accepts a brief and returns polished copy:

POST https://api.copy.ai/v1/generate
Headers: Authorization: Bearer YOUR_COPYAI_API_KEY Content-Type: application/json Body:
{ "brief": "Using these research claims, write a 300-word grant proposal section titled 'Research Background' for a {{ $node['Webhook'].json['grant_funder'] }} grant. Claims: {{ $node['Group By'].json.background.claims.join(', ') }}", "tone": "academic and formal", "max_tokens": 500
}

Copy.ai returns generated text. Store this in a new array alongside the section name.

Assembling in Lex

Lex doesn't have a direct API for document creation, but you can use Zapier as a bridge. Set up a Zapier action within n8n using a Webhooks by Zapier node:

POST https://hooks.zapier.com/hooks/catch/YOUR_ZAPIER_ID/YOUR_CATCH_HOOK_ID
Body:
{ "sections": [ { "title": "Research Background", "content": "{{ $node['Copy.ai'].json.background }}" }, { "title": "Methodology", "content": "{{ $node['Copy.ai'].json.methodology }}" }, { "title": "Expected Impact", "content": "{{ $node['Copy.ai'].json.impact }}" } ], "grant_title": "My Research Proposal"
}

In Zapier, create a multi-step zap that reads the webhook payload and uses the Lex integration to create a new document. Lex will auto-populate with the generated sections.

Error handling

Add an Error Trigger node downstream to catch failures. If Chat With PDF times out (PDFs over 50MB can be slow), retry after 30 seconds using a Wait node. If Copy.ai hits rate limits, queue the request in a separate workflow using n8n's queue system.

The Manual Alternative

If you prefer not to automate the full pipeline, you can use these tools semi-manually. Copy your research outline and key papers directly into Chat With PDF by Copilot.us, then manually review the extracted information. Copy the extracted claims into Copy.ai and generate proposal sections individually. Finally, paste the polished sections into Lex where you finish editing and formatting. This takes about 40 to 60 hours instead of 200 hours, but removes the scheduling and debugging overhead of a full workflow.

Pro Tips

Start with one grant type.

Different funders (UKRI, NIH, Horizon Europe) have different proposal structures and scoring rubrics.

Build and test your workflow against one funder's template first. You can add branching logic later to handle multiple funder formats, but it's easier to optimise for one target initially.

Validate extracted claims.

Chat With PDF by Copilot.us is powerful but sometimes extracts context incorrectly. Add a human review step before Copy.ai runs. Use a Pause node in n8n to halt the workflow and send extracted claims to your email for sign-off. Only proceed once you confirm.

Batch similar sections.

If you're writing multiple proposals with overlapping research areas, run them through the same extraction step. Store the extracted data in a JSON file and reuse it for subsequent proposals. This saves API calls and keeps your messaging consistent across proposals.

Watch Copy.ai's output closely.

Generated text is a starting point, not final copy. Copy.ai sometimes inflates claims or removes nuance. Always have a researcher review the generated sections before submission. Use Lex's comment feature to mark areas needing human revision.

Cache PDF extractions.

If you're running the workflow repeatedly on the same papers, store the extraction results locally and reference them instead of re-calling Chat With PDF. This cuts costs and speeds up iteration.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
Chat With PDF by Copilot.usPro ($29)£23Supports unlimited PDF uploads; API rate limit 100 requests/hour.
Copy.aiGrowth ($49/month)£3950,000 words/month; sufficient for 10 to 15 proposals. Overage £0.10 per 100 words.
LexPro ($10/month)£8Unlimited documents and edits. Free tier works but lacks collaboration features.
n8nSelf-hosted or Cloud Pro ($50/month)£0 or £40Self-hosted is free; Cloud Pro recommended if you need managed uptime and backups.
ZapierStandard ($25/month)£202,000 tasks/month; sufficient for moderate use.

Total monthly cost: approximately £90 to £130.

If you write four to five major grant proposals per year, that's a per-proposal cost of £18 to £26 in tool fees, plus the time to integrate and test the workflow once (roughly 8 to 12 hours). Compare this to hiring a research proposal consultant (typically £3,000 to £8,000) or spending 200+ hours yourself. The automation pays for itself on the first proposal.