F Finsider
SEC Form 13F API

13F API (Institutional Holdings)

See what the smart money owns. The 13F API delivers institutional holdings — positions, share counts, and market values — for every 13F filer, with quarter-over-quarter changes.

JSON responsesOpenAPI documentedcURL / Python / JS / GoFree tier available

What is Form 13F?

Form 13F is the quarterly holdings report filed by institutional investment managers with over $100 million in qualifying U.S. equity assets under management.

It reveals what hedge funds, asset managers, and pension funds hold: each position’s security, CUSIP, share count, and market value as of quarter end.

The Finsider 13F API normalizes those holdings and computes position changes, so you can track whale activity, build clone portfolios, and analyze institutional flows.

Fetch Form 13F filings

List recent Form 13F filings, filterable by company, ticker, and date.

curl -s "https://api.secapi.dev/v1/filings?formTypes=13F-HR&limit=20" \
  -H "x-api-key: $SECAPI_KEY"
import requests

resp = requests.get(
    "https://api.secapi.dev/v1/filings?formTypes=13F-HR&limit=20",
    headers={"x-api-key": "YOUR_API_KEY"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()
print(data)
const res = await fetch("https://api.secapi.dev/v1/filings?formTypes=13F-HR&limit=20", {
  method: "GET",
  headers: { "x-api-key": process.env.SECAPI_KEY },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.secapi.dev/v1/filings?formTypes=13F-HR&limit=20", nil)
	req.Header.Set("x-api-key", os.Getenv("SECAPI_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}

Get a fund’s latest holdings

Fetch the full 13F portfolio for a manager by CIK (example: Berkshire Hathaway).

curl -s "https://api.secapi.dev/v1/institutions/1067983/holdings" \
  -H "x-api-key: $SECAPI_KEY"
import requests

resp = requests.get(
    "https://api.secapi.dev/v1/institutions/1067983/holdings",
    headers={"x-api-key": "YOUR_API_KEY"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()
print(data)
const res = await fetch("https://api.secapi.dev/v1/institutions/1067983/holdings", {
  method: "GET",
  headers: { "x-api-key": process.env.SECAPI_KEY },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.secapi.dev/v1/institutions/1067983/holdings", nil)
	req.Header.Set("x-api-key", os.Getenv("SECAPI_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}

Track quarter-over-quarter changes

Pull position history to see what a manager bought and sold.

curl -s "https://api.secapi.dev/v1/institutions/1067983/holdings/history" \
  -H "x-api-key: $SECAPI_KEY"
import requests

resp = requests.get(
    "https://api.secapi.dev/v1/institutions/1067983/holdings/history",
    headers={"x-api-key": "YOUR_API_KEY"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()
print(data)
const res = await fetch("https://api.secapi.dev/v1/institutions/1067983/holdings/history", {
  method: "GET",
  headers: { "x-api-key": process.env.SECAPI_KEY },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.secapi.dev/v1/institutions/1067983/holdings/history", nil)
	req.Header.Set("x-api-key", os.Getenv("SECAPI_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}

Who files Form 13F?

FilerRequirement
Institutional managers$100M+ in qualifying 13(f) securities
Hedge fundsReport long U.S. equity positions
Asset managersMutual funds, ETFs, pensions, advisers
DeadlineWithin 45 days of quarter end

Deadlines & coverage

AspectDetail
FrequencyQuarterly (13F-HR)
Deadline45 days after quarter end
LagHoldings are as of quarter end, reported with a delay
Amendments13F-HR/A restates a prior filing

Key data fields

A sample of the structured fields returned for Form 13F data.

FieldDescription
securityName / ticker / cusipIdentifies each holding
sharesNumber of shares held
valueMarket value at quarter end (USD)
periodOfReportQuarter-end date the holdings reflect
putCallOption type, if the position is an option
changeInSharesQuarter-over-quarter position change

Frequently asked questions

What is the 13F API?
An endpoint that returns SEC Form 13F institutional holdings — positions, share counts, and market values — for every reporting manager, as structured JSON.
How do I get a hedge fund’s holdings?
Look up the manager in /v1/institutions, then call /v1/institutions/{cik}/holdings to retrieve their latest 13F portfolio.
Can I see what funds bought and sold?
Yes — the holdings history endpoint surfaces quarter-over-quarter changes so you can track accumulation and liquidation.
Why is 13F data delayed?
Managers report holdings as of quarter end but have up to 45 days to file, so 13F data reflects positions with a built-in lag.

Build with the 13F API

Create a free account, grab an API key, and make your first request in under a minute.