XOOMAR

Free 13F Fund Holdings API

Quarterly portfolios of 30 famous funds, parsed from SEC 13F-HR filings. Berkshire Hathaway, Bridgewater, Citadel, Pershing Square, Scion, and more, with position values, share counts, portfolio weights, and quarter-over-quarter changes.

Endpoints

GET
/api/markets/funds/{slug}e.g. berkshire-hathaway

Latest reported quarter for one fund: top 200 holdings by value. An unknown slug returns the full list of valid fund slugs.

GET
/api/markets/funds?ticker=AAPL

The tracked managers holding one ticker's shares at their latest 13F, largest position first: fund, quarter, shares, value, share of portfolio, change in shares. Puts and calls on it are in each fund's portfolio. Without ticker: the list of tracked funds (slug, name, manager, cik, url). Every row carries canonicalUrl, the fund's page on xoomar.com.

GET
/api/markets/funds/csv

Holdings across all funds and recent quarters as CSV, newest first (50k row cap).

Example

import requests

r = requests.get("https://xoomar.com/api/markets/funds/berkshire-hathaway")
data = r.json()["data"]
print(data["fund"]["name"], data["quarter"])
for h in data["holdings"][:5]:
    print(h["issuerName"], h["valueUsd"], h["pctOfPortfolio"])

Response shape

Every endpoint returns the same JSON envelope: { data, updatedAt, source, docs, license, attribution, meta }. In meta, source names who publishes the data and sourceAttribution is the credit line to show with it. The data field is an object with these fields:

FieldTypeDescription
fundobjectslug, name, manager, and SEC CIK of the fund
quarterstring (date) | nullReporting quarter end, e.g. 2026-03-31
holdingsarrayLines of the latest filing, largest value first (up to 200)
holdings[].issuerNamestringIssuer name as filed
holdings[].tickerstring | nullTicker for the CUSIP, where one is known
holdings[].cusipstring | nullCUSIP as filed
holdings[].putCallstring"Put" or "Call" for an option the manager holds, "" for the shares themselves
holdings[].valueUsdnumberValue in US dollars; for a put or call, the value of the shares it covers
holdings[].sharesnumber | nullShares or principal amount; for a put or call, the shares it covers
holdings[].pctOfPortfoliostring | nullWeight within the filing's total value
holdings[].changeSharesnumber | nullChange in shares vs the fund's prior quarter, per security and kind of line; equal to shares for a new position; null when the prior quarter is not on file

13F filings are due 45 days after quarter end, so the latest quarter reflects positions up to that lag. Only long US-listed positions are reportable on 13F; puts and calls the manager holds are lines of their own, marked in putCall.

Numeric fields typed string in the table carry exact decimals; parse them with your language's decimal type. No key needed to start: 10 requests a minute per IP without a key and 30 a minute with a free account key, with at least six months of history. A 429 response carries a Retry-After header in seconds. Credit XOOMAR with a link to the dataset page when you republish the data; the data terms are on the terms page.

A free account key raises the limit; send it in an X-API-Key header.

Frequently Asked Questions

Which funds are covered?
Thirty curated funds including Berkshire Hathaway, Bridgewater, Citadel, Renaissance, Pershing Square, Scion, Appaloosa, and Baupost. Request any unknown slug to get the full list.
How much history is available?
Five years of quarterly filings per fund. The JSON endpoint returns the latest quarter; the CSV export includes recent quarters across all funds.
Why is the data delayed?
13F filings are due up to 45 days after quarter end. That lag is set by the SEC and applies to every 13F product.
What are the rate limits?
10 requests a minute per IP without a key and 30 a minute with a free account key, with at least six months of history.

Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.