Parser for electronically filed Federal Election Commission report files
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



Parsing a loading electronically filed fundraising reports from the Federal Election Commission. FECHell uses format definition files from (


# remove old versions from github installs

sudo gem uninstall offensivepolitics-fechell

# install new version hosted @ gemcutter / sudo gem install fechell


require 'rubygems' require 'fechell' require 'fechell/forms.rb' require 'open-uri'

# convenience function to download a file from a URL and save it locally

def savefile(filename,url),“w”) do |file| file.puts open(url).read end end

h =

# Grab the year-end fundraising reports by candidates for the 5th district of Virginia. This race was incredibly close and decided by less than 800 votes.

# fetch Goode for Congress F3, Year End 2008 savefile(“goode.fec”,“”)

# fetch Perriello for Congress F3, Year end 2008 savefile('perriello.fec',“”)

# extract the financial summary of each campaign. we want total receipts this period and cycle to date, total disbursements this period and cycle to date, # and the cash position at the beginning and end of this reporting period

# note we're using the new FECForm.form_for function that takes any version FECHell parameter hash and returns a full ruby object ['goode.fec','perriello.fec'].each do |filename| fec_version, original_form_type, form_type, values = h.header_lines(filename) next unless form_type == “F3” && fec_version.to_i >= 3 f = FECForm.schedule_for(form_type, fec_version, values) puts “For: #{f.committee_name}” puts “Total receipts this period: #{f.col_A_line_24}” puts “Total receipts cycle-to-date: #{f.col_B_line_16}” puts “Total disbursements this period: #{f.col_A_line_26}” puts “Total disbursements cycle-to-date: #{f.col_B_line_22}” puts “Cash-on-hand beginning of period: #{f.col_A_line_23}” puts “Cash-on-hand end of period: #{f.col_A_line_27}” puts “nn” end # From this output we see that Rep Goode outspent Perriello by more than a million dollars, but still lost his seat by 727 votes.

puts “===”

# fetch HuckPac F3X, Post General, 2008 savefile('huckpac.fec','') # extract disbursements (schedule B) made this period by HuckPAC with the expenditure purpose(key=“EXPENDITURE PURPOPOSE DESCRIPTION”) of “Payroll” # still using the previous hash syntax since the object model for F3X forms isn't done yet puts “TO,DATE,AMOUNT” h.process(“huckpac.fec”) do |v| schedule = v values = v

next if schedule != 'SB'

next if values['EXPENDITURE PURPOSE DESCRIP'] != 'Payroll'

puts “#{values['PAYEE FIRST NAME']} #{values['PAYEE LAST NAME']},#{values['EXPENDITURE DATE']},#{values['EXPENDITURE AMOUNT']}”


# From this we can see that HuckPAC keeps 5 full-time people on staff, including his daughter Sarah.


0.2.1 Updated CSV definitions for V8.0 of FECFile Removed contribution_code, expenditure_purpose_code from SA and SB respectively in 8.0 defs.

  Updated CSV definition for V7.0 of FECFile.
  Added tests for V7.0, except Schedule C/1 since nobody has filed an actual for yet!

  Massive speedup in form-type detection
  Dozens of changes to definition files 
  Several bug-fixes for early format 5.0 files
  Initial support for V3.0 files (circa early 2000)
  Added FEC version-independent Form classes that can transform a FECHell hash into an actual class
  Added monolithic unit test for every file version for the following schedules / forms: F3, SA, SB, SC, SC1

  Prepended "Column A" or "Column B" to forms F3,F3P,F3X,F3Z for all FEC DEF files to accommodate duplicate key names. 
  Added HDR records to all the FEC DEF files

Updated schedule identifier to allow HDR (header) lines to pass through system

  Added support for the FEC header line (schedule=HDR) to format files 5.0-6.4 

  Fixed version numbers in FECHell::Versions

  Fixed optional 'options' parameter to FECHell::process() call

  Added support for FEC file 6.4

  Removed extra files from distribution. 

  Added fastercsv gem as an install dependency

  Added support for version 6.3 FEC files


Add unit tests for Schedule C v2 (SC2)
Add Form class definition for missing form types (F1,F2,F3X,F3P)