About FARA Tracker

๐ŸŽง How This Started

Yesterday I listened to The Free Press podcast about foreign influence in America. The hosts talked about how reporters had to manually dig through FARA documents to trace the money. Sounded like horrible drudgery.

I checked out fara.gov to see what they were dealing with. A classic government website with thousands of scanned PDFs with terrible navigation. Absolutely unusable.

So I decided to DOGE it. I wanted to see a dashboard of foreign agent registrations and spending per country. This tool aggregates Foreign Agent Registration Act (FARA) documentation processes them with AI and builds that dashboard.

Inspired by: "How Qatar Bought America" - The Free Press

โšก Building It

This whole thing was vibecoded in Cursor, from mix phx.new, schema, PDF and OpenAI processing, dashboard, domain name, and deployment in under 5 hours. I fed it some example PDFs, hooked it up to OpenAI, and wrote a prompt to pull out the important stuff: agent names, who they work for, how much they're getting paid.

Processed 8,000+ documents from 2023-2025. OpenAI bill so far: $3.10. Three bucks to automatically parse years of government paperwork that would take humans forever.

The goal was to see the big picture: which countries are spending the most under FARA?

The data is pretty interesting. But the fact that it's 2025 and I could build this in an afternoon and deploy it was even cooler.

๐Ÿš€ The Vibe

I know LOTS of developers way, way better than I am. But watching this unfold in a couple hours instead of days felt pretty superhuman.

I enjoyed some vibecoding before. I thought it was a useful assistant but I still wanted to control every line of code.

This is still just a toy. Production code is a whole different ballgame.

But this is changing insanely quickly. I'm fine with the vibes.

๐Ÿค– AI Workflow

  1. 1. Document Discovery: Scrape fara.gov for new PDF filings
  2. 2. Content Filtering: Skip marketing materials, focus on substantive reports
  3. 3. AI Processing: Send PDFs to OpenAI with structured prompts
  4. 4. Data Extraction: Extract agent names, foreign principals, compensation amounts
  5. 5. Database Storage: Normalize and store in PostgreSQL with country aggregation
  6. 6. Dashboard: Show spending by country

๐Ÿ“Š Document Types

โœ… Processed Documents

  • โ€ข Supplemental Statements (semi-annual activity reports)
  • โ€ข Exhibit AB (compensation agreements)
  • โ€ข Short Forms (brief activity filings)
  • โ€ข Amendments (registration changes)
  • โ€ข Registration Statements (initial filings)

โŒ Filtered Out

  • โ€ข Informational Materials (marketing/PR content)
  • โ€ข Dissemination Reports (publication tracking)
  • โ€ข Conflict of Interest documents

๐Ÿ—๏ธ Technical Architecture

  • Backend: Elixir/Phoenix with Ecto ORM
  • Frontend: Phoenix LiveView with Tailwind CSS
  • Database: PostgreSQL with aggregation views
  • AI Integration: OpenAI API for document processing
  • HTTP Client: Req library for document downloads
  • Data Processing: NimbleCSV for parsing FARA document registry
  • Development: Built entirely with Cursor AI coding assistant

๐Ÿ“š Data Sources

All data comes from official U.S. Department of Justice sources:

  • FARA eFiling Database: Official DOJ foreign agent registrations
  • Document Registry: Complete CSV export with direct PDF URLs
  • Legal Filings: Comprehensive collection of mandatory FARA submissions

Official source: FARA eFiling Website - U.S. Department of Justice