Case Study

Automated Grant Discovery

An AI-powered pipeline that reads Do Moore Good's grant inbox, extracts structured opportunity data, scores each grant against the org's criteria, and routes high-match opportunities directly into the team's Asana workflow.

Apps Script Gemini AI Google Sheets Asana API Automation

The Problem

Do Moore Good receives a steady stream of grant newsletters, forwarded opportunities, and digest emails. Staff were manually reading each one, deciding whether it fit, and tracking promising leads in their heads or scattered notes. Relevant opportunities were getting missed, and the evaluation process depended entirely on who happened to see what.

How It Works

A dedicated Gmail alias (grantsbot@) receives forwarded emails from staff or auto-forwarded from subscriptions. A daily Apps Script reads new messages, sends them to Gemini for structured extraction and scoring, logs every result to a Google Sheet, and pushes high-match opportunities to Asana as pre-filled tasks.

Gmail Alias
grantsbot@
Apps Script
Daily trigger, 7am
Gemini AI
Extract + score
Google Sheets
All opportunities
Asana
High-match only

What the AI actually does

Each email is sent to Gemini along with a criteria profile stored in the sheet: DMG's mission areas, geography, budget, program focus, and target populations. Gemini extracts structured fields from the email and then scores the opportunity on a 1-10 scale based on how well it matches. The scoring criteria live in the sheet, not the code, so staff can update them without a developer.

Mission alignment (violence prevention, reentry, youth development)
Geographic fit (Philadelphia, West Philadelphia priority)
Org eligibility (grassroots 501c3, under $250k budget)
Award range and match requirements
Whether it is actually a grant (vs. a newsletter or digest)
Deadline viability and application status

The System in Action

Automated Grant Tracker — Opportunities
FileEditViewInsertFormatData
Opportunities
ID Funder Program Deadline Award Geography Score Recommendation Asana Confidence
2 GR-2026-1007 Philadelphia Office of Public Safety Targeted Community Investment Grant 2026-05-08 $5,000–$50,000 Philadelphia 10 Pursue High
3 GR-2026-1001 District Attorney's Office · City of Philadelphia Violence Prevention Grants 2025-09-19 (not specified) Philadelphia 9 Pursue High
4 GR-2026-1003 William Penn Foundation Upcoming RFPs (5 areas) TBD TBD Philadelphia region 7 Review Medium
5 GR-2026-1006 Philadelphia City Fund Community Resilience & Environmental Justice Fund 2026-06-05 $30,000 Philadelphia 6 Review High
6 GR-2026-1002 Bread & Roses Community Fund 2025 Gender Justice Organizing Fund 2025-10-31 $10,000 Philadelphia region 5 Pass High
7 GR-2026-1000 Robert Wood Johnson Foundation (newsletter subscription) 1 Ineligible Low
AI Evaluation — GR-2026-1007
Funder
Philadelphia Office of Public Safety
Program
Targeted Community Investment Grant (TCIG)
Deadline
May 8, 2026
Award Range
$5,000 — $50,000
Geography
Philadelphia
Match Required
None
Focus Areas
Violence Prevention & Intervention, Youth Engagement & Mentorship, Community Healing & Trauma Programs, Workforce Development, Neighborhood Safety
Eligibility
Grassroots orgs, community-based nonprofits, neighborhood-based initiatives, fiscally sponsored orgs working to reduce violence in Philadelphia
Fit Score
10 / 10
Confidence
High
Recommendation
Pursue
AI Rationale
This opportunity is an exceptional fit, directly aligning with DMG's core mission in violence prevention, youth development, and neighborhood safety for grassroots organizations in Philadelphia. The award range is ideal, and the eligibility criteria perfectly match DMG's structure.
Asana — Grants Review
Pursue: Targeted Community Investment Grant — Philadelphia Office of Public Safety
Grants Review
Description
AI Rationale: Exceptional fit. Directly aligns with DMG's core mission in violence prevention, youth development, and neighborhood safety for grassroots organizations in Philadelphia. Award range is ideal. Eligibility criteria perfectly match DMG's structure.

Eligibility: Grassroots orgs, community-based nonprofits, neighborhood-based initiatives working to reduce violence in Philadelphia. No match required.

Focus areas: Violence Prevention, Youth Engagement, Community Healing, Workforce Development, Neighborhood Safety Initiatives.
Assignee SMS. Moore
Due date May 8, 2026
Projects Grants Review
Custom Fields
Score 10 / 10
Recommendation Pursue
Confidence High
Funder Philadelphia Office of Public Safety
Program TCIG
Award Range $5,000 – $50,000
Geography Philadelphia
Match Req. None

Under the Hood

Gmail Alias Intake

A dedicated grantsbot@ alias receives forwarded opportunities from staff or auto-forwarded subscriptions. The script reads only unprocessed messages.

Apps Script Trigger

A time-based trigger runs daily at 7am. Each run processes new messages, logs duration and results, and skips anything already in the sheet by GmailMessageId.

Gemini Extraction

Each email body is sent to Gemini via Vertex AI with a structured prompt. The model returns JSON: funder, program, deadline, award range, eligibility, geography, focus areas, summary.

Criteria in the Sheet

DMG's org profile lives in a dedicated Criteria tab: mission areas, geography, budget, target population. Gemini reads this when scoring, so the criteria can be updated without touching code.

1-10 Fit Scoring

Each opportunity gets a numeric fit score, a recommendation (Ineligible / Pass / Review / Pursue), a confidence level, and a plain-language rationale explaining the score.

Smart Filtering

The AI correctly identifies non-opportunities: newsletter confirmations, digest emails, and subscription notices get scored 1-2 and marked Ineligible without cluttering the review queue.

Sheets Audit Trail

Every opportunity is logged to the sheet with all 26 fields intact, regardless of score. Nothing is discarded. Staff can filter or re-evaluate at any time.

Asana API Sync

High-match opportunities (Pursue or Review above a threshold) are pushed to a dedicated Asana project via the REST API. Every extracted field maps to a custom Asana field matching the evaluation criteria.

Run Log

Each run appends a row to a Log tab: timestamp, duration, messages processed, items needing review, items skipped, and any errors. Useful for monitoring without opening a dashboard.

Impact

Tech Stack

Google Apps Script Gmail API Vertex AI / Gemini Google Sheets Asana REST API Time-based Triggers

Need a system like this?

I build practical automations that replace manual work with pipelines that run on their own and surface what actually matters.

Let's talk