Module 9 of 9
The shape of the site
pac.dog is a browsable mirror of the U.S. government public record. Every row of every dataset above — every candidate, committee, bill, member, vote, nonprofit, lobbying filing — has a detail page at a stable URL, a JSON equivalent at /api/v1/<collection>/[id], and a place on the entity graph at /connections. The same engine renders the page, the JSON, and the graph edge.
Find things — search, ask, browse
/search — semantic search across candidates, committees, bills, and members. Type a phrase; the top matches come back ranked by cosine similarity against a 1024-dim Voyage AI embedding. Use it when you don't know the exact name (e.g. "chips act lead sponsor").
/ask — natural-language question answering, grounded strictly in our corpus. The model can't answer a question with facts it didn't pull from a tool call; every entity it mentions is a clickable @handle linking back to the detail page. Each ask costs tokens from your wallet (your first 5,000 each month are free). The footer shows your live balance.
Browse hubs — every collection has a sortable paginated index: /candidates, /committees, /bills, /members (federal + state), /votes, /nonprofits, /lobbying, /fara, /persons, /orgs. Every column header is clickable to sort.
Track things — watchlists, reactions, threads
Watchlists collect entities you want to follow. They're private by default; flip to public to share. Anything in your list surfaces back to your dashboard at /me when its activity timeline updates.
Reactionsare emoji per entity (👍, 👀, 😮, etc.). They're public, signed by your handle, and appear in aggregate on the entity page. Use them to express a stance without writing a post.
Threads are short typed posts. Inline @-typeahead links any entity in the graph: @G000555 (a member), @C00401224 (a committee), @hr1234-118 (a bill). Threads are public by default; toggle private at compose time.
See the network — connections, trends, graph
/connections is every typed edge in the graph (currently ~1.3M rows): donations, IE spending, lobbying contracts, principal-committee assignments, bill sponsorships, LDA-client ties. Filter by edge type to slice by relationship; click either endpoint to jump to its detail page.
/trends is the aggregate view — top donors, top independent expenders, top lobbying payers — refreshed every 15 minutes from the underlying graph.
Use the data — tools, API, tokens
/tools/district-fetch takes a postal address (or a CSV of addresses) and returns the seated U.S. House rep, both senators, active candidates, and Census ACS demographics for that district. The geocoding runs entirely in your browser — the address never reaches our server.
/api/v1 is the public JSON API. Every browse page has a JSON equivalent; every detail page has an /api/v1/<collection>/[id] route. Mint a personal access token at /me/tokens and send it as Authorization: Bearer pacd_… .
Token wallet. The /ask feature and metered tools draw against a per-user token balance. Signed-in users get a monthly free allowance; top up at /ask/topup if you need more. The footer always shows your live balance.
Sign in
/signin uses a magic link — no password. Enter your email; we send a one-tap sign-in link. Watchlists, reactions, threads, /ask, and any tool that costs tokens require sign-in. Browsing, search, and the public REST API are anonymous-friendly.
One operating principle
Every value displayed comes from a primary U.S. government source — FEC, congress.gov, House Clerk, Senate LIS, Senate/House LDA registers, DOJ FARA, IRS Form 990, Census ACS, each state SOS or legislature. We don't use aggregator vendors. If you see a number on pac.dog you can't trace back to a primary source, that's a bug — file it.
Sign in to track your progress.