← Back to recipes

Generate grant reports from project data

complianceintermediateproven

The problem

Grant reports are due and you're staring at a blank page. You've got spreadsheets of beneficiaries served, outcomes achieved, budget spent - but turning that into a compelling narrative takes hours. Each funder wants slightly different information formatted differently. You end up copying and pasting from previous reports, hoping you've updated all the numbers.

The solution

Feed your project data into Claude or ChatGPT with a structured prompt that includes: what the funder wants to know, your project's story, the numbers to include, and your organisation's voice. The AI drafts a complete report covering impact, outcomes, challenges, learnings, and budget. You review and refine rather than writing from scratch.

What you get

A draft grant report that covers all required sections: project summary, activities delivered, beneficiaries reached, outcomes achieved, budget breakdown, challenges faced, learnings captured, and next steps. Written in your organisation's voice with the data integrated naturally into narrative. Ready for review and submission.

Before you start

  • Project data: beneficiaries served, activities delivered, outcomes tracked
  • Budget information: what was allocated vs spent
  • The original grant proposal and funder requirements
  • A Claude or ChatGPT account (paid recommended for longer reports)

When to use this

  • You've got the data but struggle to turn it into narrative
  • You're writing multiple similar reports for different funders
  • Reports are due and you're short on time
  • You want consistency across multiple project reports

When not to use this

  • Your funder requires very specific technical formats or templates that AI might not follow exactly
  • You don't have clear data on outcomes - AI can't make up impact
  • The report is your first communication with a funder - might need more personal touch
  • Your project didn't go to plan and needs careful explanation of why

Steps

  1. 1

    Gather your project data

    Pull together: how many people you served, what activities you delivered, what outcomes were achieved, budget vs actual spend, timeline vs plan. Also grab quotes from beneficiaries, case studies, challenges you faced. Everything that might go in the report.

  2. 2

    Review funder requirements

    Check what the funder asked for: specific sections, word count, particular outcomes they care about, budget breakdown format. Look at your original proposal - they'll want to see how you delivered against what you promised.

  3. 3

    Create your report brief

    Write a structured brief for the AI including: funder name and what they care about, required sections, key numbers to include, your organisation's voice (formal/approachable), word count target, and the story you want to tell (what went well, challenges, learnings).

  4. 4

    Generate the first draft

    Paste your brief and data into Claude or ChatGPT. Ask it to write each section systematically: executive summary, activities delivered, beneficiaries reached, outcomes achieved, financial report, challenges and learnings, next steps. Let it work through the whole report structure.

  5. 5

    Review for accuracy and tone

    IMPORTANT: Check the AI didn't misinterpret your data or make claims you can't support. AI can hallucinate statistics, outcomes, or details that weren't in your source data. Verify every number against your original data - this is critical for funder trust. Check the tone matches your organisation. Look for generic phrases ('we are delighted to report') and ask for more specific language that reflects your actual work.

  6. 6

    Add specific examples and stories

    AI-generated text can feel generic. Add specific beneficiary stories, staff quotes, concrete examples of impact. These make the report compelling and authentic. Use the AI draft as structure but make the content yours.

  7. 7

    Refine sections that need more detail

    If any section feels thin or doesn't answer the funder's questions properly, paste that section back to the AI with more specific guidance: 'This section needs to explain WHY we saw this outcome. Here's more context...' Iterate on weak sections.

  8. 8

    Format and finalize

    Add any charts, graphs, or photos your funder expects. Format according to their template if they provided one. Do a final read-through for flow and coherence. Get someone else to read it - does it tell a clear story?

Example code

Generate report from structured project data

This shows how to structure your data and generate a comprehensive grant report. Adapt the data structure to match your project tracking.

from openai import OpenAI
import json

client = OpenAI()

# Your project data - pull this from your CRM/spreadsheets
project_data = {
    "funder": {
        "name": "Big Trust Foundation",
        "focus": "youth mental health",
        "grant_amount": 50000,
        "reporting_period": "Jan-Dec 2024"
    },
    "activities": [
        "Delivered 48 weekly group sessions for young people aged 16-25",
        "Ran 6 family support workshops",
        "Provided 1-1 mentoring for 15 high-risk individuals",
        "Created peer support network with 30 active members"
    ],
    "beneficiaries": {
        "direct": 78,
        "indirect": 120,
        "demographics": "68% female, 32% male, avg age 19, 45% from minority ethnic backgrounds"
    },
    "outcomes": {
        "wellbeing_improved": "72% showed improved wellbeing scores (WEMWBS)",
        "engaged_ongoing": "65% continued engagement after 3 months",
        "crisis_reduced": "85% reported reduced crisis episodes",
        "quotes": [
            "This group gave me somewhere I felt safe to talk",
            "My mentor helped me stay in college when I was going to drop out"
        ]
    },
    "budget": {
        "allocated": 50000,
        "spent": 48500,
        "breakdown": {
            "staff": 35000,
            "venue": 8000,
            "materials": 3500,
            "evaluation": 2000
        }
    },
    "challenges": [
        "Recruitment took longer than expected - needed 3 months not 1",
        "Some participants found group format difficult - adapted with more 1-1 support",
        "Covid cases in March disrupted 2 sessions - moved online"
    ],
    "learnings": [
        "Co-design with young people from the start led to better engagement",
        "Having both group and 1-1 options met different needs",
        "Peer support network became most valued element - will expand this"
    ],
    "next_steps": [
        "Continue peer network with community ownership",
        "Develop digital resources based on session content",
        "Expand to include 14-16 age group based on demand"
    ]
}

def generate_grant_report(project_data):
    prompt = f"""You are writing a grant report for {project_data['funder']['name']}.

They funded a {project_data['funder']['focus']} project with £{project_data['funder']['grant_amount']:,}
for the period {project_data['funder']['reporting_period']}.

Write a comprehensive grant report with these sections:

1. EXECUTIVE SUMMARY (200 words)
   Concise overview of what was delivered and achieved

2. PROJECT ACTIVITIES
   What was delivered:
   {json.dumps(project_data['activities'], indent=2)}

3. BENEFICIARIES REACHED
   Who we worked with:
   - Direct beneficiaries: {project_data['beneficiaries']['direct']}
   - Indirect beneficiaries: {project_data['beneficiaries']['indirect']}
   - Demographics: {project_data['beneficiaries']['demographics']}

4. OUTCOMES ACHIEVED
   Impact we created:
   {json.dumps(project_data['outcomes'], indent=2)}

   Include the beneficiary quotes naturally in this section.

5. FINANCIAL REPORT
   Budget allocated: £{project_data['budget']['allocated']:,}
   Budget spent: £{project_data['budget']['spent']:,}
   Breakdown: {json.dumps(project_data['budget']['breakdown'], indent=2)}

   Explain the budget in prose, not just numbers.

6. CHALLENGES AND LEARNINGS
   What didn't go to plan and what we learned:
   Challenges: {json.dumps(project_data['challenges'], indent=2)}
   Learnings: {json.dumps(project_data['learnings'], indent=2)}

7. SUSTAINABILITY AND NEXT STEPS
   {json.dumps(project_data['next_steps'], indent=2)}

Writing style:
- Professional but warm and authentic
- Focus on real impact, not jargon
- Use active voice
- Be honest about challenges
- Show learning and adaptation
- Connect back to the funder's focus on {project_data['funder']['focus']}

Target length: 2000-2500 words"""

    response = client.chat.completions.create(
        model="gpt-4o",  # GPT-4 for longer, coherent reports
        messages=[{"role": "user", "content": prompt}],
        temperature=0.7  # Some creativity but not too much
    )

    return response.choices[0].message.content

# Generate report
print("Generating grant report...")
report = generate_grant_report(project_data)

# Save to file
with open("grant_report_draft.txt", "w") as f:
    f.write(report)

print("\nReport generated and saved to grant_report_draft.txt")
print(f"Word count: approximately {len(report.split())} words")
print("\nNext steps:")
print("1. Review all numbers for accuracy")
print("2. Add specific beneficiary stories")
print("3. Check against funder's requirements")
print("4. Have colleague review for clarity")
print("5. Format according to funder template")

Tools

Claudeservice · freemium
Visit →
ChatGPTservice · freemium
Visit →

Resources

At a glance

Time to implement
hours
Setup cost
free
Ongoing cost
free
Cost trend
stable
Organisation size
small, medium, large
Target audience
ceo-trustees, fundraising, program-delivery

Free tier works for shorter reports (2-3 pages). For comprehensive reports (10+ pages), paid accounts (£18-20/month) handle longer context and multiple iterations better. Still far cheaper than paying someone to write reports.

Part of this pathway