Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
US Federal Grants Scraper icon

US Federal Grants Scraper

Scrape US federal grant opportunities from grants.gov: opportunity number, agency, eligibility, award ceiling and floor, deadlines and links.

53 runs on Apify $0.002 per opportunity ($2 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchTerms, opportunityStatus, maxItems (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.002 per opportunity = $2 per 1,000

You are charged forWhenPrice
Opportunity scrapedOne federal grant opportunity with its award ceiling, eligibility and dates. Searches that match nothing are never charged.$0.002

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.

Inputs

FieldWhat it doesType
searchTermsWords to search for. Each term is searched on its own and the rows are pooled, so "wildfire" and "drought" in one run gives you both. The search covers the opportunity title and its full description, so a term can match a grant whose title never mentions it. Up to 25 terms per run. Leave empty to get everything the filters below select.array
opportunityStatusWhich stage of the lifecycle to return. "Posted" is open for applications now. "Forecasted" is an agency saying money is coming, usually with estimated dates rather than real ones. "Closed" has passed its deadline but is still on the site, and "archived" is the long tail going back two decades. Leave empty and you get forecasted plus posted, which is everything you could still apply for.array
maxItemsTotal opportunities to return across every search term. The budget is split evenly between the terms, so five terms and 50 rows gives you ten of each. Hard ceiling 5,000. Keep it low while you are testing - you pay per row.integer
agenciesLimit results to one or more agencies, by code. A top-level code covers everything under it: "HHS" catches every Health and Human Services office, while "HHS-ACF-OHS" narrows it to the Office of Head Start. An office code matches only itself, so "HHS-ACF" leaves out "HHS-ACF-OHS". Other common ones are ED, DOE, NSF, USDA, DOI, DOT, EPA, HUD, DOL, NASA, SBA, VA, DOS and DHS. Case does not matter.array
eligibilityKeep only opportunities open to these applicant types. Pick several and a grant open to any one of them is kept. Note that a great many federal grants are coded "Unrestricted" or "Others" rather than naming your exact category, so a narrow pick here can hide grants you are in fact eligible for.array
fundingCategoriesKeep only opportunities filed under these categories. Agencies pick the category themselves when they post, so it is their label rather than a strict taxonomy - broad searching plus a keyword usually beats a narrow category pick.array
fundingInstrumentsThe kind of agreement on offer. A grant hands money over with reporting obligations; a cooperative agreement means the agency stays involved in the work.array
alnNumbersExact programme numbers such as 93.600 or 47.076. This is the tightest filter available - it follows a specific federal programme across every opportunity it has ever posted, which is what you want for tracking a grant you have had before.array
opportunityNumbersLook up specific opportunities by their published number, for example HHS-2026-ACF-OHS-HS-0001. Each one is fetched on its own, so a number that no longer exists returns an uncharged row saying so rather than a wrong match.array
postedWithinDaysOnly opportunities posted in the last N days. The service accepts a fixed set of windows, listed here. Useful for a daily or weekly schedule that should only pick up what is new.string
proxyUrlsLeave this empty unless you want the requests to go through proxy servers of your own. Add each one as http://user:pass@host:port.array

What you get

A structured dataset — each result includes fields like:

opportunityNumbertitleagencyNamedepartmentNameagencyCodeopportunityStatusfundingCategorieseligibleApplicantsawardCeilingUsdawardFloorUsdopenDatecloseDateurl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

US Federal Grants Scraper: open and upcoming grants.gov opportunities, no account needed

Give it keywords, or filters such as an agency code, an applicant type or an Assistance Listing number, and it searches the federal grant opportunities published on grants.gov. You get one row per opportunity with the number, title, agency, status, who may apply, the award ceiling and floor, the open and close dates and a link to the notice. Two things catch people out: these are grants you can still apply for, not awards already paid out, and roughly half of them publish no award ceiling at all.

InputKeywords, agency codes, applicant types, categories, Assistance Listing numbers or exact opportunity numbers
OutputOne row per grant opportunity
Ceiling5,000 opportunities and 25 search terms per run
Account neededNone
Price$2.00 per 1,000 opportunities, flat on every plan

🔍 What US Federal Grants Scraper does

Each search term runs as its own search over the title and the full description, so a grant whose title never mentions your word can still turn up. Your filters narrow every term the same way. Everything lands in one dataset, and an opportunity found by two terms is delivered once.

Forecasts come in when opportunityStatus includes forecasted, or when you leave it empty. A forecast is an agency saying money is coming. Its close date is the agency's guess, which is why every row carries closeDateIsEstimated.

Every row is checked against your filters before it is charged. One that comes back for the wrong agency, status, category or listing number is dropped, and a free row tells you how many went and why.

📥 What you give it

FieldIf you leave it outWhat it does
searchTermsno keyword, the filters decideWords to search for, up to 25. Each runs as its own search and the rows are pooled. Two words in one term are not a phrase: the form's own rural broadband also brings back rural grants that never mention broadband.
opportunityStatusforecasted and postedforecasted, posted, closed, archived. Add archived only if you want the long tail of about 73,000 older records.
maxItems25Total rows, 1 to 5,000, split evenly between the searches.
agenciesevery agencyAgency codes. HHS covers every Health and Human Services office, HHS-ACF-OHS only the Office of Head Start. An office code matches only itself, so HHS-ACF leaves out HHS-ACF-OHS.
eligibilityanyoneApplicant-type codes from the list on the Input tab. A grant open to any one of them is kept.
fundingCategoriesevery categoryThe category the agency filed it under, such as Health (HL) or Natural Resources (NR).
fundingInstrumentsevery kindGrant (G), cooperative agreement (CA), procurement contract (PC) or other (O).
alnNumbersanyAssistance Listing numbers, the old CFDA numbers, such as 93.600 for Head Start. Up to 30.
opportunityNumbersnoneExact published numbers such as HHS-2026-ACF-OHS-HS-0001, up to 25. Each one is looked up on its own.
postedWithinDaysany timeOnly opportunities posted in the last 3, 7, 14, 21, 28, 35, 42, 49 or 56 days. There are no other windows.
proxyUrlsnot usedYour own servers to send the traffic through, as http://user:pass@host:port. Leave it empty unless you need that.

A word on eligibility: a lot of grants are coded "Others" (25) or "Unrestricted" (99) rather than naming your applicant type. In one five-row run, three were coded "Others" and nothing else. So a narrow pick here can hide grants you qualify for.

{
  "searchTerms": ["wildfire", "watershed restoration"],
  "opportunityStatus": ["posted", "forecasted"],
  "eligibility": ["12", "25", "99"],
  "maxItems": 100
}

An input with nothing to search for, such as {} sent through the API, returns one free sample row so you can see the shape before you spend anything.

📤 What you get back

A real row from a real run, with the description cut short:

{
  "ok": true,
  "charged": true,
  "recordType": "opportunity",
  "opportunityId": "363804",
  "opportunityNumber": "RD-RBS-26-03-MPPEP",
  "title": "MPPEP Phase 3 Invasive Wild-Caught Catfish",
  "agencyName": "Rural Business-Cooperative Service ",
  "departmentName": "Department of Agriculture",
  "agencyCode": "USDA-RBCS",
  "opportunityStatus": "posted",
  "recordKind": "synopsis",
  "openDate": "2026-09-08",
  "closeDate": "2026-12-07",
  "closeDateIsEstimated": false,
  "archiveDate": "2027-01-06",
  "awardCeilingUsd": 2000000,
  "awardFloorUsd": 50000,
  "estimatedTotalFundingUsd": 6000000,
  "expectedAwardCount": 6,
  "costSharingRequired": true,
  "eligibleApplicants": [
    "City or township governments",
    "County governments",
    "Native American tribal organizations (other than Federally recognized tribal governments)",
    "Native American tribal governments (Federally recognized)",
    "Others (see text field entitled \"Additional Information on Eligibility\" for clarification)",
    "For profit organizations other than small businesses",
    "Nonprofits having a 501(c)(3) status with the IRS, other than institutions of higher education",
    "State governments",
    "Small businesses"
  ],
  "eligibilityCodes": ["02", "01", "11", "07", "25", "22", "12", "00", "23"],
  "fundingCategories": ["Agriculture"],
  "fundingCategoryCodes": ["AG"],
  "fundingInstruments": ["Grant"],
  "fundingInstrumentCodes": ["G"],
  "alnNumbers": ["10.381"],
  "description": "The Meat and Poultry Processing Expansion Program (MPPEP) provides grants to help eligible meat and poultry processors expand their capacity, which creates new, better and more processing options for meat and poultry producers. …",
  "url": "https://www.grants.gov/search-results-detail/363804",
  "lastUpdated": "2026-09-03",
  "detailFetched": true,
  "scrapedAt": "2026-09-30T02:37:45.963Z"
}
FieldWhat it is
opportunityNumberThe number the agency published, the one people quote. opportunityId is grants.gov's own key and builds the url.
agencyName, departmentName, agencyCodeThe office that posted it, as the agency typed it, and the cabinet department above it.
recordKindsynopsis for a real posting, forecast for money announced but not open yet.
closeDate, closeDateIsEstimatedThe deadline. On a forecast it is the agency's estimate and the flag is true.
awardCeilingUsd, awardFloorUsdThe largest and smallest single award, in dollars. null means the agency did not publish one, not that there is no limit.
estimatedTotalFundingUsd, expectedAwardCountThe whole pot and how many awards they plan to make. Often null for the same reason.
eligibleApplicants, eligibilityCodesWho may apply, spelled out, and the same list as the codes the input takes.
alnNumbersAssistance Listing numbers. Some opportunities carry more than one.
costSharingRequiredWhether the applicant has to put up matching money. null when the notice does not say.
descriptionThe agency's synopsis with the HTML taken out, cut at 8,000 characters.
detailFetchedAlways true on a row you receive. An opportunity whose full record could not be read is left out, see NO_RESULTS below.

🧾 Reading the output

Three kinds of row can share a dataset, and charged is the field that separates them.

RowHow to spot itCharged
An opportunitycharged: trueyes
The sample_sample: true, charged: falseno
A diagnostic_diagnostic: true, charged: false, an errorCodeno

The sample row also says recordType: "opportunity", so filter on charged == true, not on recordType.

CodeWhat it means
NO_RESULTSThe search ran and nothing matched. Also used when one opportunity's full record could not be read: that row names its number and link, and the opportunity is left out rather than delivered half empty.
BAD_INPUTRows came back that did not match your filters and were dropped, or the search was refused. Usually a code in the input that grants.gov does not know.
NETWORKThe search could not be completed because grants.gov did not answer properly.
TIME_BUDGETThe run ran out of time before one of your searches was made.

NO_RESULTS and NETWORK are the pair worth telling apart. The first means nothing is there. The second means nobody looked, and a re-run later is the answer.

▶️ How to run it

1. Open US Federal Grants Scraper and click Try for free. 2. Type your keywords into Search terms, one per line. The form arrives with rural broadband in it, so replace that. 3. Pick a Status. If you want to narrow it, use Agency codes, Who may apply or Assistance Listing (ALN/CFDA) numbers under Filters. 4. Set Maximum rows. Keep it small on a first run. 5. Click Start, then download the dataset as CSV, JSON or Excel.

💰 How much does it cost?

$2.00 per 1,000 opportunities, which is $0.002 a row, flat on every Apify plan. A 100-row run comes to about twenty cents.

You pay for opportunity rows and nothing else per row. The sample row and every diagnostic row are free, and so are rows dropped for not matching your filters and repeats inside one run. If you set a maximum charge on the run, it stops at that figure instead of going past it.

💡 What people use it for

  • A grant writer who wants a spreadsheet of what is open in their field this month, sorted by closeDate.
  • A nonprofit tracking one Assistance Listing number, because last year's programme usually comes back under a new opportunity number and the same ALN.
  • A consultant pulling everything open to 501(c)(3) nonprofits in one category before a client call.
  • Anyone watching forecasts so the proposal is half written before the notice goes live.

🚧 What it does not do

  • Opportunities, not awards. Who received a grant, and how much, is a different dataset. The table below points to it.
  • Federal only. State, county, city and foundation grants are not on grants.gov, so they are not here.
  • No contact details. The source records name a programme officer with a phone number and an email. None of that is returned. Open the url if you need to reach them.
  • No attachments. The application package and its PDFs stay on the notice. You get the record and the link.
  • Award amounts are often blank. In a sample of 40 posted opportunities, 21 published a ceiling and 11 a floor. That is the agencies, not the scraper.
  • Fixed date windows. postedWithinDays takes only the nine windows listed above, never an arbitrary date range.
  • No judgement. It does not score your chances or match you to grants. It returns what the agency published, as current as grants.gov has it.

🧭 Which US government data scraper do you need?

If you wantUse
Federal grants you can still apply forThis one
Federal money already paid out, and to whomUSASpending Federal Awards Scraper
Open bids from states, counties, cities and school districtsUS Local Bid Portals Scraper
Tender notices scored against what your company doesRFP & Tender Monitor

❓ Questions people ask

Do I need a grants.gov account or an API key? No. There is nothing to sign up for and nothing to paste.

Can I get the list of who won a grant? Not from this one. Awards are a different dataset with almost no columns in common, and the USASpending scraper in the table above covers them.

Why is the award ceiling empty on so many rows? The agency did not publish one. null means not published. It does not mean unlimited.

What is an ALN, and why filter on it? An Assistance Listing number, the old CFDA number, names the federal programme rather than one notice. If you have had a grant before, its ALN finds this year's round even when the opportunity number changed.

Can I run it on a schedule? Yes. A daily schedule with postedWithinDays set to 3 picks up what is new, and opportunityNumber is a stable key for comparing against yesterday.

What if my search matches nothing? You get one free NO_RESULTS row and the run still finishes as succeeded.

🆘 If something breaks

Open the Issues tab on the actor page and send the run ID with the input you used. The errorCode on a diagnostic row usually names the reason already.