Congress API endpoint
Use Crawlora's Congress Disclosure Report API to extract supported public Congress data as structured JSON. This page includes request parameters, cURL examples, response schema, error behavior, credit cost, and a Playground link for testing before integration.
/congress/reportFetch a single disclosure report by its filing_url (as returned by Developers commonly use this endpoint for data enrichment, monitoring, research dashboards, internal automation, and agent-native workflows that need repeatable structured public web data. Authentication uses the documented Crawlora headers, and usage is metered with the credit cost shown on this page.
Request parameters are generated from the active endpoint catalog. Required values must be sent before Crawlora can call the upstream public web data source.
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| url | string | Yes | Filing URL, as returned by congress-stock-disclosures' filing_url field. Must be an efdsearch.senate.gov /search/view/annual/..., /search/view/ptr/..., or /search/view/extension-notice/regular/... URL. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/congress/report" \ -H "x-api-key: $CRAWLORA_API_KEY"
Send your scraping API key in the x-api-key header. Use the console API Keys page to rotate or select the active key.
Endpoint usage is metered in credits. The plan prices, included credits, limits, and overage rates below match the active backend billing configuration.
| Plan | Price | Included credits | Daily cap | Rate limit | Overage |
|---|---|---|---|---|---|
| Free | $0/mo | 2,000 | 500 daily credits | 5/min | No overage |
| Starter | $9/mo | 20,000 | 5,000 daily credits | 15/min | $0.75/1,000 overage credits when enabled |
| Growth | $29/mo | 100,000 | 25,000 daily credits | 45/min | $0.45/1,000 overage credits when enabled |
| Pro | $79/mo | 400,000 | No daily cap | 120/min | $0.30/1,000 overage credits |
| Business | $199/mo | 1,200,000 | No daily cap | 300/min | $0.20/1,000 overage credits |
| Enterprise | $499/mo | 5,000,000 | No daily cap | 1,000/min | $0.12/1,000 overage credits |
This endpoint is executed through Crawlora's managed scraping infrastructure.
- `chamber` — always `senate` for this endpoint today (House disclosures aren't parseable HTML). The field's type is shared with `congress-stock-disclosures` and formally allows `house`, `senate`. - `parts` is a list of the report's content sections in document order. Annual reports have several numbered sections ("Part 1. Honoraria", "Part 3. Assets", ..., plus an unnumbered "Attachments & Comments"); PTR reports have exactly one, titled "Transactions". Each part carries: - `answer` — the section's yes/no lead question answer, when present (e.g. `"Yes"`). PTR's "Transactions" section has no such question and omits this field. - `rows` — the section's data table, when it has one, as a list of objects keyed by the table's own column headers (e.g. `Asset`, `Asset Type`, `Owner`, `Value`, `Income Type`, `Income` for an Annual report's Part 3 Assets table, or `Transaction Date`, `Owner`, `Ticker`, `Asset Name`, `Asset Type`, `Type`, `Amount`, `Comment` for a PTR's Transactions table). This is intentionally schema-agnostic across report types rather than hardcoded to one report type's columns. - `transactions` is the stable, normalized transaction list for both Annual reports (Part 4a and Part 4b) and PTR reports. It preserves document order and the source's displayed strings, including amount ranges and `--` placeholders. Each item includes `source_part`, optional `source_row_number`, `transaction_date`, `owner`, optional `ticker`, `asset_name`, optional `asset_type`, `transaction_type`, `amount`, and optional `comment`. The original table remains available in `parts[].rows` for backward compatibility and source-specific columns. - `body` is populated only for Due Date Extension notices -- a short prose notice (who requested the extension and the new due date), not a Parts-table form like Annual/PTR. `filer`/`filed_at`/`parts` stay blank for this type since the page has no structurally distinct fields for them; the filer's name appears inline in the `body` prose instead. - A URL that doesn't match a supported report returns HTTP 400 with a typed error. - A report id that doesn't exist returns HTTP 404. - A blocked, empty, or unexpectedly-shaped upstream response returns HTTP 503 and may be retried. Example response (Annual): ```json {"code":200,"msg":"OK","data":{"chamber":"senate","report_type":"annual","report_id":"cc198326-0f50-4f47-8b03-a5c6440f400f","source_url":"https://efdsearch.senate.gov/search/view/annual/cc198326-0f50-4f47-8b03-a5c6440f400f/","title":"Annual Report for Calendar 2018","filer":"The Honorable John A Barrasso (Barrasso, John)","filed_at":"05/15/2019 @ 8:11 AM","parts":[{"title":"Part 4b. Transactions","answer":"Yes","rows":[{"#":"1","Owner":"Self","Ticker":"VTSAX","Asset Name":"Vanguard Total Stock Market Index Fund","Transaction Type":"Sale (Partial)","Transaction Date":"01/02/2018","Amount":"$250,001 - $500,000","Comments":"n/a"}]}],"transactions":[{"source_part":"Part 4b. Transactions","source_row_number":"1","transaction_date":"01/02/2018","owner":"Self","ticker":"VTSAX","asset_name":"Vanguard Total Stock Market Index Fund","transaction_type":"Sale (Partial)","amount":"$250,001 - $500,000","comment":"n/a"}],"fetched_at":"2026-08-08T00:00:00Z"}} ``` Example response (PTR): ```json {"code":200,"msg":"OK","data":{"chamber":"senate","report_type":"ptr","report_id":"deb8df2a-b8ef-4f02-ae44-1f3b7168ccc2","source_url":"https://efdsearch.senate.gov/search/view/ptr/deb8df2a-b8ef-4f02-ae44-1f3b7168ccc2/","title":"Periodic Transaction Report for 01/03/2019","filer":"The Honorable Thomas R Carper (Former Senator)","filed_at":"01/03/2019 @ 1:10 PM","parts":[{"title":"Transactions","rows":[{"#":"5","Transaction Date":"12/19/2018","Owner":"Spouse","Ticker":"--","Asset Name":"Bank of America","Asset Type":"Corporate Bond","Type":"Purchase","Amount":"$15,001 - $50,000","Comment":"--"}]}],"transactions":[{"source_part":"Transactions","source_row_number":"5","transaction_date":"12/19/2018","owner":"Spouse","ticker":"--","asset_name":"Bank of America","asset_type":"Corporate Bond","transaction_type":"Purchase","amount":"$15,001 - $50,000","comment":"--"}],"fetched_at":"2026-08-08T00:00:00Z"}} ``` Example response (Due Date Extension): ```json {"code":200,"msg":"OK","data":{"chamber":"senate","report_type":"due_date_extension","report_id":"13373873-428a-423f-8d0f-be3e1e36a1a2","source_url":"https://efdsearch.senate.gov/search/view/extension-notice/regular/13373873-428a-423f-8d0f-be3e1e36a1a2/","title":"Candidate Report for 2026 Due Date Extension 1","filer":"","filed_at":"","parts":[],"body":"Theodore (Todd) B Achilles timely requested an extension of time for filing the annual Public Financial Disclosure Report.\n\nPursuant to section 101(g) of the Ethics in Government Act of 1978, as amended, a 90-day extension was granted and the new due date for the report is no later than August 13, 2026.","fetched_at":"2026-08-08T00:00:00Z"}} ```
Crawlora does not silently return bad data when the upstream page cannot be used.
| Status | Common failure case |
|---|---|
| 400 | Invalid input or missing required parameter |
| 429 | Plan or endpoint rate limit exceeded |
| 500 | Internal execution error |
| 502 | Upstream platform failed, returned unusable HTML, or served a challenge page that could not be resolved |
When possible, Crawlora returns structured error context so your integration can retry, back off, or inspect the request.
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
{
"code": 200,
"msg": "OK",
"data": {
"chamber": "senate",
"report_type": "annual",
"report_id": "cc198326-0f50-4f47-8b03-a5c6440f400f",
"source_url": "https://efdsearch.senate.gov/search/view/annual/cc198326-0f50-4f47-8b03-a5c6440f400f/",
"title": "Annual Report for Calendar 2018",
"filer": "The Honorable John A Barrasso (Barrasso, John)",
"filed_at": "05/15/2019 @ 8:11 AM",
"parts": [
{
"title": "Part 4b. Transactions",
"answer": "Yes",
"rows": [
{
"#": "1",
"Owner": "Self",
"Ticker": "VTSAX",
"Asset Name": "Vanguard Total Stock Market Index Fund",
"Transaction Type": "Sale (Partial)",
"Transaction Date": "01/02/2018",
"Amount": "$250,001 - $500,000",
"Comments": "n/a"
}
]
}
],
"transactions": [
{
"source_part": "Part 4b. Transactions",
"source_row_number": "1",
"transaction_date": "01/02/2018",
"owner": "Self",
"ticker": "VTSAX",
"asset_name": "Vanguard Total Stock Market Index Fund",
"transaction_type": "Sale (Partial)",
"amount": "$250,001 - $500,000",
"comment": "n/a"
}
],
"fetched_at": "2026-08-08T00:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/congress.reportResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | congress.ReportDetail | No | ||||
| data.body | string | No | Jane Doe timely requested an extension... | Body holds free-text paragraph content for report types that are a short prose notice rather than a Parts-table form -- currently only due_date_extension. Empty for Annual/PTR, which use Parts instead. | ||
| data.chamber | unknown | No | senate | |||
| data.fetched_at | string | No | 2026-08-08T00:00:00Z | |||
| data.filed_at | string | No | 05/15/2019 @ 8:11 AM | |||
| data.filer | string | No | The Honorable John A Barrasso (Barrasso, John) | |||
| data.parts | array | No | ||||
| data.parts[].answer | string | No | Yes | |||
| data.parts[].rows | array | No | ||||
| data.parts[].title | string | No | Part 3. Assets | |||
| data.report_id | string | No | cc198326-0f50-4f47-8b03-a5c6440f400f | |||
| data.report_type | string | No | annual | |||
| data.source_url | string | No | https://efdsearch.senate.gov/search/view/annual/cc198326-0f50-4f47-8b03-a5c6440f400f/ | |||
| data.title | string | No | Annual Report for Calendar 2018 | |||
| data.transactions | array | No | ||||
| data.transactions[].amount | string | No | $15,001 - $50,000 | |||
| data.transactions[].asset_name | string | No | Bank of America | |||
| data.transactions[].asset_type | string | No | Corporate Bond | |||
| data.transactions[].comment | string | No | -- | |||
| data.transactions[].owner | string | No | Spouse | |||
| data.transactions[].source_part | string | No | Transactions | |||
| data.transactions[].source_row_number | string | No | 5 | |||
| data.transactions[].ticker | string | No | RPM | |||
| data.transactions[].transaction_date | string | No | 12/19/2018 | |||
| data.transactions[].transaction_type | string | No | Purchase | |||
| msg | string | No | OK |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/congress/report" \
-H "x-api-key: $CRAWLORA_API_KEY"Crawlora is designed for responsible structured public web data workflows. Customers are responsible for using Crawlora in compliance with applicable laws, third-party rights, target-platform rules, and Crawlora terms.
Read Crawlora terms