Texas Money InvestigatorTXMoney

Documentation · Data inventory

What this project knows, and where it learned it.

The Texas Money Investigator answers questions from four public datasets — two from the Texas Ethics Commission (state-level campaign finance and lobby registrations) and two from the City of Austin (city-level campaign finance and lobby disclosures). Every number the agent reports cites a row in one of the tables described below.

The four datasets at a glance

StateCampaign finance

Texas Ethics Commission — Campaign Finance bulk

Every electronically filed campaign-finance report at the state level since July 2000. Ships as one ~1 GB ZIP of fixed-schema CSVs covering contributions, expenditures, loans, pledges, debts, travel, assets, cover sheets, and the filer index.

Statewide candidates, officeholders, committees · 2000 → present · ~1.0 GB ZIP · ~5 GB CSV uncompressed

StateLobby

Texas Ethics Commission — Lobby Registrations

Annual Excel snapshots of every registered state lobbyist, the clients each represents, the subject matters they're working on, and the political funds they touch. We ingest 2018 through 2026 (nine years).

Statewide registered lobbyists · 2018 → 2026 · ~52 MB across 36 Excel files (4 per year × 9 years)

CityCampaign finance

City of Austin — Campaign Finance

City Council and city-officeholder campaign finance, downloaded as Socrata CSVs from data.austintexas.gov. Same conceptual schema as TEC's CF bulk, but city-level only and in human-readable column names.

City Council candidates, officeholders, committees · 2014 → present · ~270 MB across 6 CSVs

CityLobby

City of Austin — Lobbyist Disclosures

Austin's lobby disclosure regime is more granular than the state's — registrants, clients, quarterly activity reports, the specific city issues they're registered against, named city officials lobbied, expenditures with a 'this was for city-official business' flag, and an employee table flagging council relatives.

Austin city lobbyists, clients, and officials · current registration through historical filings · 10 CSVs

How the datasets relate

The four sources are deliberately not federated through a single identifier. Each jurisdiction maintains its own ID space — TEC's campaign-finance world uses filerIdent, TEC's lobby world uses FilerID, and Austin uses REGISTRANT_ID for lobbyists and free-text names for donors and recipients. Hard joins hold within a jurisdiction; cross-jurisdiction joins go through fuzzy name matching and should always be treated as candidate links, not facts.

How the four datasets relateSolid arrows are exact joins inside a single source. Dashed links cross the state/city boundary by name and remain candidates until verified.STATECITYNO SHARED IDTEC · campaign financefilerIdent · reportInfoIdentAustin · campaign financeTRANSACTION_IDTEC · lobbyFilerID · ClientNameAustin · lobbyREGISTRANT_ID · REPORT_IDdonor namepayee namelobbyist nameclient namefilers.csvcontribsexpendcovercontributionsexpenditurestransaction_detailRegisteredLobbyistsLobbyGroupByLobbyistLobbySubjMatterPol_FundsByLobbyistsregistrantsclientsreportsmunicipal_questions
Exact join inside one sourceCandidate name match across sourcesHover any table or link

Hard joins (within a jurisdiction)

  • 01TEC CF · filerIdent connects filers.csv to every schedule (contribs, expend, loans, pledges, debts, travel, assets, cover sheets).
  • 02TEC CF · reportInfoIdent links each transaction to its cover sheet, which is what citation chips in the UI dereference.
  • 03TEC lobby · FilerID connects RegisteredLobbyists to LobbyGroupByLobbyist, LobbySubjMatter, and Pol_FundsByLobbyists.
  • 04Austin CF · TRANSACTION_ID is stable across rows of contributions, expenditures, and the joined transaction_detail view.
  • 05Austin lobby · REGISTRANT_ID connects every lobby table; REPORT_ID, MQ_ID, CO_ID, EMP_ID, RP_ID chain the satellite tables back to a quarterly filing.

Soft joins (across jurisdictions)

  • 01TEC lobby ↔ TEC CF: FilerID and filerIdent live in different namespaces. The same human shows up as a TEC lobby filer and as a recipient or donor in CF only via name match.
  • 02Austin ↔ TEC: REGISTRANT_ID is independent of TEC's IDs. A donor named in Austin contributions and a TEC committee with the same legal name may be the same entity — fuzzy match, then verify against the source filing.
  • 03Donor names are free text on every CF table. The same person can appear as 'JOHN A SMITH', 'JOHN SMITH', 'SMITH, JOHN A.', etc., and the agent's disambiguation step is what reconciles them.
  • 04Sanity check on cross-jurisdiction matching: 12+ named lobbyists already match between Austin and TEC for 2025 alone (e.g. Demetrius McDaniel, Ana Husted, Kathleen Mitchell).

The four ways an entity shows up

Most interesting investigations cross-reference the same person or company across all four datasets:

  1. As a donor — name on a row in TEC contribs or Austin contributions.
  2. As a payee — name on a row in TEC expend or Austin expenditures.
  3. As a lobbyist client — ClientName in TEC LobbyGroupByLobbyist or Austin clients.
  4. As a registrant — themselves a registered lobbyist in TEC RegisteredLobbyists or Austin registrants.

A company that appears in all four — donating, getting paid as a vendor, hiring lobbyists, and employing a registered lobbyist — is the kind of pattern this app surfaces.

State · Campaign financeethics.state.tx.us/search/cf

Texas Ethics Commission — Campaign Finance bulk

Every electronically filed campaign-finance report at the state level since July 2000. Ships as one ~1 GB ZIP of fixed-schema CSVs covering contributions, expenditures, loans, pledges, debts, travel, assets, cover sheets, and the filer index.

Statewide candidates, officeholders, committees · 2000 → present · ~1.0 GB ZIP · ~5 GB CSV uncompressed

filers.csvfiler index

Master roster of every filer (candidates, officeholders, GPACs, SPACs, committees). Joins everything else through filerIdent.

filerIdent
TEC filer account number — the join key
filerName
Legal name on file
filerTypeCd
CAND / OH / GPAC / SPAC / etc.
filerJdiCd
Jurisdiction code (state office, district, etc.)
filerEffStartDt / filerEffStopDt
Activity window
contribs_##.csv, cont_ss.csv, cont_t.csv, returns.csvtens of millions

Schedules A/C — itemized political contributions to a filer, plus contributor identity and amount.

filerIdent
Recipient
contributorNameOrganization / -PersonLast / -PersonFirst
Donor identity
contributionAmount
Dollar amount
contributionDt
Date received
contributorEmployer / contributorOccupation
Self-reported, often blank
contributorAddrCity / -StateCd / -PostalCode
Street address redacted post-2023; ZIP/city visible
expend_##.csv, expn_t.csvmillions

Schedules F/G/H/I — itemized political expenditures by a filer to a payee, with category code.

filerIdent
Spender
payeeNameOrganization / -PersonLast
Vendor / individual paid
expendAmount
Dollar amount
expendCatCd
Category — joins expn_catg.csv
expendDescr
Free-text purpose
politicalExpendCd
Political vs. officeholder use
expn_catg.csvlookup

Expenditure category code → human label (e.g. ADVERT, CONSULT, FOOD).

expendCategoryCodeValue
Code
expendCategoryCodeLabel
Description
cover.csv, cover_ss.csv, cover_t.csvall reports

Cover sheet 1 — one row per filed report with totals (raised, spent, on hand) and report period.

reportInfoIdent
Unique report number — the citation key
filerIdent
Filer
periodStartDt / periodEndDt
Reporting window
totalUnitemizedContribAmount, totalContribAmount, totalExpendAmount, totalLoanBalance
Aggregate totals
loans.csvschedule E

Loans owed by the filer (lender, amount, terms, guarantor).

filerIdent, lenderName*, loanAmount, loanInterestRate, loanMaturityDt
pledges.csv, pldg_ss.csv, pldg_t.csvschedule B

Pledges of future contributions not yet received.

filerIdent, pledgorName*, pledgeAmount, pledgeDt
debts.csvschedule L

Outstanding debts the filer owes for goods/services.

filerIdent, payeeName*, debtAmount, debtIncurredDt
credits.csvschedule K

Credits — refunds and rebates received by the filer.

filerIdent, creditFromName*, creditAmount
travel.csvschedule T

Out-of-state travel paid for from political funds.

filerIdent, travelerName*, travelDestination, travelAmount, travelDeparture/ReturnDt
assets.csvschedule M

Assets ≥ $500 disclosed by judicial filers.

filerIdent, assetDescr
final.csvfinal reports

Final-report flags (filer is closing the account).

filerIdent, reportInfoIdent, finalRptDt
cand.csvDCE candidates

Candidates benefiting from a direct campaign expenditure made on their behalf without their consent.

filerIdent (the spender), expendInfoId → expend_##.csv, candidate name
spacs.csvSPAC index

Index of specific-purpose committees with their declared purpose.

spacFilerIdent, committeePurpose
notices.csv, purpose.csvcover sheets 2 & 3

Cover sheet 2 (notices received from candidates/officeholders) and cover sheet 3 (committee purpose statements).

reportInfoIdent → cover.csv

Texas Ethics Commission — Lobby Registrations

Annual Excel snapshots of every registered state lobbyist, the clients each represents, the subject matters they're working on, and the political funds they touch. We ingest 2018 through 2026 (nine years).

Statewide registered lobbyists · 2018 → 2026 · ~52 MB across 36 Excel files (4 per year × 9 years)

<YYYY>RegisteredLobbyists.xlsx~2k / year

Master list of registered lobbyists for the year. The roster.

FilerID
TEC lobby filer ID — separate namespace from CF filerIdent
FullName, BusName, Address, City, State, Zip
Identity + contact
EffStartDt / EffStopDt
Registration window
<YYYY>LobbyGroupByLobbyist.xlsx~10k / year

One row per lobbyist-client engagement with compensation. The core 'who is hired by whom' table.

FilerID
Joins to RegisteredLobbyists
ClientName, Client address columns (Addr1, City, Zip)
Disambiguated by suffix on duplicate columns
CompensationAmount or category
Exact-amount or banded ($0–$10k, $10k–$25k, …)
EffStartDt / EffStopDt
Engagement window
<YYYY>LobbySubjMatter.xlsx~30k / year

Subject-matter codes per lobbyist-client engagement (e.g. ENERGY, HEALTHCARE, INSURANCE, WATER).

FilerID, ClientName
Engagement key — joins LobbyGroupByLobbyist
SubjectMatterCd
Two-letter category
SubjectMatterDescr
Long-form description
<YYYY>Pol_FundsByLobbyists.xlsxsmall

Lobbyists who were compensated or reimbursed from political funds — direct money flow between political funds and lobbyists.

FilerID
Lobbyist receiving the funds
PoliticalFundName
Source — often a PAC or committee
Amount, Date
Payment
City · Campaign financedata.austintexas.gov

City of Austin — Campaign Finance

City Council and city-officeholder campaign finance, downloaded as Socrata CSVs from data.austintexas.gov. Same conceptual schema as TEC's CF bulk, but city-level only and in human-readable column names.

City Council candidates, officeholders, committees · 2014 → present · ~270 MB across 6 CSVs

contributions.csv238k

Every contribution to a Council candidate / officeholder / committee. The donor table.

Donor
Donor name (org or individual)
Recipient
Filer receiving the contribution
Contribution_Amount, Contribution_Date, Contribution_Year
Money + when
Donor_Type
INDIVIDUAL / PAC / etc.
Donor_Reported_Occupation, Donor_Reported_Employer
Self-reported
City_State_Zip
Street address redacted; city/ZIP visible
TRANSACTION_ID
Stable per-row ID
expenditures.csv28k

Every campaign expenditure with payee, amount, and free-text description.

Payee, Paid_By
Vendor + filer
Payment_Amount, Payment_Date, Payment_Year
Expenditure_Type
Category
Expense_Description
Free text
Travel_Outside_Texas, Political_Obligation, Reimbursement_Intended
Flags
TRANSACTION_ID
report_detail.csv2.8k

Cover-sheet equivalent — one row per filed report with totals, election cycle, and office held/sought.

Report ID, Filer, Office_Held, Office_Sought, Election_Cycle
Total_Contributions, Total_Expenditures, Cash_On_Hand
Aggregates
transaction_detail.csv267k

Pre-joined transaction view — contributions and expenditures together, normalized for cross-cutting queries.

TRANSACTION_ID, Transaction_Type, Amount, Counterparty, Date
direct_expenditures.csv3.1k

Direct campaign expenditures — money spent to support/oppose a candidate without coordinating with them.

Payee, Beneficiary_Candidate, Amount, Date, Type
loans.csv312

Campaign loans — lender, amount, terms.

Borrower (filer), Lender, Loan_Amount, Date_Loaned, Interest_Rate

City of Austin — Lobbyist Disclosures

Austin's lobby disclosure regime is more granular than the state's — registrants, clients, quarterly activity reports, the specific city issues they're registered against, named city officials lobbied, expenditures with a 'this was for city-official business' flag, and an employee table flagging council relatives.

Austin city lobbyists, clients, and officials · current registration through historical filings · 10 CSVs

registrants.csv320

One row per registered city lobbyist — the master directory.

REGISTRANT_ID
Internal Austin ID — separate from TEC FilerID
REGISTRANT_FULL_NAME, ENTITY_CD, REGISTRANT_TITLE
Identity
EMPLOYER
Lobbying firm
REGISTRATION_DATE, RENEWAL_DATE, TERMINATION_DATE
Lifecycle
lobbyists_master.csv303

Active lobbyist roster — a thinner version of registrants.csv used as a lookup.

LOBBYIST, REGISTRANT_ID, REGISTRATION_DATE, …
clients.csv125k

Each engagement between a registered lobbyist and a client, per filing period. The 'who is hired by whom' for the city.

REGISTRANT_ID
Lobbyist
CLIENT_ID, CLIENT_FIRST_NAME / LAST_NAME, CLIENTENTITY_CD
Client identity
BUSINESS_DESC
Client business description — what the company does
COMP_CATEGORY, COMP_EXACT_AMOUNT
Compensation banded or exact
REPORT_ID
Joins reports.csv
reports.csv6.2k

Quarterly activity reports — one per registrant per quarter — with category totals (food/bev, transport/lodging, gifts, entertainment, awards, honoraria, event fees, media support).

REPORT_ID, REGISTRANT_ID, REPORT_TYPE1, REPORT_DATE, REPORT_YEAR
Period
TOTAL_FOODBEV, TOTAL_GIFTS, TOTAL_ENTERTAINMENT, TOTAL_AWARDS, TOTAL_HONORARIUMS, TOTAL_EVENTFEES, TOTAL_MEDIA, TOTAL_MEDIASUPPORT, TOTAL_TRANSLODG, TOTAL_REIMBOTHERS
Banded aggregates
NO_ACT, NO_CLIENT, EMP_501C3_YN
Status flags
municipal_questions.csv162k

Specific city issues a registrant is lobbying on (e.g. 'ENTITLEMENTS RELATED TO LAND DEVELOPMENT'). The most granular look at what's being pushed.

MQ_ID, REGISTRANT_ID, REPORT_ID
Joins
MQ_DESC
Free-text issue description
RP_YN, SM_OTHER_DESC
Real-property flag + subject-matter category
city_officials.csv35

Council members and key staff disclosed in lobbyist filings — the named-target list. Tiny because it's a lookup of the people being lobbied, not the lobbying activity.

CO_ID
Internal Austin official ID
CO_FIRST_NAME, CO_LAST_NAME, CO_JOB_TITLE, CO_DEPT
Identity
REPORT_ID, TRANSACTION_ID
Where this official appears in a filing
expenditures.csv30

Per-expenditure lobby spending with explicit links back to the city official the spend was on behalf of, including a CITY_OFFICIAL_BUS_YN flag.

REGISTRANT_ID, REPORT_ID, TRANSACTION_ID
Joins
PAYEE_FIRST_NAME / LAST_NAME, PAYEE address columns
Vendor
PAYMENT_AMOUNT, PAYMENT_DATE
Amount + date
EXPN_CATEGORY, EXPN_DESC
Category + free text
CITY_OFFICIAL_BUS_YN
Was this spend for city-official business? Y/N
CITY_OFFICIAL_FIRST_NAME / LAST_NAME / JOB_TITLE / DEPT
Named target official
employees.csv772

Lobbyist firm employees, with a flag for whether the employee is a council relative — a direct conflict-of-interest signal.

EMP_ID, REGISTRANT_ID, REPORT_ID
Joins
EMP_FIRST_NAME, EMP_LAST_NAME, EMP_OCCUPATION, EMP_POSITION_DESC, EMP_EMPLOYER
Identity
COUNCIL_RELATIVE_YN
Flag
CM_FIRST_NAME, CM_LAST_NAME
If COUNCIL_RELATIVE_YN, the council member they're related to
subject_matter.csv37

Subject-matter category lookup (active flag included).

SM_ID, SM_CATEGORY_DESC, ACTIVE
real_property.csv134k

Real-property disclosures — properties the registrant has a financial interest in that may be affected by lobbied issues.

MQ_ID, REPORT_ID, RP_ID
Joins
RP_ADR1, RP_CITY, RP_STATE, RP_ZIP
Property location
RP_PROPERTY_DESC
Description

Source attribution

Texas Ethics Commission data published under Title 15 (Election Code) and Chapter 305 (Government Code), no usage restriction. City of Austin data published under City Code Chapter 2-2-26 (campaign finance) and Chapter 4-8 (lobby) via the Austin Open Data portal. Both are public records. We attribute on every page that cites them.