Home / Tutorials / Ownership & fund analysis
Ownership & fund analysis

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

FieldMeaning
issuer, title, cusipThe security
valueMarket value in dollars at quarter end
shares, sh_prnNumber of shares (SH) or principal amount (PRN)
put_callSet when the row is an option position
discretion, other_managersInvestment discretion and the other managers involved
vote_sole, vote_shared, vote_noneVoting authority
period, filedReport 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.

Next steps

More ownership & fund analysis tutorials

Run this tutorial with your own key

500 free API calls a month. Every example on this page works on the free plan.

Get free API key →