My nonprofit friend missed a $50K grant deadline by 2 days — built this so it won't happen again

Grant announcements arrive by email as PDF attachments. Each one is a 20-40 page RFP with funding amounts, eligibility rules, a list of required documents, evaluation criteria weights, and two critical dates — the Letter of Intent deadline and the full proposal deadline. If you’re at a nonprofit or research institution receiving dozens of these a month, someone has to open every single one and log the key details before deciding whether to pursue it.

The ones that don’t get logged properly get missed. A $50K federal grant arrived during a busy grant writing period. It sat in the inbox unread. The deadline passed 2 days before anyone noticed it.

Built a workflow that processes every grant email the moment it arrives.

What it does

Grant email with PDF attachment arrives in Gmail → detects PDF → extracts all opportunity details → calculates days until deadline and urgency → logs to grants tracker → posts Slack alert with required documents checklist

About 12-15 seconds per announcement. Gmail filter pre-screens for emails with subject lines containing “grant,” “funding,” “RFP,” or “RFA” — so only relevant emails get processed.

What gets extracted

Opportunity basics:

  • Funder name, grant program name

  • Funding opportunity number

  • Funding type (federal, foundation, corporate, etc.)

  • Funding amount range — min and max

  • Project duration

Eligibility:

  • Eligible organization types

  • Geographic restrictions

Key dates:

  • Letter of Intent (LOI) deadline

  • Full proposal deadline

  • Award notification date

  • Project start date

  • Days until deadline — calculated automatically

Urgency levels:

  • 14 days or less → Urgent

  • 15-30 days → High

  • More than 30 days → Normal

Requirements:

  • Required documents list

  • Evaluation criteria with percentage weights

  • Matching funds required (Yes/No)

  • Indirect cost rate allowed

Contact:

  • Program officer name, email, phone

What lands in Slack


📜 New Grant Opportunity

Funder: National Institutes of Health

Program: R01 Research Project Grant

Type: Federal Grant

💰 Funding: $250,000 - $500,000

📅 Duration: 3-5 years

⏰ Key Dates:

• LOI Deadline: April 15, 2025

• Proposal Deadline: May 30, 2025

• Days Until: 22 (High)

📋 Required Documents (8):

- Project Narrative, Budget Justification,

Biosketch, Letters of Support, IRB Approval,

Facilities Statement, Human Subjects,

Data Management Plan

🎯 Evaluation: Scientific Merit: 50% | Innovation: 20% | Investigator: 15% | Approach: 15%

The team sees the deadline countdown and required docs list without opening the PDF.

What lands in Google Sheets

Each row: Funder, Program, Opportunity #, Type, Funding Range, Duration, LOI Deadline, Proposal Deadline, Days Until, Urgency, Eligibility, Required Docs (count), Matching Required, IDC Rate, Contact, Status, Added Date

Status defaults to “New” for every incoming opportunity. Filter by Urgency to see what needs immediate attention. Sort by Days Until to build your monthly grant calendar.

Setup

You’ll need:

  • Gmail (where grant announcements arrive)

  • Google Sheets (free)

  • n8n instance (self-hosted — uses PDF Vector community node)

  • PDF Vector account (free tier: 100 credits/month)

  • Slack (for opportunity alerts)

About 15 minutes to configure.

Download

Workflow JSON:

grant-proposal-analyzer.json

Full workflow collection:

khanhduyvt0101/workflows


Setup Guide

Step 1: Get your PDF Vector API key

Sign up at pdfvector.com — free plan works for testing.

Step 2: Create your Sheet

Headers in Row 1:


Funder | Program | Opportunity # | Type | Funding Range | Duration | LOI Deadline | Proposal Deadline | Days Until | Urgency | Eligibility | Required Docs | Matching Required | IDC Rate | Contact | Status | Added Date

Step 3: Import and configure

Download JSON → n8n → Import from File.

Grant Email (Gmail Trigger):

  • Connect Gmail account (OAuth2)

  • Pre-configured search filter: subject:(grant OR funding OR RFP OR RFA OR proposal) has:attachment filename:pdf newer_than:1d

  • Adjust search query to match your inbox patterns

Has PDF? (IF node):

  • No config needed — automatically filters non-PDF attachments

PDF Vector Extract:

  • Add PDF Vector credential (Bearer Token), paste API key

  • Automatically finds the PDF attachment regardless of filename

Log to Tracker:

  • Connect Google Sheets, paste Sheet ID

Send to Slack:

  • Connect Slack, select your grants team channel

Accuracy

Tested on federal grant announcements (NIH, NSF, USDA, HUD), foundation RFPs, and corporate giving guidelines.

  • Funder name and program title: ~97%

  • Funding amounts: ~94% — reliable when clearly stated as a range

  • Proposal deadline: ~96% — the most prominently listed date in any RFP

  • LOI deadline: ~91% — present when LOI is required; skipped otherwise

  • Required documents list: ~89% — depends on how explicitly the RFP lists them

  • Evaluation criteria with weights: ~86% — strong on federal grants with standard scoring tables; weaker on foundation RFPs that describe criteria narratively

Cost

3-4 credits per grant PDF. Free tier covers ~25 announcements per month.

Customizing it

Eligibility pre-screening:

Add an IF node after Process Grant — check if your organization type appears in eligibilityText. If not, skip logging and alert with “Not eligible” flag instead.

Weekly pipeline digest:

Add a scheduled workflow that reads your Sheets tracker every Monday and posts all opportunities with fewer than 30 days remaining — your weekly grant calendar in one Slack message.

Assign to team members:

After the Slack alert, add a step that tags a specific team member based on funding type — federal grants go to one person, foundation grants to another.


Limitations

  • Requires self-hosted n8n (PDF Vector is a community node)

  • Gmail filter catches most grant emails but may miss unusually formatted subject lines — adjust the search query for your inbox

  • Deadline calculation is point-in-time — doesn’t automatically send reminders as deadlines approach

  • Some RFPs embed deadlines in tables or headers that extract inconsistently


PDF Vector n8n integration

Full workflow collection

Questions? Drop a comment.

nice write-up — the deadline countdown is a solid detail most people miss. are you handling scanned pdfs tho? figured thats the main edge case with inconsistent formatting across different grants

Hey Benjamin, scanned PDFs work but accuracy drops hard.

Clean digital PDFs → 95%+ Scanned grants → more like 85-88%

Worst case: deadline was in a footer as an image, totally missed it.

But honestly better to auto-process 90% accurately than manually process nothing on time. The Slack alert links to the PDF so if something looks off, quick spot check.

that 85-88% on scanned pdfs is a decent floor for a first-pass system — and the spot-check via slack link is the right fallback design. the footer-image case is brutal, but flagging an empty or low-confidence deadline in the alert would catch most of those before they slip through.

that 85-88% on scanned PDFs is actually solid for this use case — the Slack alert linking to the PDF is exactly right, because humans are still in the loop for the edge cases where extraction gets fuzzy. beats missing a deadline while waiting for perfect extraction.