U.S. Senate Financial Disclosures Scraper
Pricing
from $1.01 / 1,000 item extracteds
U.S. Senate Financial Disclosures Scraper
Search official Senate eFD reports and export structured stock transactions, annual assets, liabilities, positions, agreements, and filing metadata.
Pricing
from $1.01 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Share
Export official U.S. Senate financial disclosures from Senate eFD as structured dataset rows. The Actor searches periodic transaction reports (PTRs) and annual reports, opens the original filing, and flattens its useful tables for analysis.
Use it to:
- monitor newly submitted Senator stock-trade reports;
- export ticker, asset, transaction type, date, and amount ranges;
- collect annual assets, liabilities, positions, agreements, and other entries;
- feed public-disclosure research into a spreadsheet, database, or data pipeline;
- process one known eFD report URL without searching the full filing index.
The source is the official Senate eFD website. This Actor covers Senator filings, not House Clerk disclosures.
What does the U.S. Senate Financial Disclosures Scraper do?
For search inputs, the Actor:
- establishes a permitted Senate eFD public-search session;
- accepts the source's public-use agreement;
- searches the official report index using your filer, state, report-type, and submission-date filters;
- follows annual or PTR report links;
- turns each source table row into a typed dataset item;
- stops at
maxReportsormaxItems, whichever limit is reached first.
For startUrls, it skips index discovery and extracts the supplied report pages.
Report-type and ticker filters still apply to explicit URLs.
The Actor uses an Apify datacenter proxy because Senate eFD rejects direct cloud requests. It rotates only during bounded session bootstrap and does not automatically fall back to residential proxy traffic.
Who is this Actor for?
Compliance and ethics researchers
Build repeatable extracts of public filing data while retaining the report ID, official URL, filer, submission date, and source section for traceability.
Financial journalists
Find recent PTR transactions, identify disclosed tickers, and link every row back to the official filing before reporting.
Market and policy analysts
Compare disclosed transaction activity with annual assets or other public financial interests in downstream notebooks and databases.
Transparency projects
Schedule a narrow search as an Apify Task and compare report IDs or dataset rows with an earlier run in your own workflow.
What data can you extract?
| Field | Meaning |
|---|---|
recordType | transaction, annual_entry, or a fallback report_summary |
reportType | periodic_transaction or annual |
reportId | Stable UUID from the official report URL |
reportTitle | Filing title displayed by Senate eFD |
reportUrl | Official Senate eFD detail URL |
submittedDate | Filing submission date from the report search |
firstName, lastName | Filer name fields from search results |
filerName | Full filer label displayed by eFD |
section | Source section, such as Transactions or Part 3. Assets |
itemNumber | Row number when supplied by the report |
transactionDate | Date of a PTR transaction |
owner | Disclosed owner or debtor |
ticker | Security ticker when disclosed |
assetName | Asset or security description |
assetType | Source asset or entry type |
transactionType | Purchase, Sale, Exchange, or another source value |
amount | Public value, income, liability, or transaction range |
comment | Filing-row comment when present |
annualFields | All labeled columns from the annual-report row |
scrapedAt | ISO timestamp for extraction time |
Missing source values are returned as null.
Annual sections have different columns, so annualFields preserves all
section-specific labels while common values are also copied into columns such
as assetName, owner, and amount.
Getting started
- Open the Actor input page in Apify Console.
- Choose
Periodic transaction reports,Annual financial disclosures, or both. - Optionally enter a Senator name or two-letter state.
- Set a submission date range.
- Keep the first run small with
maxReports: 3andmaxItems: 10. - Click Start.
- Open the default dataset to preview or export JSON, CSV, Excel, XML, or RSS.
- Check
reportUrlwhenever your analysis needs the original public filing.
A practical first input is:
{"lastName": "Wyden","reportTypes": ["periodic_transaction"],"submittedDateFrom": "2026-01-01","submittedDateTo": "2026-08-10","maxReports": 3,"maxItems": 5}
Input parameters
startUrls
Optional official report URLs matching one of these shapes:
https://efdsearch.senate.gov/search/view/ptr/<uuid>/https://efdsearch.senate.gov/search/view/annual/<uuid>/
Other domains and general search-page URLs are rejected.
firstName and lastName
Optional Senate eFD filer-name filters. Names are passed to the official search rather than matched against unrelated page text.
state
Optional two-letter state code such as OR, TX, or NY.
Leave it empty to search all states.
reportTypes
Choose one or both values:
periodic_transactionfor PTR transaction rows;annualfor annual disclosure table entries.
The default is both report types.
submittedDateFrom and submittedDateTo
Inclusive report submission dates in YYYY-MM-DD format.
They default to January 1 of the current year and today.
These dates filter report submissions, not the transaction date inside a PTR.
tickers
Optional ticker symbols such as AMCR.
Ticker filtering applies only to periodic transaction rows because annual
entries do not consistently expose a ticker column.
maxReports
Maximum detail pages to inspect. The default is 25 and the allowed range is 1–1,000.
maxItems
Maximum output rows to save. The default is 100 and the allowed range is 1–10,000.
Output example
A current PTR can produce a record like this:
{"recordType": "transaction","reportType": "periodic_transaction","reportId": "5ecc9b5c-07c1-4ec1-bd4a-2db759eff299","reportTitle": "Periodic Transaction Report for 08/09/2026","reportUrl": "https://efdsearch.senate.gov/search/view/ptr/5ecc9b5c-07c1-4ec1-bd4a-2db759eff299/","submittedDate": "2026-08-08","filerName": "Wyden, Ron (Senator)","section": "Transactions","itemNumber": 1,"transactionDate": "2025-04-30","owner": "Spouse","ticker": "AMCR","assetName": "BERY - Berry Global Group, Inc. (Exchanged) Amcor plc Ordinary Shares (Received)","assetType": "Stock","transactionType": "Exchange","amount": "$100,001 - $250,000","comment": null}
The Actor reports source ranges exactly as disclosed. It does not infer an exact trade value from a range.
How much does it cost to extract U.S. Senate financial disclosures?
The Actor uses pay-per-event pricing:
- a $0.001 one-time start event per run;
- one
itemevent for each dataset row; - current item rates range from $0.0019263 on FREE to $0.00046901 on DIAMOND;
- the current BRONZE item rate is $0.001675.
Examples at the current BRONZE rate:
| Output rows | Start | Items | Estimated total |
|---|---|---|---|
| 5 | $0.001 | $0.008375 | $0.009375 |
| 25 | $0.001 | $0.041875 | $0.042875 |
| 100 | $0.001 | $0.1675 | $0.1685 |
The estimate covers Actor event charges. Apify plan allowances and platform billing rules can affect the amount shown to a particular account. Rows rejected by your ticker filter are not saved or charged as item events.
Search and monitoring workflows
Watch recent PTR submissions
Create a Task with a short submission-date window, schedule it, and compare
reportId plus row content against your own previous export.
The Actor does not send alerts or maintain a cross-run history by itself.
Review one official report
Pass its annual or PTR URL in startUrls.
This is useful when another system already discovered the filing link.
Build a spreadsheet export
Run the Actor, open the dataset, and select CSV or Excel.
Common normalized fields appear as columns; annual section-specific columns
remain available in annualFields.
Enrich a research database
Use reportId, itemNumber, and section as source context.
Keep reportUrl so reviewers can inspect the original filing.
API access with cURL
Start a run:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~us-senate-financial-disclosures-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"reportTypes": ["periodic_transaction"],"lastName": "Wyden","maxReports": 3,"maxItems": 10}'
For production scripts, prefer the Authorization: Bearer header so tokens do
not appear in URLs or shell history.
API access with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/us-senate-financial-disclosures-scraper').call({reportTypes: ['annual'],lastName: 'Murphy',maxReports: 1,maxItems: 25,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API access with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/us-senate-financial-disclosures-scraper").call(run_input={"reportTypes": ["periodic_transaction"],"state": "OR","maxReports": 5,"maxItems": 50,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use with Apify MCP
Setup for Claude Code
Add this Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/us-senate-financial-disclosures-scraper"
Setup for Claude Desktop, Cursor, or VS Code
Claude Desktop, Cursor, and VS Code can use this MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/us-senate-financial-disclosures-scraper"}}}
Example prompts:
- "Find recent Senate PTR filings for Wyden and return at most 20 rows."
- "Extract this official Senate eFD annual report URL into structured entries."
- "Get annual disclosure assets submitted this year for Senator Murphy."
Integrations
Use Apify integrations to send dataset rows to:
- Google Sheets for review;
- Make or Zapier for downstream workflows;
- webhooks when a run finishes;
- cloud storage or a database through the dataset API;
- notebooks and BI tools through JSON, CSV, or Excel exports.
Deduplication and change detection should use your destination system or a separate workflow step.
Limits and source behavior
- Senate eFD may block direct requests and individual proxy identities.
- The Actor rotates a bounded number of datacenter sessions during bootstrap.
- A failed bootstrap ends with a non-zero run status rather than returning a misleading empty dataset.
- Search results cover public Senator filings available through eFD.
- The source can remove older reports under its retention rules.
- Paper or attachment-only content may not expose table rows.
- A valid no-result search succeeds with an empty dataset.
- Tickers are not present for every disclosed asset.
maxItemscan stop extraction partway through a report.
Tips for reliable runs
- Start with a narrow date range and small limits.
- Use a last name or state when you need only one filer group.
- Increase
maxReportsbefore increasingmaxItemsif the first reports contain few matching rows. - Remove a ticker filter when testing whether the search itself found reports.
- Keep the official
reportUrlin downstream exports. - Schedule at a considerate interval; public filings do not require constant polling.
Responsible use and legality
The Actor accesses public government disclosure pages. You are responsible for complying with Senate eFD terms, applicable law, Apify policies, and restrictions on how financial disclosure information may be used.
Do not use the data for harassment, identity theft, unlawful profiling, or to misrepresent a disclosed range as an exact amount. Validate important findings against the linked official report. This Actor is a technical extraction tool and does not provide legal, financial, or investment advice.
Troubleshooting
Why did the run fail before returning rows?
The source may have rejected all bounded proxy sessions or changed its agreement or search page. Retry later once. If failures persist, inspect the run log rather than treating the failure as a valid empty result.
Why is the dataset empty?
Check the submission dates, name, state, report types, and ticker filter. A ticker filter excludes annual entries and PTR rows without that exact ticker.
Why is an annual field only inside annualFields?
Annual sections use different columns.
The Actor maps common values to assetName, owner, assetType, and amount
and preserves every labeled source column in annualFields.
Does this Actor cover House disclosures?
No. Use the related House Actor for House Clerk PTR data.
Does it download PDFs or attachments?
No. It extracts the searchable digital annual and PTR table pages.
FAQ
Can I search by transaction date?
Not directly. The date inputs filter report submission dates.
Use transactionDate downstream after extracting PTR rows.
Can I use a report URL from another domain?
No. startUrls accepts only official efdsearch.senate.gov annual and PTR
report URLs.
Are amount ranges converted to numbers?
No. The source's public range is retained as text to avoid false precision.
Are records charged if they do not match my ticker filter?
No. Only rows written to the dataset use the item event.
Can I schedule this Actor?
Yes. Save a working input as an Apify Task and add a schedule. The Actor itself does not persist prior-run state or send alerts.
Related automation-lab Actors
- House Stock Trades Scraper extracts House Clerk PTR transactions from public filings.
- Senate Lobbying Disclosure Scraper covers public lobbying registrations and activity reports, not personal financial disclosure filings.
Use each Actor for its stated source and filing system rather than combining House, Senate eFD, and lobbying records as though they shared one schema.