All Startup Ideas

AI Grant Writing Assistant for Nonprofits

AI drafts funder-specific grant proposals and LOIs from one org profile, tracks deadlines and outcomes — built for nonprofits too small to afford a grant writer.

A food-pantry director in a five-person nonprofit finds a $25,000 foundation grant with a deadline in eleven days. The RFP wants a two-page narrative in the funder's own template, a logic model, and a budget justification formatted their specific way — nothing like the boilerplate case-for-support doc she reused last month for a different funder. She has a board meeting Tuesday, a volunteer shift Thursday, and payroll to run. The grant doesn't get written. This is not a rare failure of discipline; it is the default outcome for the roughly 1.5 million registered 501(c)(3) organizations in the US, most of which run on budgets small enough that a dedicated grants or development staffer is a luxury they will never afford.

Built for Non-Technical, Freelancers, Solo Founders.

Suggested stack: Next.js 15 (App Router) + Vercel, Supabase (Postgres + Auth + Storage), pgvector on Supabase, Claude Sonnet (long-context) with prompt caching, docx / @react-pdf/renderer, Resend + Stripe Billing. Weekend scope: about 10 hours.

The Problem

A food-pantry director in a five-person nonprofit finds a $25,000 foundation grant with a deadline in eleven days. The RFP wants a two-page narrative in the funder's own template…

The Solution

A web app that turns a nonprofit's mission, programs, and impact data into a reusable knowledge base, then drafts funder-specific proposals and letters of inquiry on demand…

Market Research

Roughly 1.5-1.9 million nonprofit organizations are registered with the IRS in the United States, with 1.54 million holding 501(c)(3) status — the large majority of them small…

Competitive Landscape

Instrumentl — The category leader for grant discovery and pipeline tracking, with strong funder-matching and deadline tools. Priced for organizations with real development…

Business Model

Free ($0) — 1 org profile, 2 AI-drafted proposals/month, deadline tracker for up to 5 opportunities, watermarked exports

Recommended Tech Stack

Next.js 15 (App Router) + Vercel — Org dashboard, funder-profile intake, and draft editor in one deployable app; Vercel Cron handles the daily deadline-reminder sweep.

AI Prompts to Build This

Copy these build prompts into Claude, Cursor, or your AI coding tool. Create a free account to unlock the full research behind them.

  1. 1. Project Setup

    Create a Next.js 15 App Router + TypeScript + Tailwind project called "GrantDraft" for nonprofit grant writing. Provision Supabase with these tables:
    
    - organizations(id, name, mission_statement, ein, budget_range, primary_contact_email, plan)
    - programs(id, org_id, name, description, target_population, annual_budget)
    - impact_metrics(id, org_id, program_id, metric_name, value, year, source_note)
    - funders(id, org_id, name, funder_type ENUM[foundation, government, corporate], priorities JSONB, format_spec JSONB, next_deadline)
    - proposals(id, org_id, funder_id, type ENUM[loi, full_proposal], status ENUM[drafting, submitted, funded, declined, no_response], draft_content TEXT, submitted_at)
    - outcomes(id, proposal_id, result, amount_requested, amount_awarded, decided_at, notes)
    
    Enable row-level security so every row is scoped to organizations the authenticated user belongs to. Wire Stripe with four products: Free, Starter ($39/mo), Growth ($89/mo), Agency ($199/mo). Install pgvector as a Supabase extension and add an embeddings column to programs and impact_metrics for retrieval.
  2. 2. Funder-Format Parser + Draft Generator

    Build the core drafting feature: parse a funder's RFP text into a structured format spec, then generate a matched draft.
    
    Step 1 — Parse the RFP:
    Accept pasted RFP/LOI guideline text. Send to Claude with a strict JSON schema output:
    { sections: [{ name: string, max_words: number|null, required: boolean, guidance: string }], overall_page_limit: number|null, required_attachments: string[], stated_priorities: string[], tone_notes: string }
    Store this as funders.format_spec.
    
    Step 2 — Retrieve org context:
    Given the funder's stated_priorities, run a pgvector similarity search over this organization's programs and impact_metrics embeddings to pull the 5-10 most relevant facts (program descriptions, outcome numbers, budget figures).
    
    Step 3 — Generate the draft:
    Prompt Claude: "You are drafting a grant [proposal/LOI] for [org_name] to [funder_name]. Follow this exact section structure and word limits: [format_spec.sections]. Use ONLY the following verified organization facts — never invent statistics or outcomes: [retrieved facts]. Match the funder's stated priorities: [stated_priorities]. Write in a confident, specific, non-generic nonprofit voice." Return one draft per required section, respecting each section's max_words. Flag any section where the org's available data is too thin to answer specifically, rather than filling with generic filler language.
    
    Persist the draft to proposals.draft_content and show word counts against each section's limit in the editor UI.
  3. 3. Deadline Tracker + Outcomes Loop

    Build the deadline tracking and outcomes-feedback system.
    
    Deadline tracker:
    - Calendar view of all funders.next_deadline across the org, color-coded by days remaining (red under 7 days, yellow under 21, green otherwise).
    - Vercel Cron job runs daily, queries proposals with status='drafting' or funders with upcoming next_deadline within 14/7/3/1 days, and sends a Resend digest email to the org's contacts.
    
    Outcomes loop:
    - When a proposal's status changes to 'funded' or 'declined', prompt the user for amount and a short free-text reason (e.g. "budget didn't match our program size," "board wanted more community partnerships").
    - Store in outcomes. Build a simple dashboard: win rate by funder_type, win rate by proposal length, and a ranked list of which stated_priorities correlate with funded outcomes for this org.
    - Surface this on the funder-matching screen: when a new funder is added, show "similar funders you've won with" and "similar funders that declined you, and why" pulled from the outcomes table, so staff can decide whether a funder is worth the time before drafting.