The PTR Form: Anatomy of a Congressional Trade Disclosure
The Periodic Transaction Report is the primary document that reveals what members of Congress are buying and selling. When you see a headline about a senator trading a stock, the PTR is the source document behind the story. Understanding how to read one is the foundation for analyzing congressional trading data.
Each PTR contains a set of standardized fields, though the formatting varies between the House and Senate. Here is what each field means:
- Filer — the name of the member of Congress filing the report. This is the member themselves, even when the trade was executed by a spouse or dependent child.
- Asset — a description of the security traded. Ideally, this includes the company name and ticker symbol (e.g., “Apple Inc. (AAPL)”). In practice, descriptions vary widely in quality and specificity.
- Transaction Type — coded as P (Purchase), S (Sale, full), S-P (Sale, partial), or E (Exchange). Some filings use additional codes for options or other derivatives.
- Transaction Date — the date the trade was actually executed. This is different from the filing date (when the PTR was submitted) and the notification date (when the member learned of the trade).
- Notification Date — the date the member was notified of the transaction. For personally directed trades, this is typically the same as the transaction date. For managed accounts or spousal trades, it may be later.
- Amount — the dollar value of the transaction, reported in one of the standardized ranges (e.g., $1,001–$15,000, $50,001–$100,000).
- Owner — identifies who actually executed the trade: the member, their spouse (SP), a dependent child (DC), or a joint account (JT).
For a deeper understanding of what types of transactions require PTR filing and what is exempt, see our guide to congressional disclosure requirements.
Finding Filings: House Clerk vs. Senate EFDS
One of the most frustrating aspects of congressional financial disclosure is that the House and Senate maintain completely separate filing systems with different interfaces, formats, and search capabilities. There is no unified federal database of congressional trades.
House filings are available through the Office of the Clerk at disclosures.house.gov. The House system allows you to search by member name and filing year. Results are returned as PDF documents — scanned images of the actual filed forms. Some are electronically generated and therefore machine-readable. Others are handwritten and must be read manually. The House system does not provide structured data; you get the raw document and must extract the information yourself.
Senate filings are available through the Electronic Financial Disclosure System (EFDS) at efdsearch.senate.gov. The Senate system is somewhat more modern, with a search interface that allows filtering by senator name, report type, and date range. Senate filings are generally available as both PDF documents and, in some cases, structured data. However, the search functionality can be inconsistent, and older filings may be available only as scanned documents.
The lack of a unified system creates real obstacles for anyone trying to conduct comprehensive analysis of congressional trading. Comparing a senator’s trades to a representative’s requires navigating two different websites, two different search interfaces, and two different document formats. This fragmentation is one of the key problems that CongressFlow solves by aggregating and normalizing data from both sources into a single searchable trades database.
Decoding Transaction Types and Codes
The transaction type field on a PTR seems straightforward — purchases and sales — but there are important nuances:
- P (Purchase) — the member (or their spouse/child) bought the security. This is a new position or an addition to an existing holding.
- S (Sale, Full) — the entire position in the security was sold. The member no longer holds any shares of this stock.
- S (Partial) or S-P — some but not all of the position was sold. The member still holds shares but reduced their position. The distinction between full and partial sales is important because a full sale may signal a stronger negative view than a partial trim.
- E (Exchange) — the security was exchanged, typically in a merger, acquisition, or corporate restructuring. This may not represent a deliberate investment decision by the member.
Some filings include additional codes or descriptions for options trades, bond transactions, or other non-equity securities. These are less standardized and require more careful interpretation. An options trade described as “Call — AAPL” does not tell you the strike price, expiration date, or number of contracts — all crucial details for understanding the trade’s significance.
One common source of confusion is the treatment of automatic transactions. Some members participate in dividend reinvestment plans (DRIPs) or have managed accounts that execute trades automatically. These transactions still require PTR filing if they exceed $1,000, but they may not represent deliberate investment decisions. The PTR form does not clearly distinguish between personally directed trades and automatic or advisor-directed trades, though the notification date field can sometimes provide a clue.
Common Gotchas and Data Quality Issues
Anyone who has spent time reading raw congressional disclosures encounters recurring data quality problems that make analysis challenging:
Inconsistent asset descriptions are the most common issue. There is no requirement to use ticker symbols, and many filers describe securities using only company names — which may be abbreviated, misspelled, or use outdated names. “Meta” might appear as “Facebook,” “Meta Platforms,” or “FB” depending on when the filing was made. Bonds may be described simply as “corporate bond” without identifying the issuer.
Handwritten filings remain a problem, particularly for older House disclosures. Illegible handwriting can make it impossible to determine which stock was traded, what the amount range is, or even the transaction date. While electronic filing has become more common, it is not universally required.
Amended filings add another layer of complexity. Members can amend previously filed PTRs to correct errors, add omitted transactions, or change reported details. The original filing and the amendment may both appear in search results, creating the potential for double-counting or confusion about which version is authoritative.
Dollar range ambiguity means that two trades reported in the same range — say, $100,001–$250,000 — could differ by a factor of 2.5. Aggregating dollar amounts across multiple trades requires working with ranges, not exact figures, which introduces significant uncertainty into any portfolio-level analysis.
Filing date vs. transaction date confusion is common. The filing date is when the PTR was submitted to the Clerk or Secretary of the Senate. The transaction date is when the trade was actually executed. These can differ by up to 45 days (or more for late filings). When media outlets report that a member “disclosed a trade today,” the trade itself may have occurred weeks or months earlier.
How CongressFlow Parses and Normalizes Disclosure Data
The raw disclosure data from the House Clerk and Senate EFDS is valuable but messy. CongressFlow processes this data through several steps to make it useful for analysis:
- Aggregation — pulling filings from both the House and Senate systems into a single database, eliminating the need to search two separate websites
- Ticker resolution — matching free-text asset descriptions to standardized ticker symbols using a combination of exact matching, fuzzy matching, and manual review for ambiguous cases
- Deduplication — identifying and handling amended filings so that each trade appears only once with the most current information
- Date normalization — distinguishing between transaction dates, notification dates, and filing dates and using the transaction date as the primary temporal marker
- Member matching — linking filings to specific members across name variations, chamber changes, and other inconsistencies in the raw data
The result is a clean, searchable dataset that allows users to filter by member, ticker, date range, transaction type, and chamber. While no parsing process is perfect — and some raw filings are genuinely ambiguous — the normalization makes it possible to identify patterns, compare members, and track sector-level trends that would be nearly impossible to spot from the raw filings alone.
To see the parsed data in action, explore the trades page on CongressFlow. For background on the legal framework that requires these disclosures, see our overview of how Congress trades stocks.
Tips for Analyzing Raw Disclosures Yourself
If you want to go directly to the source and analyze raw filings, here are practical tips based on the common patterns and pitfalls:
- Always check the transaction date, not just the filing date. The trade may have occurred weeks before the disclosure. Context about what was happening legislatively on the transaction date is more relevant than what was happening when the PTR was filed.
- Look at the owner field carefully. Spousal trades (SP) are subject to different accountability dynamics than the member’s own trades. Aggregating member and spousal trades without noting the distinction can obscure important patterns.
- Compare against committee assignments. A trade by a Banking Committee member in a bank stock carries different implications than the same trade by a member with no financial sector oversight. Committee assignment data is available from Congress.gov.
- Watch for clusters. A single trade in isolation may mean nothing. Multiple members buying the same stock in the same week — especially members on relevant committees — is a much stronger signal. Cluster patterns are easier to spot in aggregated data than in individual filings.
- Be cautious with dollar ranges. When calculating the “value” of a member’s trades, using the midpoint of each range is a reasonable approximation, but acknowledge the uncertainty. A member with three trades in the $50,001–$100,000 range could have traded anywhere from $150,003 to $300,000.