Obscura

Lobbying Filings

Federal lobbying disclosures: who lobbied, for which client, on what issues, and the reported spend.

lobbying_filings — the dataset name to pass to the Obscura API.

Category Government Columns 31 Refresh Daily Point-in-time available_date

What one row means

One federal lobbying disclosure filing from the Senate LDA (Lobbying Disclosure Act) public database: a single registrant-client relationship's periodic report (registration, quarterly activity report, or termination), carrying the reported income/expenses, the client and registrant identities, and the distinct general-issue-area codes lobbied on.

One row per (filing_uuid).

Point-in-time availability

Every Obscura dataset carries available_date: the calendar day the publisher made the row available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the same thing on every dataset in the catalog.

For lobbying_filings: published: available_date = the date-part of event_time (dt_posted), the moment the LDA accepted/posted the filing into the public system.

Refresh cadence

Obscura refreshes lobbying_filings daily — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.

Schema — 31 columns

The full public column list for lobbying_filings, with the meaning of every field. The same schema is served unauthenticated at https://api.obscura.trade/v1/catalog/lobbying_filings.

ColumnTypeDescription
filing_uuidtext · not nullLDA-assigned UUID for the filing submission (e.g. '42172053-5ad0-45ac-a489-7f30c1061a5a'); primary key and the natural join/dedup key used by the collector's 'seen' set to skip already-stored filings.
filing_typetextLDA filing-type short code, e.g. 'RR' (registration), 'Q1'-'Q4' (quarterly activity report), '2T'/'2TY' (quarter termination, with/without activity), '1' (year-end)/'1A' (year-end amendment). Nullable; blank strings filtered to null by the parser's `s()` helper.
filing_type_displaytextHuman-readable label for filing_type as supplied by the LDA API, e.g. '2nd Quarter - Termination', '2nd Quarter - Termination (No Activity)', 'Registration'. Nullable.
filing_yearinteger · not nullCalendar year the filing's reporting period falls in, per the LDA `filing_year` field; NOT NULL (defaults to 0 if absent from the API payload, which parse_filing treats as an unset sentinel rather than failing the row). Drives the collector's per-year sweep and gap_years backfill windowing, not the public-availability date.
filing_periodtextLDA reporting period label the filing covers, e.g. 'first_quarter', 'second_quarter', 'third_quarter', 'fourth_quarter'; nullable. Combined with filing_year this is the AS-OF reporting period the disclosure describes, which precedes the actual posting (available_date/event_time) by the statutory filing window (~20 days after quarter-end for quarterly reports).
incomedouble precisionLobbying-firm income for the period, in USD, as reported by an outside registrant lobbying on behalf of a client (the fee the firm was paid). Parsed from the LDA `income` field, which arrives as either a JSON string ('40000.00') or a number; null when the field is absent, when the filer is an in-house registrant (which reports expenses instead), or on no-activity terminations.
expensesdouble precisionIn-house lobbying expenses for the period, in USD, as reported by a registrant lobbying on its own organization's behalf. Same string-or-number parsing as income; null when not applicable (most outside-firm filings report income, not expenses, and vice versa) or when unreported on a termination filing.
client_nametextDisplay name of the client on whose behalf the registrant lobbied (e.g. 'VALTHOS INC.', 'JACKSON WALKER LLP ON BEHALF OF SAN MIGUEL ELECTRIC COOPERATIVE, INC.'), from the LDA API's nested `client.name`. Nullable if the client object is absent.
client_idbigintLDA's internal numeric identifier for the client organization (`client.client_id`); stable across a client's filings over time, letting filings for the same client be grouped even as client_name text varies slightly. Nullable.
client_descriptiontextFree-text description of the client's business supplied on the filing (e.g. 'Artificial intelligence biotechnology company.', 'Electric utility company in South Texas'), from `client.general_description`. Nullable.
registrant_nametextDisplay name of the registrant (the lobbying firm or in-house government-affairs entity that filed the disclosure), from `registrant.name`, e.g. 'INVARIANT LLC'. Nullable.
registrant_idbigintLDA's internal numeric identifier for the registrant (`registrant.id`); stable across a registrant's filings, letting all of one firm's clients/filings be grouped. Nullable.
issue_codestextComma-joined, order-preserved, deduplicated list of general-issue-area codes lobbied on across the filing's constituent lobbying_activities entries (e.g. 'DEF', 'FIN', or 'BUD,TAX'); LDA standard 2-4 letter codes such as DEF=Defense, FIN=Financial Institutions/Investments/Securities, BUD=Budget/Appropriations, TAX=Taxation. Null when the filing lists no activities (e.g. a bare registration or no-activity termination).
event_timetimestamp with time zoneThe exact moment the LDA accepted/posted this filing into the public system, sourced directly from the API's `dt_posted` field (parsed via RFC3339, e.g. '2026-07-03T00:23:45Z'); this column was itself renamed from dt_posted by migration m20260702_000060. This is the true public-availability instant -- available_date is its date-part. Nullable only if the source payload omits or fails to parse dt_posted.
available_datedateSTORED generated column: the UTC date-part of event_time (`(event_time AT TIME ZONE 'UTC')::date`), i.e. the calendar day the filing was posted/became publicly retrievable via the LDA API. This is the point-in-time anchor every consumer/export/coverage-range keys on; it always lags filing_year/filing_period by the statutory reporting-to-posting window, never leads it.
termination_datedateDate the lobbying relationship terminated, from the LDA top-level `termination_date` (e.g. '2026-03-31'); populated only on termination-type filings, null otherwise. A real relationship-end event date distinct from event_time (the posting instant).
client_effective_datedateDate the client-registrant relationship became effective, from the nested `client.effective_date` (e.g. '2023-03-01'); the relationship-start date. Nullable.
expenses_methodtextLDA accounting method used to compute `expenses` (code 'A'/'B'/'C'), from the top-level `expenses_method` field; affects the comparability/meaning of the expenses figure. Nullable.
house_registrant_idbigintAlternate registrant identifier cross-linking to the U.S. House lobbying database, from nested `registrant.house_registrant_id`; a join key across the Senate LDA and House lobbying systems. Nullable.
registrant_descriptiontextRegistrant (lobbying firm) business self-description, from nested `registrant.description` (e.g. 'Consulting'); the registrant-side analogue of client_description. Nullable.
registrant_statetextRegistrant location: state/province code, from nested `registrant.state`. Nullable.
registrant_citytextRegistrant location: city, from nested `registrant.city`. Nullable.
registrant_countrytextRegistrant location: country code, from nested `registrant.country`. Nullable.
registrant_ziptextRegistrant location: postal/ZIP code, from nested `registrant.zip`. Nullable.
registrant_ppb_countrytextRegistrant principal-place-of-business country, from nested `registrant.ppb_country`. Nullable.
client_statetextClient location: state/province code, from nested `client.state`. Nullable.
client_countrytextClient location: country code, from nested `client.country`. Nullable.
client_ppb_statetextClient principal-place-of-business state/province, from nested `client.ppb_state`. Nullable.
client_ppb_countrytextClient principal-place-of-business country, from nested `client.ppb_country`. Nullable.
client_government_entitybooleanFlag: whether the client is itself a government entity, from nested `client.client_government_entity`. Nullable.
client_self_selectbooleanFlag: whether the client self-identified/self-selected on the filing, from nested `client.client_self_select`. Nullable.

Access lobbying_filings

Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.

import obscura

client = obscura.Client("obs_live_…")

df = client.query(
    dataset="lobbying_filings",
    start="2024-01-01",
)

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the lobbying_filings dataset?

Federal lobbying disclosures: who lobbied, for which client, on what issues, and the reported spend. One federal lobbying disclosure filing from the Senate LDA (Lobbying Disclosure Act) public database: a single registrant-client relationship's periodic report (registration, quarterly activity report, or termination), carrying the reported income/expenses, the client and registrant identities, and the distinct general-issue-area codes lobbied on.

How do I avoid look-ahead bias with lobbying_filings?

Filter on lobbying_filings.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date = the date-part of event_time (dt_posted), the moment the LDA accepted/posted the filing into the public system. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.

In what formats can I get lobbying_filings?

As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="lobbying_filings". The column schema is public at https://api.obscura.trade/v1/catalog/lobbying_filings.

How often is lobbying_filings updated?

Obscura refreshes lobbying_filings on a daily schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.

Related datasets

Border CrossingsMonthly inbound crossings at U.S. land ports on the Canadian and Mexican borders, split by mode (trucks, trains, persona… Congress LeaderboardWhich members of Congress have done best on the stock purchases they disclose: one dollar-weighted, one-year-forward ret… Congress TradesStock and asset trades disclosed by members of Congress and their households under the STOCK Act, parsed from House and … FEMA DisastersFederally declared disasters with type, location and dates, from FEMA. Government Contract TickersA crosswalk from federal-contract recipient names to ticker symbols, so government awards can be matched to public compa… GPR Index DailyThe daily Geopolitical Risk index of Caldara and Iacoviello, derived from newspaper coverage of geopolitical tension. GPR Index MonthlyThe monthly Geopolitical Risk index (Caldara and Iacoviello), with deeper history than the daily version. H-1B ApprovalsApproved H-1B visa petitions by employer, from USCIS.