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.
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.
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.
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.
| 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 |
A dedicated grantsbot@ alias receives forwarded opportunities from staff or auto-forwarded subscriptions. The script reads only unprocessed messages.
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.
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.
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.
Each opportunity gets a numeric fit score, a recommendation (Ineligible / Pass / Review / Pursue), a confidence level, and a plain-language rationale explaining the score.
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.
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.
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.
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.