edgartools — SEC EDGAR Data
Python library for accessing all SEC filings since 1994 with structured data extraction.
Authentication (Required)
The SEC requires identification for API access. Always set identity before any operations:
from edgar import set_identity
set_identity("Your Name your.email@example.com")
Set via environment variable to avoid hardcoding: EDGAR_IDENTITY="Your Name your@email.com".
Installation
uv pip install edgartools
# For AI/MCP features:
uv pip install "edgartools[ai]"
Core Workflow
Find a Company
from edgar import Company, find
company = Company("AAPL") # by ticker
company = Company(320193) # by CIK (fastest)
results = find("Apple") # by name search
Get Filings
# Company filings
filings = company.get_filings(form="10-K")
filing = filings.latest()
# Global search across all filings
from edgar import get_filings
filings = get_filings(2024, 1, form="10-K")
# By accession number
from edgar import get_by_accession_number
filing = get_by_accession_number("0000320193-23-000106")
Extract Structured Data
# Form-specific object (most common approach)
tenk = filing.obj() # Returns TenK, EightK, Form4, ThirteenF, etc.
# Financial statements (10-K/10-Q)
financials = company.get_financials() # annual
financials = company.get_quarterly_financials() # quarterly
income = financials.income_statement()
balance = financials.balance_sheet()
cashflow = financials.cashflow_statement()
# XBRL data
xbrl = filing.xbrl()
income = xbrl.statements.income_statement()
Access Filing Content
text = filing.text() # plain text
html = filing.html() # HTML
md = filing.markdown() # markdown (good for LLM processing)
filing.open() # open in browser
Key Company Properties
company.name # "Apple Inc."
company.cik # 320193
company.ticker # "AAPL"
company.industry # "ELECTRONIC COMPUTERS"
company.sic # "3571"
company.shares_outstanding # 15115785000.0
company.public_float # 2899948348000.0
company.fiscal_year_end # "0930"
company.exchange # "Nasdaq"
Form → Object Mapping
| Form |
Object |
Key Properties |
| 10-K |
TenK |
financials, income_statement, balance_sheet |
| 10-Q |
TenQ |
financials, income_statement, balance_sheet |
| 8-K |
EightK |
items, press_releases |
| Form 4 |
Form4 |
reporting_owner, transactions |
| 13F-HR |
ThirteenF |
infotable, total_value |
| DEF 14A |
ProxyStatement |
executive_compensation, proposals |
| SC 13D/G |
Schedule13 |
total_shares, items |
| Form D |
FormD |
offering, recipients |
Important: filing.financials does NOT exist. Use filing.obj().financials.
Common Pitfalls
filing.financials → AttributeError; use filing.obj().financials
get_filings() has no limit param; use .head(n) or .latest(n)
- Prefer
amendments=False for multi-period analysis (amended filings may be incomplete)
- Always check for
None before accessing optional data
Reference Files
Load these when you need detailed information:
- companies.md — Finding companies, screening, batch lookups, Company API
- filings.md — Working with filings, attachments, exhibits, Filings collection API
- financial-data.md — Financial statements, convenience methods, DataFrame export, multi-period analysis
- xbrl.md — XBRL parsing, fact querying, multi-period stitching, standardization
- data-objects.md — All supported form types and their structured objects
- entity-facts.md — EntityFacts API, FactQuery, FinancialStatement, FinancialFact
- ai-integration.md — MCP server setup, Skills installation,
.docs and .to_context() properties
1---
2name: edgartools
3description: Python library for accessing, analyzing, and extracting data from SEC EDGAR filings. Use when working with SEC filings, financial statements (income statement, balance sheet, cash flow), XBRL financial data, insider trading (Form 4), institutional holdings (13F), company financials, annual/quarterly reports (10-K, 10-Q), proxy statements (DEF 14A), 8-K current events, company screening by ticker/CIK/industry, multi-period financial analysis, or any SEC regulatory filings.
4license: MIT
5metadata:
6 skill-author: K-Dense Inc.
7---
8
9# edgartools — SEC EDGAR Data
10
11Python library for accessing all SEC filings since 1994 with structured data extraction.
12
13## Authentication (Required)
14
15The SEC requires identification for API access. Always set identity before any operations:
16
17```python
18from edgar import set_identity
19set_identity("Your Name your.email@example.com")
20```
21
22Set via environment variable to avoid hardcoding: `EDGAR_IDENTITY="Your Name your@email.com"`.
23
24## Installation
25
26```bash
27uv pip install edgartools
28# For AI/MCP features:
29uv pip install "edgartools[ai]"
30```
31
32## Core Workflow
33
34### Find a Company
35
36```python
37from edgar import Company, find
38
39company = Company("AAPL") # by ticker
40company = Company(320193) # by CIK (fastest)
41results = find("Apple") # by name search
42```
43
44### Get Filings
45
46```python
47# Company filings
48filings = company.get_filings(form="10-K")
49filing = filings.latest()
50
51# Global search across all filings
52from edgar import get_filings
53filings = get_filings(2024, 1, form="10-K")
54
55# By accession number
56from edgar import get_by_accession_number
57filing = get_by_accession_number("0000320193-23-000106")
58```
59
60### Extract Structured Data
61
62```python
63# Form-specific object (most common approach)
64tenk = filing.obj() # Returns TenK, EightK, Form4, ThirteenF, etc.
65
66# Financial statements (10-K/10-Q)
67financials = company.get_financials() # annual
68financials = company.get_quarterly_financials() # quarterly
69income = financials.income_statement()
70balance = financials.balance_sheet()
71cashflow = financials.cashflow_statement()
72
73# XBRL data
74xbrl = filing.xbrl()
75income = xbrl.statements.income_statement()
76```
77
78### Access Filing Content
79
80```python
81text = filing.text() # plain text
82html = filing.html() # HTML
83md = filing.markdown() # markdown (good for LLM processing)
84filing.open() # open in browser
85```
86
87## Key Company Properties
88
89```python
90company.name # "Apple Inc."
91company.cik # 320193
92company.ticker # "AAPL"
93company.industry # "ELECTRONIC COMPUTERS"
94company.sic # "3571"
95company.shares_outstanding # 15115785000.0
96company.public_float # 2899948348000.0
97company.fiscal_year_end # "0930"
98company.exchange # "Nasdaq"
99```
100
101## Form → Object Mapping
102
103| Form | Object | Key Properties |
104|------|--------|----------------|
105| 10-K | TenK | `financials`, `income_statement`, `balance_sheet` |
106| 10-Q | TenQ | `financials`, `income_statement`, `balance_sheet` |
107| 8-K | EightK | `items`, `press_releases` |
108| Form 4 | Form4 | `reporting_owner`, `transactions` |
109| 13F-HR | ThirteenF | `infotable`, `total_value` |
110| DEF 14A | ProxyStatement | `executive_compensation`, `proposals` |
111| SC 13D/G | Schedule13 | `total_shares`, `items` |
112| Form D | FormD | `offering`, `recipients` |
113
114**Important:** `filing.financials` does NOT exist. Use `filing.obj().financials`.
115
116## Common Pitfalls
117
118- `filing.financials` → AttributeError; use `filing.obj().financials`
119- `get_filings()` has no `limit` param; use `.head(n)` or `.latest(n)`
120- Prefer `amendments=False` for multi-period analysis (amended filings may be incomplete)
121- Always check for `None` before accessing optional data
122
123## Reference Files
124
125Load these when you need detailed information:
126
127- **[companies.md](references/companies.md)** — Finding companies, screening, batch lookups, Company API
128- **[filings.md](references/filings.md)** — Working with filings, attachments, exhibits, Filings collection API
129- **[financial-data.md](references/financial-data.md)** — Financial statements, convenience methods, DataFrame export, multi-period analysis
130- **[xbrl.md](references/xbrl.md)** — XBRL parsing, fact querying, multi-period stitching, standardization
131- **[data-objects.md](references/data-objects.md)** — All supported form types and their structured objects
132- **[entity-facts.md](references/entity-facts.md)** — EntityFacts API, FactQuery, FinancialStatement, FinancialFact
133- **[ai-integration.md](references/ai-integration.md)** — MCP server setup, Skills installation, `.docs` and `.to_context()` properties
134