# Fluxx Open Exchange > Free, read-only public grant data for AI assistants and agents: 1.8M US nonprofits and funders, 30.1M grants made, 5M IRS 990 financial records, and open federal + state funding opportunities, with the opportunities published on the CommonGrants open standard. No signup, no API key. ## Connect - MCP endpoint (Streamable HTTP, no auth): https://open.fluxx.io/mcp - CommonGrants Publisher API base URL: https://open.fluxx.io (GET /common-grants/opportunities, GET /common-grants/opportunities/{id}, POST /common-grants/opportunities/search) - OpenAPI: https://open.fluxx.io/openapi.json - Discovery manifest: https://open.fluxx.io/.well-known/mcp.json ## Tools list_grant_sources, search_opportunities, get_opportunity, search_organizations, get_organization, get_organization_financials, get_funder_profile, search_awards, check_nonprofit_status, find_similar_organizations, get_organization_people, get_organization_programs, get_organization_stats, list_ntee_codes, list_jurisdictions, mission, get_involved, share_this, report_data_issue ## Numbers and what they mean - Live counts per register (record_count, open_now, forecasted, last_refreshed_at, counts_basis, counted_at): https://open.fluxx.io/sources - Definitions, exact rules, exclusions and caveats for every figure: https://open.fluxx.io/definitions.json (markdown: https://open.fluxx.io/definitions) - Provenance and legal basis of every source (publisher, terms, attribution, review status): https://open.fluxx.io/sources/register (JSON: https://open.fluxx.io/sources/register.json); every /sources row carries the same provenance block - Everything on one page for agents: https://open.fluxx.io/llms-full.txt ## Rules - Fair use: 60/min, 5000/day per client; page size ≤ 25. https://open.fluxx.io/fair-use - Records are as filed; never an eligibility or tax-status determination. Cite source and asOf. - Privacy / transparency note: https://open.fluxx.io/privacy ## Build - Service version 0.2.0, commit d8dd1543a3dd827119ba858f09028d647e6c5bdb, built 2026-10-27T13:40:35.489Z. Live status: https://open.fluxx.io/version ## Definitions (v2026-10-02) ### Active organizations US organizations in the IRS-keyed register that currently appear in IRS Exempt Organizations extracts (Business Master File, Publication 78, auto-revocation list) or a filed Form 990/990-EZ/990-PF, and have not been retired from the codex. - Rule: `entities WHERE is_active = true AND register_id = 'us_ein' AND entity_type_id <> 'us_accounting_firm' — one row per EIN.` - Excludes: Retired or merged EINs; entities keyed by any register other than the IRS EIN; accounting firms flagged as such. - Caveat: "Active" means present in the latest IRS extract, not "in good standing" — use check_nonprofit_status for standing. ### Funders Active organizations (as above) that have made at least one grant on record — a 990 Schedule I or 990-PF Part XV grant, a Federal Audit Clearinghouse pass-through, or a state award-register entry — or are private foundations (990-PF filers). - Rule: `entities WHERE is_active = true AND register_id = 'us_ein' AND entity_type_id <> 'us_accounting_firm' AND is_funder = true.` - Excludes: Government agencies that publish opportunities but file no 990 (federal and state funders appear as opportunity sources, not in this count). - Caveat: A funder with a single historic grant counts the same as a large foundation; use get_funder_profile for giving size. ### Grants made, funder to grantee Individual grant transactions with an identified funder and recipient, as filed: IRS Form 990 Schedule I and 990-PF Part XV grant lines, Federal Audit Clearinghouse (FAC) federal-award lines reported by auditees, and state award registers. - Rule: `awards WHERE is_active = true, summed across every register_id (us_irs_teo, us_fac, us_state_*_awards).` - Excludes: Superseded duplicates from amended filings; awards whose source register was withdrawn. - Caveat: FAC lines are federal expenditures reported by the recipient — the "funder" is the federal program, and one grant can appear once per audit year. - Caveat: Award dates from 990 filings are the tax-year end unless the filer stated a date (is_estimated_date = true on the record). ### 990 financial records One record per organization per fiscal year extracted from an IRS Form 990, 990-EZ or 990-PF (revenue, expenses, assets, liabilities, program-service breakdowns as filed). - Rule: `financials WHERE is_active = true.` - Excludes: 990-N e-Postcards (they carry no financial data); amended filings replace, not add. - Caveat: IRS XML extraction runs on a long cycle; the newest filing year is typically 12–20 months behind today. ### Opportunities open now Funding notices from the 13 opportunity registers (Grants.gov, eleven state grant portals, community-foundation grant pages) that are current in their source register, are not forecasts, and whose application close date is today or later — or is not stated by the source. - Rule: `listings WHERE is_active = true AND is_virtual = false AND listing_source IN ('grants_gov', 'us_state_ca', 'us_state_co', 'us_state_ct', 'us_state_fl', 'us_state_ma', 'us_state_md', 'us_state_mo', 'us_state_nc', 'us_state_oh', 'us_state_pa', 'us_state_tx', 'community_foundation') AND listing_is_forecast = false AND (listing_application_close_date >= current_date OR listing_application_close_date IS NULL). current_date is UTC.` - Excludes: Forecasted notices (reported separately as "forecasted"); notices Grants.gov has closed or archived; state notices no longer on the portal; virtual listings and IRS 990-PF application-information rows (see the glossary). - Caveat: A notice with no stated close date is counted as open — community foundations and some state portals publish rolling or unstated deadlines. The sources table shows how many are dated. - Caveat: A notice closing today is counted as open until midnight UTC (Grants.gov deadlines are typically 5 pm Eastern). - Caveat: Grants.gov posted + forecasted totals are checked against Grants.gov's own search counts. ### Forecasted opportunities Grants.gov forecast records — agencies' advance notice of a funding opportunity that has not yet been posted. - Rule: `listings WHERE is_active = true AND is_virtual = false AND listing_source IN (opportunity registers) AND listing_is_forecast = true.` - Excludes: Nothing else is forecast: state registers and community foundations publish no forecasts. ### Glossary - **is_active** — The record is present in the newest extract of its source register and has not been retired by the codex. Every published count applies this filter; retired rows remain queryable by id for provenance. - **register / source** — The public register a record was filed in (Grants.gov, a state portal, IRS Exempt Organizations, FAC, a community foundation site). Every record carries source, sourceUrl and asOf. - **asOf** — The date the source register published the version of the record we hold — not the date we fetched it. - **last_refreshed_at** — Observed, not designed: the newest updated_at in our copy of a register, i.e. the last time any record from that register changed here. If it is older than the designed cadence, the pipeline is behind and we say so. - **counted_at** — When the exact count over the million-row tables was last computed, by a live background scan every 6 hours (basis "live"). Until the first scan after a restart completes, those counts are a database planner estimate rounded to two significant figures (basis "estimate"), flagged as such. - **estimate** — A PostgreSQL planner row estimate (pg_class.reltuples). It counts inactive rows too and typically runs 25–35% above the exact active count, so it is shown as ~x,x00,000 and never to full precision. - **virtual listing** — A synthetic "opportunity" derived from a funder's 990 giving pattern (listing_source = gs_virtual, ~212,000 rows) used inside Grantseeker Pro for fit-matching. It is not a funding notice and is excluded from every opportunity count here. - **990-PF application information** — Text a private foundation prints on its 990-PF about how to apply (listing_source = irs_990pf, ~38,000 rows). Served on get_funder_profile as "how to apply"; never counted as an open opportunity. - **open** — See "Opportunities open now": not a forecast, current in its register, close date today-or-later or unstated. - **closed** — Not a forecast and close date before today (UTC). Grants.gov "closed" and "archived" both map here. - **Funder → grantee graph** — The set of award records joined to both a funder EIN and a recipient EIN. "Grants made" counts award records, not unique funder-recipient pairs. Machine-readable: https://open.fluxx.io/definitions.json · live counts: https://open.fluxx.io/sources ## CommonGrants routes - GET https://open.fluxx.io/common-grants/opportunities?page=1&pageSize=25 - GET https://open.fluxx.io/common-grants/opportunities/{id} - POST https://open.fluxx.io/common-grants/opportunities/search {"search":"broadband","filters":{"status":{"operator":"in","value":["open"]}}} - GET https://open.fluxx.io/organizations?query=… · GET https://open.fluxx.io/organizations/{ein or id} · GET https://open.fluxx.io/organizations/{ein}/financials # Fair use — Fluxx Open Exchange Free, no signup, no key. To keep it that way for everyone: - **60 requests / minute** and **5000 / day** per client (the RateLimit header reports whichever window has fewer requests left and RateLimit-Policy lists both; 429 carries Retry-After). - **12 / minute** for the expensive tools (get_funder_profile, find_similar_organizations). - Fluxx first-party servers carry a client key (`X-Exchange-Client-Key`) and are counted in their own bucket (600/minute, 50000/day, 120/minute expensive) instead of by address. The key is not authentication: every route stays public. - **Page size ≤ 25**, **≤ 1000 records per query chain**. There is no bulk export; narrow the question instead. - Every organization and award search needs a selective predicate. An award search by keyword alone (no funder or recipient EIN) may match at most **250,000 awards**; a broader keyword is refused with what to add. If cost or abuse ever exceeds the envelope, the ladder is: tighten limits → free self-serve key → shed the most expensive tools. Charging users is not on the ladder. Full policy: https://open.fluxx.io/fair-use # Transparency note — what the Fluxx Open Exchange collects There are no accounts, no cookies, no API keys and no per-user state, so there is no identity here to harvest — this is an architectural fact, not a policy. **We log every request and every tool call, including the values you send.** Method, route, HTTP status, latency; the MCP tool, prompt or resource name; the arguments of the call — the EIN, the organization name, the opportunity id, the search text — with long strings truncated; the number of records returned, whether the call was answered and, for a call that failed, the error code it returned; the client software name and version an MCP client declares when it connects; interactions with the landing page (which snippet was copied, which link was followed); and a random per-request id. We log the values because the only way to improve a public register service is to know which records people ask for and which questions come back empty — and key names alone cannot tell us that. **Treat a query as public.** Arguments are recorded, so do not put personal information about yourself or anyone else into one. Every question this service answers is a question about a public register. **Requests are grouped by an opaque token, not by you.** So that a sequence of calls can be read as one conversation, each request carries a token derived from the caller by a keyed hash. The key is random, lives only in the memory of the server process, is never written anywhere, and is replaced on a timer (60 minutes). The token therefore cannot be turned back into an address — by us or by anyone who obtains the logs — and cannot be joined across time windows or across server instances. It says "these calls arrived together" and nothing else. **Fluxx's own clients are labelled.** A request from one of Fluxx's own servers or staff tools carries the name of that client: the id of the client key a Fluxx server sends in a header, or a label for a connection made through a connector URL Fluxx gives its own staff (Fluxx's claude.ai connector, for example). That is how Fluxx counts its own use apart from everyone else's. Only the name is recorded, never a key. The connector URL holds no key, and a label unlocks nothing. Requests from anyone else carry no name. **The application does not retain:** client IP addresses (used only in memory for the fair-use limiter and discarded), user agents, referrers, cookies, or anything that names the person or organization asking. **Google Cloud's request logs do record IPs.** The service runs on Cloud Run behind Google Cloud's load balancer and Cloud Armor. The load balancer and Cloud Run each keep a standard request log with the client IP, the full request URL and the user agent, so a lookup such as /organizations/{ein} is logged with the address that made it. Fluxx uses these logs only to operate the service and act on abuse. **Where it goes and for how long.** These request logs and the application's events are kept in Google Cloud Logging for 12 months. Both are also forwarded to Datadog, our monitoring provider, which processes them on Fluxx's behalf. Application events are exported to a private Fluxx BigQuery dataset, readable only by Fluxx staff who operate the service, and deleted automatically after 400 days. The events are used to run and improve the Exchange. None of these logs is sold, and the events are never used to profile a person — there is no person in them to profile. **Data-issue reports** you submit through report_data_issue are recorded for review with the text you provide, and logged like any other call. Do not include personal data in them. **The data served** is drawn from public registers (IRS, Grants.gov, state grant portals, the Federal Audit Clearinghouse, community foundation websites). People appear only as officers and directors named on public filings — name and title, never compensation or contact details. The publisher, legal basis, terms and review status of every source are published at https://open.fluxx.io/sources/register. The Exchange is offered as-is, with no support channel; report a wrong record with report_data_issue. This note is versioned with the code at https://open.fluxx.io/version and is intended to match it exactly.