Files

238 lines
5.4 KiB
Markdown

# edgartools — Data Objects Reference
Every SEC filing can be parsed into a structured Python object:
```python
obj = filing.obj() # returns TenK, EightK, ThirteenF, Form4, etc.
```
## Supported Forms
### Annual & Quarterly Reports (10-K / 10-Q) → TenK / TenQ
```python
tenk = filing.obj() # or tenq for 10-Q
# Financial statements
tenk.income_statement # formatted income statement
tenk.balance_sheet # balance sheet
tenk.financials # Financials object with all statements
# Document sections
tenk.risk_factors # full risk factors text
tenk.business # business description
tenk.mda # management discussion & analysis
# Usage via Financials
if tenk.financials:
income = tenk.financials.income_statement
balance = tenk.financials.balance_sheet
cashflow = tenk.financials.cash_flow_statement
```
**Note:** Always check `tenk.financials` before accessing — not all filings have XBRL data.
---
### Current Events (8-K) → EightK
```python
eightk = filing.obj()
eightk.items # list of reported event codes (e.g. ["2.02", "9.01"])
eightk.press_releases # attached press releases
print(f"Items: {eightk.items}")
```
Common 8-K item codes:
- `1.01` — Entry into material agreement
- `2.02` — Results of operations (earnings)
- `5.02` — Director/officer changes
- `8.01` — Other events
---
### Insider Trades (Form 4) → Form4 (Ownership)
```python
form4 = filing.obj()
form4.reporting_owner # insider name
form4.transactions # buy/sell details with prices, shares, dates
# Get HTML table
html = form4.to_html()
```
Also covers:
- Form 3 — Initial ownership statement
- Form 5 — Annual changes in beneficial ownership
---
### Beneficial Ownership (SC 13D / SC 13G) → Schedule13D / Schedule13G
```python
schedule = filing.obj()
schedule.total_shares # aggregate beneficial ownership
schedule.items.item4_purpose_of_transaction # activist intent (13D only)
schedule.items.item5_interest_in_securities # ownership percentage
```
- **SC 13D**: Activist investors (5%+ with intent to influence)
- **SC 13G**: Passive holders (5%+)
---
### Institutional Portfolios (13F-HR) → ThirteenF
```python
thirteenf = filing.obj()
thirteenf.infotable # full holdings DataFrame
thirteenf.total_value # portfolio market value
# Analyze holdings
holdings_df = thirteenf.infotable
print(holdings_df.head())
print(f"Total AUM: ${thirteenf.total_value/1e9:.1f}B")
```
---
### Proxy & Governance (DEF 14A) → ProxyStatement
```python
proxy = filing.obj()
proxy.executive_compensation # pay tables (5-year DataFrame)
proxy.proposals # shareholder vote items
proxy.peo_name # "Mr. Cook" (principal exec officer)
proxy.peo_total_comp # CEO total compensation
```
---
### Private Offerings (Form D) → FormD
```python
formd = filing.obj()
formd.offering # offering details and amounts
formd.recipients # related persons
```
---
### Crowdfunding Offerings (Form C) → FormC
```python
formc = filing.obj()
formc.offering_information # target amount, deadline, securities
formc.annual_report_disclosure # issuer financials (C-AR)
```
---
### Insider Sale Notices (Form 144) → Form144
```python
form144 = filing.obj()
form144.proposed_sale_amount # shares to be sold
form144.securities # security details
```
---
### Fund Voting Records (N-PX) → FundReport
```python
npx = filing.obj()
npx.votes # vote records by proposal
```
---
### ABS Distribution Reports (Form 10-D) → TenD (CMBS only)
```python
ten_d = filing.obj()
ten_d.loans # loan-level DataFrame
ten_d.properties # property-level DataFrame
ten_d.asset_data.summary() # pool statistics
```
---
### Municipal Advisors (MA-I) → MunicipalAdvisorForm
```python
mai = filing.obj()
mai.advisor_name # advisor details
```
---
### Foreign Private Issuers (20-F) → TwentyF
```python
twentyf = filing.obj()
twentyf.financials # financial data for foreign issuers
```
---
## Complete Form → Class Mapping
| Form | Class | Key Attributes |
|------|-------|----------------|
| 10-K | TenK | `financials`, `income_statement`, `risk_factors`, `business` |
| 10-Q | TenQ | `financials`, `income_statement`, `balance_sheet` |
| 8-K | EightK | `items`, `press_releases` |
| 20-F | TwentyF | `financials` |
| 3 | Form3 | initial ownership |
| 4 | Form4 | `reporting_owner`, `transactions` |
| 5 | Form5 | annual ownership changes |
| DEF 14A | ProxyStatement | `executive_compensation`, `proposals`, `peo_name` |
| 13F-HR | ThirteenF | `infotable`, `total_value` |
| SC 13D | Schedule13D | `total_shares`, `items` |
| SC 13G | Schedule13G | `total_shares` |
| NPORT-P | NportFiling | fund portfolio |
| 144 | Form144 | `proposed_sale_amount`, `securities` |
| N-PX | FundReport | `votes` |
| Form D | FormD | `offering`, `recipients` |
| Form C | FormC | `offering_information` |
| 10-D | TenD | `loans`, `properties`, `asset_data` |
| MA-I | MunicipalAdvisorForm | `advisor_name` |
---
## How It Works
```python
from edgar import Company
apple = Company("AAPL")
filing = apple.get_latest_filing("10-K")
tenk = filing.obj() # returns TenK with all sections and financials
```
If a form type is not yet supported, `filing.obj()` raises `UnsupportedFilingTypeError`.
## Pattern for Unknown Form Types
```python
obj = filing.obj()
if obj is None:
# Fallback to raw content
text = filing.text()
html = filing.html()
xbrl = filing.xbrl()
```