IRS API: Check charity status
Looks up an organization in the IRS Tax Exempt Organization Search by name or EIN. It reports whether donations are deductible, whether the organization was automatically revoked, and its recent Form 990 filings.
Unofficial. Not affiliated with or endorsed by IRS.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- City optional
city City, for example Washington.
Not set
- State optional
state State name or two-letter code, for example District of Columbia or DC.
Not set
- Max Results optional
max_results Maximum number of organizations, for example 10.
10 (default)
Whole number from 1 to 50.
- Organization, required
organization Organization name or EIN, for example American Red Cross or 53-0196605.
53-0196605
Input as JSON
{ "organization": "53-0196605"}Output
{ "organizations": [ { "ein": "53-0196605", "city": "Washington", "state": "District of Columbia", "country": "United States", "legal_name": "American National Red Cross", "irs_page_link": "https://apps.irs.gov/app/eos/details/" , "revocation_date": null, "deductibility_code": "PC", "reinstatement_date": null, "deductibility_status": "Donations are tax-deductible - public charity", "automatically_revoked": false, "doing_business_as_name": null, "most_recent_form_990_filings": [ { "link": "https://apps.irs.gov/pub/epostcard/cor/530196605_202506_990_2026072824433471.pdf" , "tax_year": 2025, "form_type": "Form 990" }, { "link": "https://apps.irs.gov/pub/epostcard/cor/530196605_202506_990T_2026050624154274.pdf" , "tax_year": 2025, "form_type": "Form 990-T" }, { "link": "https://apps.irs.gov/pub/epostcard/cor/530196605_202406_990_2025051223427881.pdf" , "tax_year": 2024, "form_type": "Form 990" } ] } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"irs.gov/check_charity_status","input":{"organization":"53-0196605"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "irs.gov/check_charity_status" , "input": { "organization": "53-0196605" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "irs.gov/check_charity_status" , "input": { "organization": "53-0196605" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run irs.gov/check_charity_status# with {"organization":"53-0196605"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "organization" ], "properties": { "city": { "type": "string", "description": "City, for example Washington." }, "state": { "type": "string", "description": "State name or two-letter code, for example District of Columbia or DC." }, "max_results": { "type": "integer", "default": 10, "maximum": 50, "minimum": 1, "description": "Maximum number of organizations, for example 10." }, "organization": { "type": "string", "description": "Organization name or EIN, for example American Red Cross or 53-0196605." } }}Output schema
{ "type": "object", "required": [ "organizations" ], "properties": { "organizations": { "type": "array", "items": { "type": "object", "properties": { "ein": { "type": "string" }, "city": { "type": [ "string", "null" ] }, "state": { "type": [ "string", "null" ] }, "country": { "type": [ "string", "null" ] }, "legal_name": { "type": "string" }, "irs_page_link": { "type": "string" }, "revocation_date": { "type": [ "string", "null" ] }, "deductibility_code": { "type": [ "string", "null" ] }, "reinstatement_date": { "type": [ "string", "null" ] }, "deductibility_status": { "type": "string" }, "automatically_revoked": { "type": "boolean" }, "doing_business_as_name": { "type": [ "string", "null" ] }, "most_recent_form_990_filings": { "type": "array", "items": { "type": "object", "properties": { "link": { "type": [ "string", "null" ] }, "tax_year": { "type": "integer" }, "form_type": { "type": "string" } } } } } } } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
irs.gov/check_charity_status- Returns
- legal name, EIN, location, deductibility status, revocation, recent Form 990 filings
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method irs.gov/check_charity_status with the inputs above.
Ask your agent
- Is the American Red Cross tax deductible for donations? Check its EIN 53-0196605 status.
- Has the Habitat for Humanity chapter in Washington, DC been automatically revoked by the IRS?
- Find recent Form 990 filings for Doctors Without Borders with a lookup on irs.gov.
- Look up the tax-exempt status of Food Bank of the Rockies in Denver, Colorado, and list up to 5 matches.
- Can I deduct my donation to Feeding America? Confirm its EIN and deductibility on the IRS search.
See more
All IRS methodsFinds current IRS forms, instructions and publications by number or purpose. Each result has its revision and posting dates, PDF links and a short explanation.
irs.gov/get_tax_formFinds U.S. nonprofits by organization name, optionally filtered by state and city, with the latest reported revenue and assets.
projects.propublica.org/search_nonprofitsLooks up a US nonprofit by name, EIN or Nonprofit Explorer link and returns its recent Form 990 filing years with revenue, expenses, assets, liabilities, top reported pay and PDF links.
projects.propublica.org/get_nonprofit_financialsFinds Australian businesses on ABN Lookup by name or ABN. Returns ABN status, GST registration, business and trading names, and location.
abr.business.gov.au/search_businessesChecks a name against the current UK Sanctions List and returns possible matches in the site's best-match order, with designation details. Results may include entries that only mention the name in their reasons, so check each entry before identifying anyone.
gov.uk/check_sanctionsChecks a person or organisation name against the current UN Security Council Consolidated List and returns ranked possible matches.
scsanctions.un.org/check_sanctionsChecks an EU VAT number in the European Commission's VIES service and returns whether it is valid, with the registered name and address when the country makes them available.
ec.europa.eu/validate_vat_numberFinds the best-matching Better Business Bureau profile for a business name and city/state or ZIP code, with its BBB rating, accreditation, customer reviews, complaint counts and alerts. BBB ratings are not customer review scores.
bbb.org/get_business_profile