Check the setup
- Python 3.10 or newer
- A notebook environment such as Jupyter or Google Colab
- An internet connection
Federal grant opportunity postings for building funding inboxes and agency opportunity monitors.
From source to product signal
Grants.gov search2 returns opportunity summaries without authentication. Start with one keyword and posted status. A posting is not an award, and eligibility, close dates, and attachments must be read on the opportunity itself.
Install the packages, then run the notebook cell.
python -m pip install pandas requests
import pandas as pd
import requests
response = requests.post(
"https://api.grants.gov/v1/api/search2",
json={
"keyword": "climate",
"oppStatuses": "posted",
"rows": 20,
"startRecordNum": 0,
},
timeout=30,
)
response.raise_for_status()
payload = response.json()
opportunities = pd.DataFrame(payload.get("data", {}).get("oppHits", payload.get("oppHits", [])))
opportunities["retrieved_at_utc"] = pd.Timestamp.now(tz="UTC")
print(opportunities.head())Test a useful signal
Test whether search2 can power a bounded federal-funding inbox.
Grants.gov is a government source. Last verified 2026-08-18. Temporal coverage: posted, forecasted, and closed federal opportunities.