GrantRadar
Turn any grant announcement, RFP, or funding notice into clean, structured JSON — from a URL, a PDF, or raw pasted text.
GrantRadar reads government grant listings, agency funding notices, and RFP documents and extracts the fields that actually matter: funder, award range, deadlines, eligibility, opportunity number, and contact info. Point it at a grants.gov or agency page, a direct PDF link, or paste the text yourself. Extraction is powered by a DeepSeek LLM and results are normalized into a consistent schema with ISO dates and integer dollar amounts.
Endpoints
| Endpoint | What it returns |
|---|---|
POST /extract |
A structured grant record extracted from a url, pdf_url, or raw text. Wraps the result as { "grant": {...}, "cached": <bool> }. The grant object includes: title, agency, program, opportunity_number, funding_type (one of grant, cooperative_agreement, contract, fellowship, prize, loan, other), award_floor, award_ceiling (integer dollars), eligible_applicants (array), cost_share_required (bool), key_dates (posted, application_due, award_notification as ISO dates), categories (array of topic tags), application_url, contact (name, email, phone), summary, and source_url. |
GET /health |
Liveness check — returns { "status": "ok" }. |
Request body for /extract (provide at least one of):
url— a web page to fetch and parse (grants.gov, beta.sam.gov, agency site, etc.)pdf_url— a direct link to a PDF announcementtext— raw grant announcement text you already have
Why this API
- One schema for everything. Whether the source is HTML, a PDF, or pasted text, you get the same normalized
GrantRecord— dates asYYYY-MM-DD, money as plain integers, no$or commas to clean up. - Built for messy government documents. The extractor is specifically tuned to recognize opportunity-number formats (NOFO, FOA, CFDA, solicitation, announcement numbers like
DE-FOA-0003456orHHS-2025-ACF-OHSEPR-NR-0124) and to surface the real application URL, even from beta.sam.gov and grants.gov package pages. - Three input modes, zero scraping infrastructure on your side. GrantRadar fetches and cleans the page (stripping nav/scripts/boilerplate) or extracts PDF text for you via PyMuPDF — you just pass a link.
- Cached by request. Identical requests are served from cache (keyed by SHA-256 of the input), so repeat lookups are fast and don't re-bill the LLM.
- LLM-normalized, not regex-fragile. Eligibility, categories, and funding type are inferred into consistent tags rather than copied verbatim.
Typical use cases
- Build a grants aggregator or newsletter that ingests agency listing pages and outputs uniform records.
- Auto-populate a CRM or tracking sheet with deadlines, award ceilings, and contacts pulled from RFP PDFs.
- Screen inbound funding notices for eligibility (
eligible_applicants,cost_share_required) before a human reviews them. - Normalize a backlog of saved grant pages or PDFs into a searchable, structured dataset.
- Power a Slack/email bot that turns a pasted funding announcement into a clean summary card.
Good to know
- At least one input is required. A request with none of
url,text, orpdf_urlreturns422. Empty fetched content also returns422. - All grant fields are nullable. Any field the document doesn't contain (or that can't be inferred) comes back as
null;eligible_applicantsandcategoriesdefault to[]andkey_dates/contactto objects of nulls. Treat every field as optional. - Caching is 24 hours by default. Responses are cached per unique request payload (TTL 86400s); a cache hit sets
"cached": true. If a page updates within that window you may receive the prior extraction. - Fetched content is truncated. Pages and PDFs are capped at ~40,000 characters before extraction, so very long documents are processed only up to that limit.
- Fetch and extraction failures surface as
502. A URL that can't be retrieved, a PDF that won't parse, or an LLM/validation error returns502with adetailmessage. - Extraction quality depends on the source. Output is LLM-inferred from whatever text the document provides; values like
funding_type,categories, and inferred dollar amounts should be reviewed for high-stakes decisions. This is an extraction tool, not an official system of record.