Nonprofit Explorer

I made ProPublica's IRS 990 database easier to use and maintain

Thu 03 October 2019 ~ Brandon Roberts

Nonprofit Explorer is a news application, created by Mike Tigas in 2013 and extended by several members of ProPublica's news apps team over the years. It provides searchable access to IRS Form 990s - the basic filing describing a nonprofit's financial activities like income and expenditures in a year. In the past, it's been used to identify some of America's Worst Charities and investigate the vast Trump business empire.

The IRS receives 990 filings in XML format, which is good for computers, but bad for humans trying to read them. 990s are split into sections known as schedules - Forms 990A through R. A nonprofit can file anywhere from a couple to over ten schedules with their 990.

Nonprofit Explorer does a few things:

  • It parses the 990 XML data, provided by the IRS, and turns it into a browsable database organized by state, category and revenue.
  • It provides full-text search of 990 filings. This can be used to find the names of members or relationships between businesses and nonprofits.
  • It allows users to view the 990 and its schedules.

The IRS publishes XSLT templates to help turn XML data into viewable documents. XSLT is a pretty oldschool templating language, but it's honestly a lot more powerful than I originally thought. By taking the XSLT and applying it to a nonprofit's 990 XML data, you get back a bunch of HTML documents styled how you'd expect IRS forms to look. They're also searchable, so doing a control-f/cmd-f on the page and searching works. But since Form 990 is made up of a bunch of schedules, searching the entire filing for a year is annoying. You have to load and search each document individually.

After my work on Collaborate, I consulted for ProPublica to update and extend Nonprofit Explorer. A big part of what I did was build a single-page Form 990 viewer. It gathers all the schedules for a given Form 990, renders and then prints them to a single webpage. I also improved the workflow for updating Nonprofit Explorer when the IRS releases new data and cleaned up the Ruby on Rails code.

Nonprofit Explorer is here on GitHub