ClousDocs
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=Vanguard
curl -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.

Next steps

On this page