Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

grant-radar

Smart grant opportunity matching for nonprofits, research labs, and anyone chronically buried under grants.gov.

Describe your organization's mission → get daily or weekly alerts for matching federal funding opportunities. No API key needed.


What it does

Feature Details
Mission profile Describe your org once — keywords, focus areas, eligibility
Smart matching Scores every open opportunity against your mission
New-only alerts Remembers what you've seen; only surfaces fresh matches
Slack alerts Posts rich blocks to any Slack channel via incoming webhook
Webhook alerts Fires a JSON payload to any HTTP endpoint
Email alerts Sends via SMTP (Gmail, Sendgrid, etc.)
CLI Pipe-friendly --json output for scripting and cron jobs

All data comes from the free, public grants.gov search API — no registration required.


Quick start

pip install grant-radar

# Create your mission profile
grant-radar init \
  --name "Ocean Trust" \
  --mission "protecting ocean ecosystems and marine biodiversity" \
  --keywords "ocean,marine,coral,coastal,fisheries" \
  --org-type nonprofit

# Scan for matching opportunities
grant-radar scan

# Send new matches to Slack
grant-radar scan --slack https://hooks.slack.com/services/...

# Send to any webhook (Zapier, Make, n8n, etc.)
grant-radar scan --webhook https://your-endpoint.com/grants

# Pipe JSON output to jq, scripts, etc.
grant-radar scan --json | jq '.[].title'

Commands

grant-radar init

Create or update your mission profile.

grant-radar init \
  --name "Sunrise Health Clinic" \
  --mission "expanding primary healthcare access in rural communities" \
  --keywords "rural health,community clinic,FQHC,underserved" \
  --org-type nonprofit

Org types: nonprofit · university · government · tribal · small_business · individual · any

The profile is saved at ~/.grant-radar/profile.json. Pass --profile <path> to use a different location (useful for managing multiple profiles).

grant-radar scan

Search grants.gov and surface new matches.

# Default: print to terminal, only new opportunities
grant-radar scan

# Include previously seen opportunities
grant-radar scan --all

# Tune the match threshold (0–1, default 0.05)
grant-radar scan --threshold 0.1

# Send to Slack
grant-radar scan --slack $SLACK_WEBHOOK_URL

# Send JSON webhook
grant-radar scan --webhook https://n8n.example.com/webhook/grants

# Machine-readable output
grant-radar scan --json

grant-radar search

Ad-hoc search without a profile.

grant-radar search "rural broadband"
grant-radar search "maternal health equity" --rows 20 --json

grant-radar profile-show

Print the current profile and its extracted search terms.


Scheduling alerts

cron (daily at 8am)

0 8 * * * /usr/local/bin/grant-radar scan --slack $SLACK_WEBHOOK_URL

GitHub Actions (daily)

on:
  schedule:
    - cron: "0 8 * * *"
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - run: pip install grant-radar
      - run: grant-radar scan --slack ${{ secrets.SLACK_WEBHOOK_URL }}
        env:
          HOME: /root

Multiple profiles (multi-team)

grant-radar scan --profile ~/.grant-radar/health.json --store ~/.grant-radar/health-seen.json --slack $HEALTH_TEAM_WEBHOOK
grant-radar scan --profile ~/.grant-radar/env.json   --store ~/.grant-radar/env-seen.json   --slack $ENV_TEAM_WEBHOOK

How matching works

  1. The mission text and keywords are tokenized into search terms.
  2. Each term is searched independently against grants.gov (parallel requests).
  3. Results are deduplicated by opportunity ID.
  4. Each opportunity is scored by how many of your terms appear in its title and agency name.
  5. Results are ranked by score, filtered by threshold, and filtered to only new IDs (not in seen.json).

No LLM, no embeddings — fast, offline-capable, deterministic. If you want semantic matching, you can preprocess the mission with an LLM to expand keywords before running init.


Development

git clone https://github.com/stark256-spec/grant-radar
cd grant-radar
pip install -e ".[dev]"
pytest tests/ -v

Data source

grants.gov — the official U.S. federal grants portal. Free, public, no API key required.


License

MIT

About

Smart grant opportunity matching and alerting for nonprofits and research labs. Built on the free grants.gov API.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages