Back to feed
michigan-campaign-finance.aporrett.chatgpt.site https://michigan-campaign-finance.aporrett.chatgpt.site/
Alex Porrett

Michigan Campaign Finance Explorer

Michigan Campaign Finance Explorer turns public Michigan campaign-finance records into a user-friendly, searchable research tool. It automatically collects and validates official filings, then lets users compare candidates, trace transactions, explore races on a map, and visualize how money moves between campaigns, PACs, donors, and vendors—all with links back to the original records. The current public system only allows you to look up records one at a time, and you have to know what you’re looking for. I built a tool called Filing Radar to make that process more useful. Every 20 minutes, it searches all filings using Python’s built-in `urllib.request`. It compares filing IDs with those saved during the previous check. If a filing is new, it downloads it; otherwise, it moves on. For each new download, a parser built with `pypdf` processes the PDF and sends the data to a local SQLite database. I was concerned about overloading the public website with requests, so I also built a circuit breaker and added a limit on requests per second. I also built another tool called Vendor Resolver. Campaigns often record the same vendors in slightly different ways, such as “Little Caesars” and “Little Caesar’s.” Vendor Resolver groups transactions that are likely associated with the same entity and assigns a confidence score. It then ranks the groups by impact so the most useful matches are easier to review manually. Together, these tools make the site more useful when I’m trying to determine which PACs are connected to particular campaigns. Step-by-step: 1. I searched all filings every 20 minutes with Python’s built-in `urllib.request`. 2. I compared the filing IDs with those saved during the previous check and downloaded only new filings. 3. I processed each new PDF with `pypdf` and stored the results in a local SQLite database. 4. I used a circuit breaker and a requests-per-second limit to avoid overloading the public website. 5. I grouped differently named vendors, such as “Little Caesars” and “Little Caesar’s,” and assigned confidence scores to likely matches. 6. I ranked those matches by impact so I could review the most useful ones manually. 7. I used the resulting data to identify connections between PACs and campaigns.

Industry

Tools used

0 comments

Read the Community guidelines

No comments yet. Be the first to weigh in.

Current rank #73 Upvotes 0