How to get 13F holdings as data

The SEC's 13F data sets are seven free tab-separated tables. What the join gets wrong — amendments, a value column that changed units in 2023, and option rows.

The SEC publishes every 13F since mid-2013 as quarterly zip files of seven tab-separated tables, free and keyless: join INFOTABLE to SUBMISSION on the accession number and filter on the period of report. The traps are in the join, not the download. Files are grouped by filing date, amendments either restate or add rows, VALUE switched from thousands to dollars on 3 January 2023, and option rows carry the underlying stock's CUSIP.

The short way

Download one quarterly zip from the SEC's Form 13F data sets page — no key, no account — and join two of the seven tables inside it:

import zipfile
import pandas as pd

z = zipfile.ZipFile("01mar2026-31may2026_form13f.zip")

def table(name, cols=None):
    return pd.read_csv(z.open(f"{name}.tsv"), sep="\t", dtype=str, usecols=cols)

sub = table("SUBMISSION")
info = table("INFOTABLE", ["ACCESSION_NUMBER", "CUSIP", "NAMEOFISSUER",
                           "VALUE", "SSHPRNAMT", "SSHPRNAMTTYPE", "PUTCALL"])

# a file holds whatever was FILED in its three months, for any period
q1 = sub[(sub.PERIODOFREPORT == "31-MAR-2026") & (sub.SUBMISSIONTYPE == "13F-HR")]

rows = info.merge(q1, on="ACCESSION_NUMBER")
rows["CUSIP"] = rows.CUSIP.str.upper()
rows["VALUE"] = rows.VALUE.astype(float)  # dollars since 3 Jan 2023
rows["SSHPRNAMT"] = rows.SSHPRNAMT.astype(float)

# option rows carry the underlying's CUSIP, so drop them before summing
stock = rows[rows.PUTCALL.isna() & (rows.SSHPRNAMTTYPE == "SH")]
held = stock.groupby(["CIK", "CUSIP"])[["SSHPRNAMT", "VALUE"]].sum()

Run against the March–May 2026 file, that is 8,741 original holdings reports for the first quarter of 2026 and 3.2 million information-table rows, which collapse to 2.3 million manager-and-CUSIP pairs. The collapse is the first thing worth knowing: a manager lists the same security on several lines when discretion or voting authority is split, so a row is not a position until you have summed it.

The tables are SUBMISSION (one row per filing, with the period of report), COVERPAGE (manager name, amendment flags, report type), INFOTABLE (the holdings) and four smaller ones for signatures, the summary page and other managers. All of them are tab-separated UTF-8 and all of them key on ACCESSION_NUMBER.

What the options are

The source, flattened. SEC EDGAR publishes the data sets above, extracted from the XML filings with nothing changed: the SEC's own description is information "as filed", amendments included, which "may contain redundancies, inconsistencies, and discrepancies relative to prior submissions". Coverage starts with XML submitted in May 2013. A new file lands after the last business day of February, May, August and November, each one roughly 80 to 100 MB zipped. This is the whole corpus for free, and every reconciliation on this page is yours to write.

Somebody else's parser, on your own machine. 13F.info is a free browser over the same filings, and the Rails application behind it — downloader, parser and front end — is MIT-licensed. Its pipeline pulls 13F data from EDGAR into PostgreSQL, which is a better starting point than the zip files if what you want is a database rather than a notebook. History starts in 2014, there is no documented API, and the code has not moved since August 2024.

History before 2013. Anything earlier was filed as free text, and only a vendor that parsed it has it. WhaleWisdom has parsed it to the first quarter of 2001 and serves it over a REST API with signed requests. A free registered key covers the trailing two years; the $300-a-year Standard plan unlocks earlier quarters for 50 funds and 50 stocks every 90 days, Pro at $500 raises that to 200 and 200, and only the contact-priced Enterprise tier is uncapped and adds nightly FTP files.

13F next to other disclosures. Quiver Quantitative sells 13F holdings as one REST dataset beside Form 4, congressional trades and lobbying, starting on its Trader tier at $75 a month. Financial Modeling Prep carries a 13F endpoint beside statements and prices, on its Ultimate tier at $149 a month billed annually. Either makes sense when holdings are one join in a larger model rather than the model. Read the licence before the feature list: both of Quiver's published tiers are marked non-commercial. The rest of the shelf is in insider, 13F and congressional trade trackers.

Where this breaks

A file is three months of filing, not one quarter of holdings. The zip named for March to May 2026 carries 11,761 submissions, and 985 of them report a period other than 31 March 2026 — 349 for the fourth quarter of 2025, and 354 for periods before 2024, the oldest of them March 2008. Late filings and amendments both. So a quarter is never finished in the file you first read it from. Assembling one period of report properly means filtering on PERIODOFREPORT across every file published after it, and re-running the job when a new one lands.

It arrives later than the 45 days. The filing deadline is 45 days after quarter end and most managers use all of it — 13F sets out why. The data set then waits for the end of its three-month window, so holdings as of 30 June reach the June-to-August file, which the SEC posts after the last business day of August. Polling EDGAR's filing index gets you each filing the day it is made; the flat file costs you another few weeks.

Amendments come in two kinds, and they need opposite handling. The SEC's instructions say a restatement resubmits the entire filing as corrected, while a new-holdings amendment includes only the securities being added. COVERPAGE.AMENDMENTTYPE says which: in the March–May 2026 file, 332 restatements and 109 new-holdings amendments. Union everything and every restated filing counts twice. Keep only the latest filing per manager and period and every new-holdings amendment wipes out the original it was meant to extend. The correct rule is latest restatement plus every new-holdings amendment filed after it.

VALUE changed units on 3 January 2023, and not every filer noticed. Until then managers rounded to the nearest thousand dollars and dropped the "000"; the SEC's June 2022 amendments switched the form to the nearest dollar for every report filed from that day. The SEC's FAQ is explicit that this follows the filing date, not the period: fourth-quarter 2022 reports are in dollars, and so is an amendment for a 2022 quarter filed in 2023. Any series crossing that date needs a thousandfold correction, keyed on FILING_DATE rather than PERIODOFREPORT. The rule did not end the errors either. The adopting release records a commenter calling inconsistent rounding one of the most common filing errors, and SEC staff observing data errors from it. In the first-quarter 2026 original filings, 6,005 reports hold Apple common stock; the median row implies about $254 a share, and 254 of those reports imply between 15 and 40 cents — still in thousands, three years on. Divide VALUE by SSHPRNAMT and compare it with a price before trusting either.

An option row carries the stock's CUSIP. The SEC's FAQ says most columns of an option entry refer to the underlying security, down to entering COM as the title of class and the underlying's CUSIP. What marks the row as an option is PUTCALL, set on 140,165 rows in that one file. Group by CUSIP without filtering it and calls and puts are added to the share count, which turns a hedge into a larger long. SSHPRNAMTTYPE is the other filter: PRN rows are principal amounts of debt, and adding them to a share count mixes dollars into shares.

The key is a CUSIP, typed by the manager. There is no ticker anywhere in the tables. The 2022 amendments let a filer add a share-class FIGI alongside the CUSIP, never instead of it, and in the March–May 2026 file 12% of information-table rows carry one. Even the CUSIP needs cleaning: 6,750 rows in that file are in lower case, which a join against any security master treats as a different identifier. Turning a CUSIP into a ticker is a separate dataset with its own licence, set out in CUSIP, ISIN and FIGI. And a ticker mapping taken today maps the past wrongly: a CUSIP that changed hands through a merger or a rename needs the point-in-time version.

A missing manager is not a missing position. A 13F Notice carries a cover page and no holdings, because another manager reports those securities; a Combination Report lists some and names who reports the rest. The March–May 2026 file holds 2,045 notices. A manager whose table comes back empty may simply be reported inside somebody else's, and OTHERMANAGER is the table that says whose. Confidential treatment can hold a position back for longer. When a request is denied or expires, the SEC's FAQ gives the manager six business days to file an amendment, marked as adding new holdings, for the period it was withheld from — which is one more reason a quarter is never finished, and one more reason the new-holdings rule above matters. COVERPAGE flags those filings in CONFDENIEDEXPIRED.

It covers long positions in Section 13(f) securities and nothing else. Shorts, cash, most non-US listings and anything off the SEC's Official List are absent, and the Official List itself is published as PDF and, from the fourth quarter of 2025, as text — not as a structured file you can join. Nothing a parser does recovers what the form never asked for.

If you outgrow this

When the quarterly file is too slow, stop reading the flat files and read the filings. EDGAR's own submissions index carries each 13F-HR the day it is filed, and How to get SEC filings as data covers that route and its rate limit. sec-api.io sells the same filings already parsed, with a websocket that pushes new ones, from $55 a month.

When you need the years before 2013 in bulk, that is WhaleWisdom's Enterprise tier, the only one with uncapped API access and nightly FTP files. It is contact-priced, so budget for a conversation rather than a number.

When the question is really about timing, a 13F is the wrong form. A Form 4 is due two business days after an insider's trade and a Schedule 13D five business days after the purchase that triggers it; when a trade shows up in the public record sets every deadline side by side.

When a person is going to read it rather than a program, the free browsers are the shorter path: Dataroma for 83 hand-picked value managers back to 2006, HedgeFollow for over 10,000 institutions with 13F, Form 4 and congressional filings on one page.

The tools that do this

In the order this page recommends trying them. Paid placement does not affect this order.

  1. SEC EDGAR

    Seven tab-separated tables per quarter since mid-2013, joined on accession number. Free and keyless, grouped by filing date, and nothing reconciled.

    Every US filing since 1994, free and keyless — the limit is ten requests a second.

    FreeFree tier

  2. 13F.info

    The same XML parsed into PostgreSQL by an MIT-licensed Rails app you can run yourself. From 2014, no API, and the code last moved in August 2024.

    Every 13F since 2014, free and account-free, from a Rails app you can run yourself.

    FreeFree tierOpen source

  3. WhaleWisdom

    Parsed back to the quarter ending March 2001 behind a signed REST API. Free reaches two years; history starts at $300 a year, 50 funds per 90 days.

    Institutional 13F holdings back to 2001, queryable from a signed REST API.

    $300/yrFree tier

  4. Quiver Quantitative

    13F as one REST dataset among a dozen disclosure feeds, from the $75-a-month Trader tier. Both published tiers forbid commercial use.

    US political and SEC disclosure data — congress, insiders, lobbying — over one REST API.

    $30/moFree tier

  5. Financial Modeling Prep

    A 13F endpoint beside statements and prices, for when the holdings are one input among several. Only on Ultimate, $149 a month billed annually.

    Financial statements, ratios and filings for 70,000+ securities across 60+ exchanges.

    $22/moFree tier

FAQ

Where do I download 13F holdings in bulk for free?

From the SEC's Form 13F data sets page. Each quarterly zip holds seven tab-separated tables flattened from the XML filings, keyed on accession number, with no account and no API key. Coverage starts with XML filed in May 2013. The files are grouped by the months in which filings were made, not by the quarter the holdings describe, so a complete quarter has to be assembled across several of them.

Is the 13F value column in dollars or thousands?

Both, depending on the filing date. Until the SEC's amendments took effect on 3 January 2023, managers rounded to the nearest thousand dollars and dropped the zeros; from then on, to the nearest dollar. Some filers still report in thousands — 254 of the 6,005 original first-quarter 2026 reports holding Apple imply between 15 and 40 cents a share — so check value divided by shares against a real price.

How do I handle a 13F amendment?

Read the amendment type on the cover page first. A restatement resubmits the whole filing as corrected and replaces the earlier version. A new-holdings amendment lists only the securities being added, including positions released from confidential treatment, and is added to what was already filed. Treating both the same way either double-counts restatements or deletes the originals that a new-holdings amendment extends.

Sources

  1. Form 13F Data Sets — U.S. Securities and Exchange Commission, read
  2. Form 13F Data Sets — readme — U.S. Securities and Exchange Commission, read
  3. Frequently Asked Questions About Form 13F — U.S. Securities and Exchange Commission, read
  4. Electronic Submission of Applications for Orders under the Advisers Act and the Investment Company Act, Confidential Treatment Requests for Filings on Form 13F, and Form ADV-NR; Amendments to Form 13F (87 FR 38943) — Securities and Exchange Commission, . The nearest-dollar rule it adopted is the one the SEC's current 13F FAQ and the data-set readme both state.

The catalogue next door

This page names a handful of cards. The rest of them are in Insider, 13F & Congressional Trade Trackers, each filled in against the same schema, with the fields to narrow it yourself.

Last updated . Corrected in place: this is a reference page, not a dated post.