Integrations
Data Partners
Allocator Intelligence
International
Alternative Channels
Market Intelligence
Investment Firms
Professional Services
Technology
Data sourced from Dakota Marketplace, the global LP and GP intelligence platform trusted by thousands of investment professionals. Learn More | Book a Demo
13F data is public. Any manager with $100 million or more in Section 13(f) securities must file within 45 days of each quarter end, and every filing is available on EDGAR. Building an API on top of it is possible. Building one you can trust is a different job.
The filings are messy, and there are a lot of them. The SEC’s Official List of 13(f) securities has more than 17,500 names and changes every quarter, and every filer runs on its own timeline.
We built our own 13F pipeline at Dakota. Below are the eight steps it takes, in order, and the places where each one breaks.
EDGAR gives you every filing, on its terms. The SEC caps automated requests at 10 per second and requires a User-Agent header that identifies you, as outlined in the SEC Fair Use Policy. Miss either one and your IP gets blocked, usually in the middle of a quarter-end load.
Next, you need the right filings. A 13F is not a single form type, and your crawler has to handle all of these:
Holdings live in the information table, and its layout has changed. Starting with filings for the period ending December 31, 2022, the SEC added a FIGI column after CUSIP, which shifted every following column one place to the right. Your parser needs a schema for each version and a rule for which filing gets which.
Older filings have no schema at all. The SEC’s structured data sets begin in 2013. Earlier filings are plain text, formatted however the filer’s software produced them that quarter.
One position is also often several rows. The same CUSIP can appear more than once in a single filing, split by other manager, investment discretion, put or call, or voting authority. Your API has to decide when to combine those rows and when to keep them separate.
Filers get this wrong too. One manager disclosed in an amendment that its own spreadsheet counted only the first instance of each CUSIP for all four quarters of 2022.
Title of class is free text entered by the filer, and nothing validates it. The same common share can appear as COM, COMMON STOCK, COM NEW or CL A, depending on who prepared the filing and what their software defaults to.
We learned this firsthand. Our first filter kept only holdings where the title of class read ETF, CEF or BDC. In a December 2025 test pull, 65,821 holdings came in over 19 days, and 2,358 passed the filter.
When we spot-checked one ETF, we had no holders for it at all. Its filings were labeled COM, so the filter excluded them. ETFs do not reliably identify themselves as ETFs.
We changed the rule to pull every title of class. That meant re-pulling history back to January 2024, and every re-pull costs money on the data feed. Before committing, we listed every title of class value filed in January 2026 and decided which to keep, so we only had to re-pull once.
This field matters because it tells you what the security is: common stock, preferred, ADR, exchange traded fund, convertible note or option. Each means something different to the person reading the data. A wrong classification puts a bond in a column of equities.
Pattern rules get you started. Then come the exceptions: unusual abbreviations, typos and instruments that fit two categories. Convertible notes report principal amount instead of shares. Options are reported by the underlying security, not the option itself. Your schema has to carry all of it without confusing the end user.
A filing gives you a CUSIP. It doesn’t give you a ticker, a clean issuer name or a security type, and your customers will ask for all three.
The SEC’s Official List of Section 13(f) securities is the free starting point. It’s updated every quarter and published as a PDF, so it has to be extracted before you can use it. Tickers are a separate problem. CUSIP data is licensed, so a ticker map usually means paying for a security master or building a workaround.
Identifiers also change over time. CUSIPs change when companies merge, spin off, restructure or rename themselves. A holding reported in 2019 and one reported today can be the same company under two CUSIPs, and tickers get reused by unrelated companies.
That means you need a point-in-time mapping, not a lookup table. You also need a plan for CUSIPs that fail the check digit or match nothing on the list. Someone has to decide what the API returns for those rows and review them every quarter.
For us, the scale was significant. By April 2026, we had pulled 27,753,792 holdings back to January 2024, excluding common stock. Of those, 7,840,956 pointed to a CUSIP we had no record for, which meant creating 48,683 unique securities before those holdings had anywhere to land.
For the backlog, we used the free OpenFIGI API to look up ticker, asset class, product structure, geography and sector by CUSIP. Of 46,000 records, it filled in 19,714, about 43 percent. The rest returned no ticker and had to be resolved another way.
Dakota has already done this work: 48,683 new securities created, 27 million+ holdings mapped, and every filer matched to a real firm and the people who run it. Skip the pipeline and get Dakota’s holding data cleaned, classified and tied to decision-makers. Book a demo of Dakota Marketplace.
Until January 3, 2023, filers reported value rounded to the nearest thousand dollars. After that, the SEC required the nearest dollar. A holding listed at 1,565,000 is either $1.565 billion or $1.565 million, depending on the filing.
Not every filer switched on time. One manager disclosed in an amendment that it didn’t make the change from the fourth quarter of 2022 through the first quarter of 2025. That’s more than two years of filings with values off by a factor of 1,000.
The standard check is to divide value by shares and compare the result to the security’s quarter-end price. A result off by exactly 1,000x is a units error. That check depends on a clean share count, a clean CUSIP map and a historical price file, and each of those is its own project.
You can also total the rows and compare them to the value on the filing’s summary page. A mismatch tells you something is wrong, but not always whether the problem is your parser or the filing.
Then you have to make a judgment call. If you correct a filer’s number, your API no longer matches the public record. If you don’t, your customer sees a position that’s wrong by three orders of magnitude. Either way, you own the decision.
A quarter is never closed. Amendments can arrive weeks or months after the original, and the cover page says which kind each one is. A restatement replaces the earlier report, while the other kind adds new holdings to it. Your pipeline needs to handle both and keep every version, because some customers want holdings as originally filed and others want the latest.
Confidential treatment creates gaps. Filers can request that certain positions be kept out of the public filing, and since the SEC’s 2023 changes, those requests must be filed electronically through EDGAR. The result is a quarter that looks complete but isn’t.
Shared reporting raises a further question: whose holdings are these? Some managers report on behalf of other managers. Some file a notice stating their holdings are reported elsewhere. Some file a combination report that does both.
Answering “what does this firm own” means following those relationships and assigning each position to the right firm. Since the 2023 changes, filings can include a CRD number and an SEC file number when the filer has them. That helps, but it’s optional.
A 13F is filed by an entity with an EDGAR CIK and a 13F file number, and neither one is a firm. Filers include investment advisers, banks, insurance companies and broker-dealers, and a single organization can file under more than one name.
The filing shows what a firm owns. It doesn’t show who to call. For an investment firm using 13F data to find its next allocator, the real questions are who the firm is, how big it is and who makes the decision. Answering them means matching each filer to a registered adviser, its Form ADV, a website and the people who run it.
Name matching is the slowest part. The same firm appears as Smith Capital LLC in one source and Smith Capital Management, LLC in another. Fuzzy matching produces candidates, but a person still has to confirm the ones that matter.
The CIK is a cleaner key, but it’s only as good as the records it’s attached to. As of March 4, 2026, we had 2,015,153 holdings in the system, and 960,036 of them, about 48 percent, matched no account because we had no CIK on file for the filer. In one case, the firm was in Dakota Marketplace and the ticker was in our data, but none of that firm’s holdings appeared. The firm record was missing its SEC CIK. The fix was one field, multiplied across every firm.
We built logic that automatically attaches orphaned holdings once a CIK or CUSIP record exists. It closes gaps as records are added, but it doesn’t identify which records are still missing.
There’s also no answer key. Early on, I asked the team how we would know the pipeline was working without knowing every 13F investment in existence. It can’t be checked by hand, so we spot-check against outside sources. In March, a public tracker showed 51 investors in one small ETF, and we had 6. That gap sent us back into the matching logic.
This is where a data project becomes a data operation. The code isn’t the hard part. The hard part is the ongoing review of matches as firms rename, merge and spin off.
With the data in place, you can build the API, and you still have design decisions to make. Will customers query by filer, by security or by quarter? Do they see the latest version of a filing or every version? Can they see a holding as it stood on a specific date, before an amendment changed it?
Then comes maintenance, and the same work returns every quarter:
Small product decisions also have outsized effects:
Keep in mind what a 13F does and doesn’t cover. It shows long positions only in Section 13(f) securities at quarter end. It doesn’t show shorts, and it arrives up to 45 days after the fact. Even a flawless API is a snapshot, and your documentation should say so.
For a short list of filers and a data engineer with available time, building your own is reasonable.
The math changes as the scope grows. Most teams need every filer, with history, each tied to a real firm, a Form ADV and the people who run it. They need it current every quarter and reliable enough to put in front of a client.
13F data also goes stale every quarter. The full pipeline has to run again with new filers, new securities and new amendments. Building it once is a project. Keeping it current takes a team.
A simple test: write a name next to each of the eight steps above. If no one owns title of class cleanup, the CUSIP map, the units check and the filer matching, that’s the real cost of the project. It isn’t the code. It’s the people who keep the code accurate.
That’s the work Dakota does every quarter so our customers don’t have to. Clean files are available through our API, or you can work with the data directly in Dakota Marketplace.
Dakota Marketplace holds 2,621,044 13F filing investments, including 938,122 ETF holdings, as of September 25, 2026, alongside [DAKOTA: X accounts / Y contacts for RIAs and other 13F filers]. Filter by metro area, AUM, 13F holdings or contact title to see who owns what, tied to the people behind each filing.
If you want the data without building the pipeline, book a demo of Dakota Marketplace.
Written By: Patrick Tighe, Head of Product
How to Build Your Own 13F API (and What It Actually Takes)
November 02, 2026
How to Find Who Owns ETFs Like Yours: Introducing Dakota’s ETF Peer Tracker and ETF Wallet
November 02, 2026
The Top 10 Municipal Bond ETFs Held by RIAs
October 30, 2026
Top 10 ETF Databases in 2026
October 29, 2026
Active vs. Passive ETFs: What's the Difference?
October 29, 2026
925 West Lancaster Ave
Suite 220
Bryn Mawr, PA 19010
Tel: (610) 642-1481
© Dakota 2026 | Terms of Use | Privacy Policy