The "Congress Tracker" Engine
Copy the trades of power—and build an audience doing it.
The Play: Politicians file financial disclosures with 45-day delays. By the time the public sees them, the trades are old news. This system scrapes, parses, and delivers the top 10 most notable trades daily—turning regulatory filings into a signal stream your audience actually wants.
Why This Works: STOCK Act disclosures are public but buried. The data is scattered across multiple sources, filed in inconsistent formats, and nearly impossible to parse at scale. Anyone who surfaces this information cleanly becomes the trusted source. And everyone wants to know what Nancy Pelosi bought.
The Implementation Stack:
Category | Tool | Notes |
|---|---|---|
Scraping | Puppeteer + Browserbase | Handles CAPTCHA-protected gov sites |
Parsing | GPT-4 via API | Extracts structured trade data from PDFs |
Storage | Supabase | PostgreSQL with real-time subscriptions |
Delivery | Beehiiv + GPT | Auto-generates daily briefings |
Extension | Chrome MV3 | Surfaces trades in real-time while browsing |
Step 1: Browserbase (The Scraper)
// scrape_disclosures.js
const { chromium } = require('playwright');
async function scrapeDisclosures() {
const browser = await chromium.connectOverCDP(process.env.BROWSERBASE_URL);
const page = await browser.newPage();
await page.goto('https://disclosures-clerk.house.gov/');
const filings = await page.$$eval('.filing-row', rows =>
rows.map(r => ({
name: r.querySelector('.name').innerText,
date: r.querySelector('.date').innerText,
pdf_url: r.querySelector('a').href
}))
);
return filings;
}
Step 2: GPT-4 (The Parser)
// parse_disclosure.js
const prompt = `Extract all stock trades from this disclosure:
- Ticker symbol
- Transaction type (buy/sell)
- Approximate amount range
- Transaction date
Return as JSON array.`;
const trades = await openai.chat.completions.create({
model: "gpt-4",
messages: [{ role: "user", content: prompt + pdfText }],
response_format: { type: "json_object" }
});
Step 3: Supabase (The Database)
CREATE TABLE trades (
id SERIAL PRIMARY KEY,
politician TEXT,
ticker TEXT,
type TEXT,
amount_range TEXT,
trade_date DATE,
disclosure_date DATE,
created_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_trades_ticker ON trades(ticker);
CREATE INDEX idx_trades_politician ON trades(politician);
Step 4: Daily Signal Generation
// generate_daily.js
const topTrades = await supabase
.from('trades')
.select('*')
.gte('disclosure_date', yesterday)
.order('amount_range', { ascending: false })
.limit(10);
const newsletter = await openai.chat.completions.create({
model: "gpt-4",
messages: [{
role: "user",
content: `Write a 300-word briefing on these trades: ${JSON.stringify(topTrades)}`
}]
});
Step 5: Chrome Extension (The Surface)
Build a MV3 extension that highlights any ticker on any webpage with politician trading activity. When users see $NVDA mentioned, they instantly see: "Rep. X bought $500K–$1M on Jan 15."
The Result:
Audience growth: Congressional trading content gets 10x engagement versus standard market analysis
Trust building: You become the transparency source—not just another finance commentator
Monetisation: Premium tiers for real-time alerts, API access for quant funds, sponsorship from fintech apps
One cold-call PDF. One automated pipeline. One audience that grows itself.
