Get a fund's 13F portfolio holdings by CIK
Pull an institutional manager's 13F holdings for a quarter, aggregate by CUSIP and compute portfolio weights, using Berkshire Hathaway as the example.
Institutional investment managers with more than $100 million in qualifying securities file Form 13F-HR every quarter, listing their US equity positions. /v1/form-13f/holdings returns the information table as rows.
Berkshire Hathaway, quarter ended June 30, 2026
Berkshire's CIK is 1067983. The period parameter takes the report date as MM-DD-YYYY.
import os
import requests
BASE = "https://secfeedapi.com"
HEADERS = {"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"}
# Berkshire Hathaway's 13F holdings for the quarter ended June 30, 2026
r = requests.get(f"{BASE}/v1/form-13f/holdings", params={"cik": 1067983, "period": "06-30-2026"}, headers=HEADERS, timeout=120)
r.raise_for_status()
rows = r.json()
print(len(rows), "rows, filed", rows[0]["filed"], "by", rows[0]["filer"])
# one issuer can appear on several rows (different managers), so sum by CUSIP
pos = {}
for h in rows:
p = pos.setdefault(h["cusip"], {"issuer": h["issuer"], "value": 0, "shares": 0})
p["value"] += h["value"] or 0
p["shares"] += h["shares"] or 0
total = sum(p["value"] for p in pos.values())
print(len(pos), "distinct positions, total value ${:,.0f}".format(total))
for cusip, p in sorted(pos.items(), key=lambda kv: -kv[1]["value"])[:10]:
print(f"{p['issuer'][:28]:28} {cusip} ${p['value']:>16,.0f} {p['value'] / total:6.1%}")
Output:
89 rows, filed 2026-08-14 by Berkshire Hathaway Inc
29 distinct positions, total value $299,253,556,246
APPLE INC 037833100 $ 65,950,296,923 22.0%
AMERICAN EXPRESS CO 025816109 $ 51,282,319,275 17.1%
COCA COLA CO 191216100 $ 32,508,000,000 10.9%
ALPHABET INC 02079K305 $ 28,157,599,351 9.4%
BANK OF AMER CORP 060505104 $ 27,543,790,975 9.2%
CHEVRON CORPORATION 166764100 $ 13,986,141,890 4.7%
OCCIDENTAL PETE CORP 674599105 $ 12,868,205,304 4.3%
CHUBB LIMITED H1467J104 $ 11,670,066,615 3.9%
MOODYS CORP 615369105 $ 11,173,435,852 3.7%
ALPHABET INC 02079K107 $ 9,606,489,032 3.2%
Why aggregate by CUSIP
A 13F information table can list the same security on several rows, one for each combination of investment discretion and other managers. Berkshire reports positions held by different subsidiaries on separate rows, so 89 rows collapse to 29 distinct positions. Alphabet appears twice because Class A and Class C shares have different CUSIPs.
Row fields
| Field | Meaning |
|---|---|
issuer, title, cusip | The security |
value | Market value in dollars at quarter end |
shares, sh_prn | Number of shares (SH) or principal amount (PRN) |
put_call | Set when the row is an option position |
discretion, other_managers | Investment discretion and the other managers involved |
vote_sole, vote_shared, vote_none | Voting authority |
period, filed | Report period and filing date |
Quarter over quarter changes
Fetch two periods and compare shares by CUSIP to find new positions, exits, increases and decreases. 13F filings are due 45 days after quarter end, so the June quarter arrives by mid August.
Things 13F does not show
Short positions, most non US securities, cash and bonds other than convertibles are not reported. Managers can also request confidential treatment for some positions.