Probably almost everybody already knows that Form Type 4 (Ownership form) is the most frequent SEC filing type. But what about the 2nd and 3rd most frequent filing types? Annual- and quarterly reports cannot be so frequent, right? So let’s find out and use some nice Javascript to do so.

1. Read the filing index

First we need to read a large bunch of data from the filing index. I am not going to cover here the details of downloading the filing index data, because it is described here at the https://www.sec.gov homepage. Instead let’s assume we have the full filing index files for Q3, Q4, Q1 and Q2 downloaded and saved as files like this:

  • master_2016_Q3.idx
  • master_2016_Q4.idx
  • master_2017_Q1.idx
  • master_2017_Q2.idx

To illustrate and help the further understanding, here is an example of what such a filing index files looks like:

1
2
3
4
5
6
7
8
9
CIK|Company Name|Form Type|Date Filed|Filename
--------------------------------------------------------------------------------
1000032|BINCH JAMES G|4|2016-09-06|edgar/data/1000032/0001209191-16-140125.txt
1000045|NICHOLAS FINANCIAL INC|10-Q|2016-08-09|edgar/data/1000045/0001193125-16-676314.txt
1000045|NICHOLAS FINANCIAL INC|3|2016-07-06|edgar/data/1000045/0001678638-16-000001.txt
1000045|NICHOLAS FINANCIAL INC|8-K|2016-07-20|edgar/data/1000045/0001193125-16-652333.txt
1000045|NICHOLAS FINANCIAL INC|S-8|2016-08-12|edgar/data/1000045/0001193125-16-680845.txt
1000097|KINGDON CAPITAL MANAGEMENT, L.L.C.|13F-HR|2016-08-15|edgar/data/1000097/0000919574-16-015001.txt
1000177|NORDIC AMERICAN TANKERS Ltd|424B2|2016-09-26|edgar/data/1000177/0001193125-16-720065.txt

Then we use the following code to read and store all the filings listed in these filings index files:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let fs = require('fs');
let filings = [];
const readFilingIndex = (filename) =>
fs.readFileSync(filename,'utf8')
.split("\n") //convert into lines
.slice(11) //remove 11 header lines
.slice(0, -1); //remove last line (empty)
filings = filings.concat(readFilingIndex('./master_2016_Q3.idx'));
filings = filings.concat(readFilingIndex('./master_2016_Q4.idx'));
filings = filings.concat(readFilingIndex('./master_2017_Q1.idx'));
filings = filings.concat(readFilingIndex('./master_2017_Q2.idx'));

The filings array is the source of data we are going to use for the further analysis.

2. Build a histogram data structure for the different filing form types

The histogram is stored in an object. The property names are the filing form types and the property value represent the count of this form type in the given quarters. Each entry from the filings array gets analyzed by a little function:

1
2
3
4
5
6
7
8
9
10
11
12
let formTypeDistribution = {};
filings.forEach((filing) => {
let fields = filing.split('|');
//CIK|Company Name|Form Type|Date Filed|Filename
let formType = fields[2];
formTypeDistribution[formType] = formTypeDistribution[formType] || 0;
formTypeDistribution[formType]++;
});

Pretty straight forward.

3. Display the result

I keep this super simple, but it is sufficient to get a good overview of how often the different filing form types occur. I am using ascii-histogram which you can find on npm. Important is that you turn the sort feature on to get a properly sorted histogram.

1
2
3
4
let hist = require('ascii-histogram');
console.log(formTypeDistribution);
console.log(hist(formTypeDistribution, {sort: true}));

And finally here is the actual result for the time frame Q3 2016 to Q2 2017:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
4 | ############################################################ | 384662
8-K | ########### | 71810
SC 13G/A | ##### | 33111
424B2 | ##### | 32881
3 | ##### | 30323
497K | #### | 24396
D | #### | 23969
497 | ### | 20929
6-K | ### | 20892
10-Q | ### | 20274
13F-HR | ### | 17381
D/A | ### | 17221
SC 13G | ## | 11660
CORRESP | ## | 11067
424B3 | ## | 9924
FWP | # | 9179
485BPOS | # | 8825
4/A | # | 8618
SC 13D/A | # | 8451

And since it is so easy, I am not just showing the top 10, but the top 19!

4. Interpretation of the result

I leave this up to you for now. Maybe I am going to write some of my thoughts on this later.

See also my other post about some general statistics about SEC filings:
Just some statistics about SEC filings