Recipes
13F holdings change tracker
Pull a manager's institutional positions from their 13F and diff them across quarters.
13F holdings change tracker
Read what an institutional manager holds — position by position, with CUSIP, share count, and market value — and compare quarters to see what they bought and sold.
Prerequisites
- A Clous API key — get one free.
export CLOUS_API_KEY=clous_live_...
1. Find the manager
GET /v1/managers?q=Vanguardcurl -s "https://api.clous.ai/v1/managers?q=Vanguard" \
-H "Authorization: Bearer $CLOUS_API_KEY"2. Pull their holdings
Query /v1/holdings by manager (and optionally issuer, cusip, or min_value):
curl -s "https://api.clous.ai/v1/holdings?manager=Vanguard&min_value=1000000000&limit=20" \
-H "Authorization: Bearer $CLOUS_API_KEY"import os, requests
H = {"Authorization": f"Bearer {os.environ['CLOUS_API_KEY']}"}
r = requests.get("https://api.clous.ai/v1/holdings",
params={"manager": "Vanguard", "min_value": 1_000_000_000, "limit": 20}, headers=H)
positions = {h["cusip"]: h for h in r.json()["data"]}A position looks like:
{ "manager_name": "VANGUARD GROUP INC", "period": "31-DEC-2025",
"issuer": "APPLE INC", "cusip": "037833100",
"value_usd": 347722995434, "shares": 1279051701 }3. Diff two quarters
Pull the same manager filtered to two periods and compare by cusip:
def diff(prev, curr):
for cusip, now in curr.items():
before = prev.get(cusip)
if not before:
yield ("opened", now["issuer"], now["shares"])
elif now["shares"] != before["shares"]:
yield ("changed", now["issuer"], now["shares"] - before["shares"])
for cusip, before in prev.items():
if cusip not in curr:
yield ("closed", before["issuer"], -before["shares"])How it works
/v1/holdings serves resolved Form 13F
positions; /v1/managers is the manager directory. Values are reported quarterly,
so diffing consecutive periods gives you the position changes.