api.govgreed.com / v1

GovGreed API Documentation

REST API and MCP server for the integrated US civic accountability dataset — 218M FEC contributions, 190K STOCK Act trades, 61K bills, 159 indexed tables joined into one queryable graph. Free tier 250 calls/day. Self-serve. No sales calls.

Building an AI agent or MCP integration? Start with GET /atlas to discover every queryable entity, then chain into the entity-specific endpoints. The /openapi spec is also live for codegen.

Closed beta. The API is live but key issuance is allowlist-gated while we validate the surface. Email team@mmamodel.ai with your use case and we'll add you. Existing keys are unaffected.

Who this is for

What's in scope

Donors

FEC individual contributions ≥ $200, 5 cycles. Fuzzy search + per-donor profiles.

Employers

FEC employer aggregates — find every donor at a firm.

Politicians

538 sitting members of Congress + their donors.

Bills

Full intelligence: stage, sponsor, pass-likelihood model, affected tickers, congressional + insider trades.

Companies

Public-ticker political exposure: lobbying, donations, contracts, insider signal.

Atlas

The full data catalog — 159 tables, what's in each, what RPCs read them.

Quickstart

1. Get a key

While in closed beta, sign in to govgreed.com with the email we allowlisted, then visit /internal/api-dashboard and click "Issue new key". The plaintext key is shown once — copy it immediately.

2. Hit a public endpoint (no key needed)

curl https://www.govgreed.com/api/v1/status

Should return a JSON envelope with data.service: "govgreed-api".

3. Hit your first authed endpoint

KEY=gg_pub_yourkeyhere
curl -H "Authorization: Bearer $KEY" \
  "https://www.govgreed.com/api/v1/donors/search?q=mercer&limit=5"

4. Inspect the rate-limit headers

Every authed response includes:

X-RateLimit-Limit:     250
X-RateLimit-Remaining: 2487
X-RateLimit-Reset:     1746230400        # unix seconds until midnight UTC
X-Tier:                free

Authentication

Send your API key on every authed request via the Authorization header (Bearer token) or the X-API-Key header. The Authorization form is canonical.

Authorization: Bearer gg_pub_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# or
X-API-Key: gg_pub_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Key format

Revoking a key

Hit "Revoke" on the dashboard, or call revoke_api_key from a Supabase-authenticated session. Revoked keys return 403 KEY_REVOKED immediately.

Rate limits

Two layers, both enforced at the gateway.

LayerFreePro ($49 $24.50/mo for founding members — locked forever)Behavior on excess
Burst5 req/sec5 req/sec429 BURST_LIMIT_EXCEEDED + Retry-After: 1
Daily250 calls/day2,500 calls/day429 DAILY_QUOTA_EXCEEDED, resets 00:00 UTC
Keys per account5 active20 active422 on issue attempt

Need more than 2,500/day? Email team@mmamodel.ai — we negotiate a commercial license per use case rather than maintain a self-serve enterprise tier.

Response envelope

All successful responses share this shape:

{
  "data": [...] | {...} | scalar,
  "meta": {
    "version":    "v1",
    "request_id": "req_abc123def4",
    "count":      25,
    "tier":       "free",
    "quota": {
      "limit":     250,
      "remaining": 237,
      "reset_at":  "2026-05-03T00:00:00.000Z"
    }
  }
}

The shape of data depends on the endpoint — usually an array for searches, an object for profiles. Array endpoints set meta.count to the array length.

Errors

Errors are RFC 7807 problem+json:

{
  "type":       "https://www.govgreed.com/docs/errors/daily-quota-exceeded",
  "title":      "Daily quota exceeded",
  "status":     429,
  "detail":     "Tier 'free' is capped at 250 calls/day per key. Resets at 00:00 UTC.",
  "instance":   "/api/v1/donors/search",
  "code":       "DAILY_QUOTA_EXCEEDED",
  "request_id": "req_abc123def4"
}

Common codes

CodeHTTPMeaning
MISSING_API_KEY401No Authorization or X-API-Key header.
INVALID_API_KEY_FORMAT401Key doesn't match gg_pub_[hex]{32+}.
INVALID_API_KEY401Hash not found.
KEY_REVOKED403Key was revoked.
BURST_LIMIT_EXCEEDED429>5 req/sec on this key.
DAILY_QUOTA_EXCEEDED429Daily cap hit. Retry-After: 3600.
BAD_REQUEST400Missing/invalid query params.
NOT_FOUND404Resource doesn't exist (or unknown route).
INTERNAL_ERROR500Backend RPC failed. request_id for support.

Endpoints

GET/api/v1/status
Health check. Returns service name, version, docs link.
Public
curl https://www.govgreed.com/api/v1/status
GET/api/v1/atlas
AI agents: start here. Full data catalog — every queryable table with row count, status, source, RPCs and pages that consume it. Use this to discover what's available before composing complex investigations. Hit /atlas/{table} for one entity's details.
API key
curl -H "Authorization: Bearer $KEY" https://www.govgreed.com/api/v1/atlas
GET/api/v1/donors/{name}/profile
Full profile for one donor: lifetime totals, top recipients, year breakdown, recent gifts.
API key

{name} must be the URL-encoded name_display from search_donors — usually LASTNAME%2C%20FIRSTNAME.

GET/api/v1/employers/{name}/profile
Full firm profile: top donors, top recipient committees, cycle breakdown.
API key
GET/api/v1/politicians/{bioguide_id}
Identity for a sitting senator or representative.
API key

{bioguide_id} = one uppercase letter + 6 digits (e.g. P000197 for Pelosi).

GET/api/v1/politicians/{bioguide_id}/donors
Donors who funded a specific politician. Optional fuzzy filter on donor name.
API key
ParamTypeNotes
qstringOptional name filter.
limitintDefault 25, max 100.
GET/api/v1/politicians/{bioguide_id}/profile
45+ field LLM iron-triangle dossier: trader_type, top donors, committee advantage sectors, primary tickers, sector concentration, predicted_corruption_risk, red/green flags, legislative priorities.
API key
curl -H "Authorization: Bearer $KEY" \
  https://www.govgreed.com/api/v1/politicians/P000197/profile
GET/api/v1/politicians/{bioguide_id}/conflict-score
Point lookup against the pre-computed conflict_score table (all 538 members rebuilt nightly). Returns score 0–100, top traded sector, trade count, and component breakdown.
API key
GET/api/v1/politicians/{bioguide_id}/committees
Active committee + subcommittee assignments with role (Chair / Ranking / Member) and parent-committee linkage. The "where do they get inside info" answer.
API key
GET/api/v1/bills/{bill_number}
Full bill intelligence baseball card: stage, sponsor, pass-likelihood, affected tickers, congressional + insider trades, upcoming meetings.
API key

{bill_number} is the dotted form: HR.4521, S.5, HJRES.7.

curl -H "Authorization: Bearer $KEY" \
  https://www.govgreed.com/api/v1/bills/HR.4420
GET/api/v1/bills/{bill_number}/pass-likelihood
Just the deterministic 0-100 pass-probability. Faster than the full bill endpoint.
API key
ParamTypeNotes
congressintOptional (117/118/119). Defaults to most recent.
GET/api/v1/bills/{bill_number}/carveouts
LLM-extracted line-item earmarks / pork from the bill text. Each row: section, recipient, dollar amount, beneficiary tickers, narrative reasoning. Empty array means no carveouts found (correct for procedural / non-spending bills).
API key
GET/api/v1/bills/{bill_number}/timeline
Unified event stream for a bill: state transitions, congressional trades, Form 4 corporate insider trades, committee markups — all on one timeline ordered by date.
API key
ParamTypeNotes
congressintOptional. Defaults to most recent.
max_tradesintCap on trade events. Default 200.
min_impact_ratiofloat0–1. Filter trades by ticker impact ratio. Default 0.02.
GET/api/v1/companies/{ticker}
Public-ticker metadata: name, sector, exchange, market cap, SEC CIK.
API key
GET/api/v1/companies/{ticker}/political-influence
Universal 0-100 influence score: lobbying spend + PAC + employee donations + contracts + executive payments. Returns top lobbyists and committee matches.
API key
GET/api/v1/companies/{ticker}/insider-signal
Form 4 insider activity. Returns open-market buys (score 0–100, signal_tier, cluster detection, top buys) AND executive comp (award_count, award_total_value, exercise_count, exercise_total_value, recent_awards). Defense primes (LMT/RTX/NOC/GD/BA) typically have $0 open-market buys but millions in stock awards — both classes surfaced. Pass days=180 for full annual-cycle awards view.
API key
ParamTypeNotes
daysintLookback window. Default 90, min 7, max 365.
GET/api/v1/bills/{bill_number}/votes
Roll call votes on a bill: each roll call with chamber, date, question, result, tally (yea/nay/present/not_voting), and per-member positions ordered by party then name.
API key
ParamTypeNotes
congressint117/118/119. Default 119.
GET/api/v1/companies/{ticker}/carveouts
Bill carveouts (line-item earmarks) targeting one ticker, deduplicated server-side. Highest-confidence LLM extraction wins per (bill_number, purpose, recipient). duplicate_count exposes how many raw extractions agreed. Example: LMT returns ~$9B canonical carveouts (F-35 $4.3B, Sikorsky $3.6B, UH-60 $630M, Apache $504M).
API key
GET/api/v1/companies/{ticker}/llm-analysis
Iron-triangle profile per ticker: government_dependence_score (0–100), political_signal_strength, congressional owners with positions, top lobbyists, affected bills, insider activity summary, executive summary. Built on Grok 4.20.
API key
curl -H "Authorization: Bearer $KEY" \
  https://www.govgreed.com/api/v1/companies/LMT/llm-analysis
GET/api/v1/signals/top
Flagship signal product. Top-ranked composite trade signals from the 7-layer fusion engine (politician quality + herd + bill correlation + technical + sector + contribution + lobbying). A+ tier has 72.7% backtested win rate.
API key
ParamTypeNotes
tierstringMin tier: S, A+, A, B, C, D, F. Default B.
limitintDefault 25, max 100.
freshboolOnly freshness-flagged. Default true.
GET/api/v1/herd-signals
3+ politicians converging on the same ticker within a tight window. Returns ticker, politician_count, herd_score, herd_tier, net_direction, committee_alignment_pct.
API key
ParamTypeNotes
tierstringOptional minimum herd_tier filter.
daysintLookback window. Default 90, max 365.
limitintDefault 25, max 100.
GET/api/v1/predictions/top
Top active forward-looking trade predictions from 4 prediction engines (committee markup / pattern / signal-bridge / bill-correlation). ~819 active predictions across ~76 politicians.
API key
ParamTypeNotes
tierstringMin tier. Default A.
statusstringACTIVE / DARK_WINDOW / CONFIRMED / MISSED / EXPIRED. Default ACTIVE.
limitintDefault 25, max 100.
GET/api/v1/whale-opportunities
Institutional alpha screen. EV-ranked bills (pass% × impact_ratio × insider_tier_multiplier). Triple-confirmation: bills passing + material market impact + corporate insiders loading up.
API key
ParamTypeNotes
congressintDefault 119.
min_pass_pctint0-100. Default 40.
min_impact_ratiofloat0-1. Default 0.05.
limitintDefault 25, max 100.
GET/api/v1/sectors/{sector}/positioning
Congressional buy/sell flow per sector over N days. Returns summary stats + top 10 politicians by volume + top 10 tickers by trade count.
API key

Sector match is case-insensitive against companies.sector (Technology, Healthcare, Energy, Financial Services, etc).

ParamTypeNotes
daysintLookback. Default 30, max 365.
GET/api/v1/nominations/{congress}/{number}
One Senate nomination by composite key.
API key
GET/api/v1/nonprofits/{ein}
Full Form 990 profile per nonprofit. EIN with or without dash (52-1693387 or 521693387).
API key
GET/api/v1/government-contracts
Federal contracts (USASpending). 39K ticker-mapped. Filter by ticker, agency, or minimum amount.
API key
ParamTypeNotes
tickerstringStock ticker.
agencystringAwarding agency fuzzy match.
min_amountnumberMinimum award_amount in USD.
limitintDefault 50, max 200.
GET/api/v1/companies/{ticker}/contracts
All federal contracts for one ticker. Same RPC as /government-contracts but ticker-scoped.
API key
GET/api/v1/government-equity-stakes
Federal equity / loan / grant deals INTO public companies — Trump-era 'government as VC' asset class. Includes price reaction at announcement (t+1, t+30, return_30d_pct).
API key
GET/api/v1/oge/officials
Trump cabinet + senior White House staff with OGE financial disclosures. 32 active officials.
API key
GET/api/v1/oge/officials/{department_slug}
OGE financial-disclosure profile per cabinet official: identity + filings + top 25 holdings + conflict flags (critical mineral / defense / pharma / crypto exposure).
API key
GET/api/v1/companies/{ticker}/forecast
LLM 30-day politician trade forecasts filtered by ticker. Includes catalyst bill, expected position size, historical precedent, concurrent corroborating signals. Coverage: 13 tickers (defense + select tech) at launch.
API key
GET/api/v1/macro/fred
FRED macro time series (17 series 2012-now: DFF, GS10, CPI, GDP, VIX, etc).
API key
ParamTypeNotes
seriesstringComma-separated series IDs.
startdateISO date.
GET/api/v1/macro/eia
EIA petroleum / energy time series (6 series, weekly cadence).
API key
GET/api/v1/markets/kalshi
Live Kalshi prediction markets with our BPI overlay (bpi_score, edge_pp, signal_side for bill-linked markets).
API key
GET/api/v1/vessels/chokepoints
AIS vessel events at maritime chokepoints (Hormuz tankers, Malacca, etc). Oil-supply risk signal.
API key
GET/api/v1/districts/{state}/{district}/demographics
Census ACS 5-year demographics for one congressional district. e.g. /districts/CA/11/demographics for Pelosi's CA-11.
API key
GET/api/v1/me
Your key's metadata: tier, daily_quota, burst_limit, scopes, key prefix.
API key
GET/api/v1/me/usage
Daily usage timeline for the last N days.
API key
ParamTypeNotes
daysintDefault 30, max 90.

MCP Server

The same API ships as a local Model Context Protocol server, so AI agents (Claude Desktop, Cline, Cursor) can investigate political accountability with one tool installation. Distributed via Node + STDIO transport for v1 — hosted SSE later.

Install

git clone https://github.com/mmamodelai/govgreed-mcp ~/.local/govgreed-mcp
cd ~/.local/govgreed-mcp && npm install

(For the closed beta, the same code lives at ~/.claude/mcp-servers/govgreed/ if you got it directly from us.)

Wire it into Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "govgreed": {
      "command": "node",
      "args": ["/absolute/path/to/govgreed-mcp/index.js"],
      "env": {
        "GOVGREED_API_KEY": "gg_pub_..."
      }
    }
  }
}

Restart Claude Desktop. You should see a govgreed tool icon in the chat composer.

Tools exposed

43 tools, 1-to-1 with the REST endpoints above:

Example prompt

"Use GovGreed to find the top 10 donors named Mercer, then pick whoever has the largest lifetime contributions and show me their full profile."

Claude will call search_donors, then get_donor_profile on the best match — without you orchestrating.

SDKs

Official SDKs are not shipped yet. The API is small enough that a tiny wrapper is trivial. Reference implementations:

Python (~30 lines)

import os, urllib.parse, urllib.request, json

BASE = "https://www.govgreed.com/api/v1"
KEY  = os.environ["GOVGREED_API_KEY"]

def gg(path, **params):
    url = f"{BASE}{path}"
    if params:
        url += "?" + urllib.parse.urlencode({k:v for k,v in params.items() if v is not None})
    req = urllib.request.Request(url, headers={"Authorization": f"Bearer {KEY}"})
    with urllib.request.urlopen(req) as r:
        return json.loads(r.read())["data"]

print(gg("/donors/search", q="mercer", limit=5))
print(gg("/bills/HR.4420")["title"])

TypeScript / Node

const BASE = "https://www.govgreed.com/api/v1";
const KEY  = process.env.GOVGREED_API_KEY!;

async function gg<T>(path: string, params?: Record<string, unknown>): Promise<T> {
  const url = new URL(BASE + path);
  for (const [k, v] of Object.entries(params || {})) if (v != null) url.searchParams.set(k, String(v));
  const r = await fetch(url, { headers: { Authorization: `Bearer ${KEY}` } });
  if (!r.ok) throw new Error((await r.json()).title);
  return (await r.json()).data;
}

console.log(await gg("/donors/search", { q: "mercer", limit: 5 }));

OpenAPI spec

OpenAPI 3.1 spec at /api/v1/openapi. Drop into Swagger Editor or Insomnia to explore interactively.

Changelog

v1.6.0 — 2026-05-03 (insider awards + ticker carveouts)

v1.5.0 — 2026-05-02 (quota recalibration)

v1.4.0 — 2026-05-02 (Phase C — context layer)

v1.3.0 — 2026-05-02 (Phase B — fresh data exposure)

v1.2.0 — 2026-05-02 (Phase A — flagship + foundational)

v1.1.0 — 2026-05-02 (synthesis layer)

v1.0.0 — 2026-05-02

Questions? team@mmamodel.ai · Service status: /api/v1/status · Pricing: /founders