Prerequisites
- An SEC API key (set as
SECAPI_API_KEY) - Basic familiarity with REST APIs
- (Optional) Python 3.8+ or Node.js 18+ for SDK examples
Step 1 — Retrieve current 13F holdings
Use/v1/owners/13f to pull the latest holdings for an institutional investor by their CIK number.
curl
Python
JavaScript
managerName, reportDate, filingDate, accessionNumber, and provenance. Keep those fields with each holding; they establish which disclosed report you are comparing.
Step 2 — Compare holdings across quarters
The/v1/owners/13f/compare endpoint compares the latest two parsable reports available for one manager. It surfaces new positions, closed positions, and share-count changes, but it does not accept two arbitrary reporting-period selectors.
curl
Python
JavaScript
currentFilingDate and previousFilingDate and gives each row a status (added, removed, changed, or unchanged). Verify both dates and the returned source provenance before calling a result a specific quarter-over-quarter change. List the manager’s filings and retrieve the selected reports when you need both accession numbers.
Step 3 — Build a quarterly monitoring workflow
Combine the comparison endpoint with a filing list to build a review script. Run it on a cadence that fits your process, then use the filing dates in the response to determine whether a manager has published a new report.Python
Next steps
- Set up webhooks: Use the Filing Monitor tutorial to get notified when new 13F filings are published.
- Cross-reference with insider trades: Combine 13F data with insider trading patterns for a complete ownership picture.
- Track sector exposure: Aggregate holdings by sector to monitor allocation shifts.
- Choose a specific report: Use
GET /v1/owners/13f/filingsbefore requestingreportDate=YYYY-MM-DDwhen your work requires a named period rather than the latest report.

