← Back to recipes

Prioritise which grant applications to pursue

fundraisingintermediateproven

The problem

You've found 20 grants you could apply for but only have time to write 5 good applications. How do you decide which ones to pursue? You're comparing: different funding amounts, varying eligibility fit, different effort levels, unknown competition. Making the wrong choice means wasting weeks on low-probability applications while missing better opportunities.

The solution

Build a scoring system that rates grant opportunities against your criteria: strategic fit, realistic chance of success, funding amount vs effort required, timing, and restrictions. Each grant gets scored (0-100), weighted by what matters most to you. You can see 'High strategic fit, medium effort, 60% estimated success = score 75' vs 'Low fit, high effort, 20% success = score 35'. You decide the criteria, AI helps you apply them consistently.

What you get

A ranked list of grant opportunities scored against your priorities. Each grant shows: overall score (0-100), breakdown by criteria (strategic fit: 85%, success probability: 40%), effort estimate, and why it scored high/low. Top-scoring grants are where to focus effort. You're making strategic choices based on clear criteria, not gut feeling.

Before you start

  • A list of grant opportunities with key details (amount, deadline, restrictions, eligibility)
  • Clear understanding of what matters to your organisation (strategic priorities, capacity)
  • Historical data on application success rates (optional but helpful)
  • A Google account for Colab
  • Basic Python skills or willingness to adapt example code

When to use this

  • You've found more grant opportunities than you can realistically apply for
  • You're trying to decide between multiple funding sources
  • Grant writing capacity is limited and you need to prioritize
  • You want consistent, defensible criteria for opportunity selection

When not to use this

  • You only have 1-2 opportunities - just assess them individually
  • You haven't defined what good grant fit looks like for your organisation
  • You have unlimited capacity to apply for everything
  • The decision criteria are so subjective that scoring doesn't help

Steps

  1. 1

    Define your scoring criteria

    What matters for your organization? Strategic fit with mission (0-10), realistic eligibility match (0-10), funding amount relative to effort (0-10), success probability (0-10), timeline fit (0-10), flexibility of restrictions (0-10)? Choose 5-7 criteria. Be specific about what high/low scores mean.

  2. 2

    Set criteria weights

    Not all criteria matter equally. Maybe strategic fit is 30%, funding amount is 25%, success probability 20%, effort 15%, timeline 10%. Weights must sum to 100%. This reflects your priorities: would you rather pursue a perfect-fit £10k grant or a loose-fit £50k grant?

  3. 3

    Score each grant opportunity

    For each potential grant, rate it 0-10 on each criterion. Be honest: 'Strategic fit: 8/10 - aligns well', 'Success probability: 3/10 - we're a stretch for their criteria', 'Effort: 6/10 - medium complexity application'. Create a spreadsheet with all grants and scores.

  4. 4

    Calculate weighted scores

    Use the example code to multiply each score by its weight and sum to an overall score (0-100). Grant A might score 75 (high strategic fit compensates for medium amount), Grant B scores 45 (large amount but poor fit and low success probability).

  5. 5

    Review the ranked list

    Sort by overall score. Do the top-ranked grants feel right? If something scored high but doesn't feel worth pursuing, check why: maybe you weighted criteria wrong, or missed a factor. If something scored low but you really want to pursue it, examine your assumptions.

  6. 6

    Adjust criteria and weights

    Refine your scoring based on what you learn. Maybe timeline matters more than you thought. Maybe very large grants warrant higher effort even with lower success probability. Re-score and re-rank. The process makes your decision criteria explicit.

  7. 7

    Set your cutoff

    Decide: grants scoring 70+ are priority, 50-70 are 'if time allows', below 50 are pass. Based on capacity, pursue top 5-7 opportunities. You've now made a strategic choice about resource allocation, not a random one.

  8. 8

    Track outcomes and refine(optional)

    Record which grants you applied for and results. Did high-scoring grants actually succeed more? Were your success probability estimates accurate? Use this to refine your scoring for future opportunities. Your criteria improve with experience.

Example code

Score and rank grant opportunities

This scores grants against your criteria and ranks them. Adapt the criteria and weights to your organisation's priorities.

import pandas as pd
import numpy as np

# Load grant opportunities
# Columns: grant_name, amount, your scores for each criterion
grants = pd.read_csv('grant_opportunities.csv')

print(f"Loaded {len(grants)} grant opportunities")
print(f"Total potential funding: £{grants['amount'].sum():,}")

# Define your scoring criteria and weights
# Adjust these based on what matters to your organisation
criteria = {
    'strategic_fit': {
        'weight': 0.30,  # 30% of overall score
        'description': 'Alignment with mission and strategy'
    },
    'success_probability': {
        'weight': 0.20,  # 20% of overall score
        'description': 'Realistic chance of winning based on eligibility'
    },
    'funding_vs_effort': {
        'weight': 0.25,  # 25% of overall score
        'description': 'Funding amount relative to application complexity'
    },
    'timeline_fit': {
        'weight': 0.15,  # 15% of overall score
        'description': 'Deadline works with our capacity'
    },
    'flexibility': {
        'weight': 0.10,  # 10% of overall score
        'description': 'Few restrictions on how funding can be used'
    }
}

# Verify weights sum to 1.0
total_weight = sum(c['weight'] for c in criteria.values())
if not np.isclose(total_weight, 1.0):
    print(f"WARNING: Weights sum to {total_weight}, not 1.0. Adjusting...")
    for key in criteria:
        criteria[key]['weight'] /= total_weight

print("\nScoring criteria:")
for criterion, details in criteria.items():
    print(f"  {criterion}: {details['weight']*100:.0f}% - {details['description']}")

# Calculate weighted scores
def calculate_score(row):
    """Calculate overall weighted score for a grant"""
    score = 0
    breakdown = {}

    for criterion, details in criteria.items():
        # Each criterion scored 0-10 in your spreadsheet
        criterion_score = row[criterion]  # 0-10
        weight = details['weight']

        # Weighted contribution (0-10 scale)
        contribution = criterion_score * weight * 10
        score += contribution
        breakdown[criterion] = criterion_score

    return score, breakdown

# Score all grants
grants['overall_score'] = 0.0
score_breakdowns = []

for idx, row in grants.iterrows():
    score, breakdown = calculate_score(row)
    grants.at[idx, 'overall_score'] = round(score, 1)
    score_breakdowns.append(breakdown)

# Sort by score (highest first)
grants = grants.sort_values('overall_score', ascending=False)

print(f"\nTop 10 opportunities by score:")
print(grants.head(10)[['grant_name', 'amount', 'overall_score']].to_string(index=False))

print(f"\n{'='*60}")
print("Detailed breakdown of top 5:")

for idx, (_, row) in enumerate(grants.head(5).iterrows(), 1):
    print(f"\n{idx}. {row['grant_name']}")
    print(f"   Amount: £{row['amount']:,}")
    print(f"   Overall Score: {row['overall_score']:.1f}/100")
    print(f"   Breakdown (0-10 scale):")

    breakdown_idx = grants.index.get_loc(row.name)
    breakdown = score_breakdowns[breakdown_idx]

    for criterion, details in criteria.items():
        criterion_score = breakdown[criterion]
        stars = '★' * int(criterion_score) + '☆' * (10 - int(criterion_score))
        print(f"     {criterion}: {criterion_score}/10 {stars}")

    # Decision recommendation
    if row['overall_score'] >= 70:
        recommendation = "PRIORITY - Pursue"
    elif row['overall_score'] >= 50:
        recommendation = "Consider if capacity allows"
    else:
        recommendation = "Pass - low priority"

    print(f"   → {recommendation}")

# Summary statistics
print(f"\n{'='*60}")
print("Summary:")

high_priority = len(grants[grants['overall_score'] >= 70])
medium_priority = len(grants[(grants['overall_score'] >= 50) & (grants['overall_score'] < 70)])
low_priority = len(grants[grants['overall_score'] < 50])

print(f"  High priority (70+): {high_priority} grants")
print(f"  Medium priority (50-70): {medium_priority} grants")
print(f"  Low priority (<50): {low_priority} grants")

high_priority_value = grants[grants['overall_score'] >= 70]['amount'].sum()
print(f"\nTotal potential from high-priority grants: £{high_priority_value:,}")

# Export results
grants.to_csv('grant_priorities.csv', index=False)
print(f"\nFull rankings saved to grant_priorities.csv")

print("\nNext steps:")
print("1. Review top-scoring grants - do they feel right?")
print("2. Adjust weights/criteria if rankings seem off")
print("3. Focus effort on high-priority opportunities")
print("4. Track success rates to refine scoring")

Tools

Google Colabplatform · freemium
Visit →
pandaslibrary · free · open source
Visit →

Resources

At a glance

Time to implement
days
Setup cost
free
Ongoing cost
free
Cost trend
stable
Organisation size
small, medium, large
Target audience
fundraising, ceo-trustees, operations-manager

All tools are free. Main investment is defining your scoring criteria thoughtfully. Once built, scoring new opportunities takes minutes. Prevents wasting time on low-value applications.

Part of this pathway

Written by Make Sense Of It

Last updated: 2024-12-22