13f analyzer
Skill cxcscmu/SkillLearnBench/skills/b4-skill-creator-claude-opus-4-6/financial-analysis/13f-analyzer
[COLM'26] SkillLearnBench is the first benchmark for evaluating continual learning methods that automatically generate agent skills.
npx -y skills add cxcscmu/SkillLearnBench --skill 13f-analyzerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Perform data analysis on SEC 13-F filing datasets (TSV format) to obtain insights about fund activities such as number of holdings, AUM, and change of holdings between two quarters. Use this skill whenever analyzing hedge fund portfolios, comparing quarterly holdings, or working with SEC EDGAR 13F data files.
SKILL.md
2.2 KB, as published. Nobody here has run it
13F Filing Analyzer
Dataset Structure
SEC 13F data comes as TSV files in quarterly folders (e.g., /root/2025-q2/, /root/2025-q3/):
| File | Purpose | Key Columns |
|---|---|---|
COVERPAGE.tsv | Filer metadata | ACCESSION_NUMBER, FILINGMANAGER_NAME, REPORTCALENDARORQUARTER |
INFOTABLE.tsv | Individual holdings | ACCESSION_NUMBER, NAMEOFISSUER, CUSIP, VALUE (in thousands USD), SSHPRNAMT (shares) |
SUMMARYPAGE.tsv | Filing summary | ACCESSION_NUMBER, TABLEENTRYTOTAL (count of holdings), TABLEVALUETOTAL (AUM in thousands) |
Common Analysis Patterns
Get Fund's Accession Number
Search COVERPAGE.tsv by FILINGMANAGER_NAME to get the fund's ACCESSION_NUMBER for a given quarter.
Get AUM
Use the accession number to look up TABLEVALUETOTAL in SUMMARYPAGE.tsv. The value is in thousands of USD.
Get Number of Holdings
Use TABLEENTRYTOTAL from SUMMARYPAGE.tsv.
Compare Holdings Between Quarters
- Get accession numbers for both quarters from COVERPAGE
- Filter INFOTABLE by each accession number
- Join on CUSIP and compute differences in VALUE or SSHPRNAMT
- Rank by dollar value change (VALUE column, in thousands)
Find Top Holders of a Stock
- Find the stock's CUSIP from INFOTABLE (search by NAMEOFISSUER)
- Filter all INFOTABLE rows matching that CUSIP
- Join with COVERPAGE on ACCESSION_NUMBER to get fund names
- Rank by VALUE (in thousands)
Implementation Notes
- Use Python with pandas for efficient TSV processing
- TSV files use tab separator, read with
pd.read_csv(path, sep='\t') - INFOTABLE is large (~3M rows); filter early to reduce memory usage
- VALUE column is in thousands of USD
- ACCESSION_NUMBER is the join key across all tables
- When comparing quarters, some funds may have multiple filings (amendments); prefer non-amendment filings (
ISAMENDMENTis empty or 'N')