Files
claude-scientific-skills/scientific-skills/edgartools/references/companies.md

269 lines
6.0 KiB
Markdown

# edgartools — Companies Reference
## Table of Contents
- [Finding Companies](#finding-companies)
- [Company Properties](#company-properties)
- [Filing Access](#filing-access)
- [Financial Data Methods](#financial-data-methods)
- [Company Screening](#company-screening)
- [Advanced Search](#advanced-search)
- [Company API Reference](#company-api-reference)
- [Error Handling](#error-handling)
---
## Finding Companies
### By Ticker (case-insensitive)
```python
from edgar import Company
company = Company("AAPL")
company = Company("aapl") # same result
```
### By CIK (fastest, most reliable)
```python
company = Company(320193)
company = Company("320193")
company = Company("0000320193") # zero-padded
```
### By Name Search
```python
from edgar import find
results = find("Apple")
# Returns list: use results[0] or iterate
for c in results:
print(f"{c.ticker}: {c.name}")
apple = results[0]
```
### Multiple Share Classes
```python
brk_a = Company("BRK-A") # Class A
brk_b = Company("BRK-B") # Class B
# Both share the same CIK
```
---
## Company Properties
```python
company = Company("MSFT")
company.name # "Microsoft Corporation"
company.cik # 789019
company.display_name # "MSFT - Microsoft Corporation"
company.ticker # "MSFT"
company.tickers # ["MSFT"] (list of all tickers)
company.industry # "SERVICES-PREPACKAGED SOFTWARE"
company.sic # "7372"
company.fiscal_year_end # "0630" (June 30)
company.exchange # "Nasdaq"
company.website # "https://www.microsoft.com"
company.city # "Redmond"
company.state # "WA"
company.shares_outstanding # float (from SEC company facts)
company.public_float # float in dollars
company.is_company # True
company.not_found # False if found
```
---
## Filing Access
### get_filings()
```python
# All filings
filings = company.get_filings()
# Filter by form type
annual = company.get_filings(form="10-K")
multi = company.get_filings(form=["10-K", "10-Q"])
# Filter by date
recent = company.get_filings(filing_date="2023-01-01:")
range_ = company.get_filings(filing_date="2023-01-01:2023-12-31")
# Filter by year/quarter
q4 = company.get_filings(year=2023, quarter=4)
multi_year = company.get_filings(year=[2022, 2023])
# Other filters
xbrl_only = company.get_filings(is_xbrl=True)
original = company.get_filings(amendments=False)
```
**Parameters:**
- `form` — str or list of str
- `year` — int, list, or range
- `quarter` — 1, 2, 3, or 4
- `filing_date` / `date` — "YYYY-MM-DD" or "YYYY-MM-DD:YYYY-MM-DD"
- `amendments` — bool (default True)
- `is_xbrl` — bool
- `is_inline_xbrl` — bool
- `sort_by` — field name (default "filing_date")
**Returns:** `EntityFilings` collection
### latest()
```python
latest_10k = company.latest("10-K") # single Filing
latest_3 = company.latest("10-Q", 3) # list of Filings
```
### Convenience Properties
```python
tenk = company.latest_tenk # TenK object or None
tenq = company.latest_tenq # TenQ object or None
```
---
## Financial Data Methods
```python
# Annual (from latest 10-K)
financials = company.get_financials()
# Quarterly (from latest 10-Q)
quarterly = company.get_quarterly_financials()
# XBRL facts
facts = company.get_facts() # Returns EntityFacts
```
---
## Company Screening
```python
import pandas as pd
from edgar import Company
tickers = ["AAPL", "MSFT", "NVDA", "AMZN", "META"]
rows = []
for ticker in tickers:
company = Company(ticker)
rows.append({
'ticker': ticker,
'name': company.name,
'industry': company.industry,
'shares_outstanding': company.shares_outstanding,
'public_float': company.public_float,
})
df = pd.DataFrame(rows)
df = df.sort_values('public_float', ascending=False)
# Filter mega-caps (float > $1T)
mega_caps = df[df['public_float'] > 1e12]
```
---
## Advanced Search
### By Industry (SIC code)
```python
from edgar.reference import get_companies_by_industry
software = get_companies_by_industry(sic=7372)
```
### By Exchange
```python
from edgar.reference import get_companies_by_exchanges
nyse = get_companies_by_exchanges("NYSE")
nasdaq = get_companies_by_exchanges("Nasdaq")
```
### By State
```python
from edgar.reference import get_companies_by_state
delaware = get_companies_by_state("DE")
```
---
## Company API Reference
### Constructor
```python
Company(cik_or_ticker: Union[str, int])
```
Raises `CompanyNotFoundError` if not found.
### Address Methods
```python
addr = company.business_address()
# addr.street1, addr.city, addr.state_or_country, addr.zipcode
addr = company.mailing_address()
```
### Utility Methods
```python
ticker = company.get_ticker() # primary ticker
exchanges = company.get_exchanges() # list of exchange names
company_data = company.data # EntityData with former_names, entity_type, flags
```
### Factory Functions
```python
from edgar import get_company, get_entity
company = get_company("AAPL") # same as Company("AAPL")
entity = get_entity("AAPL")
```
---
## Error Handling
```python
from edgar import Company
try:
company = Company("INVALID")
except Exception as e:
# fallback to search
results = find("Invalid Corp")
if results:
company = results[0]
# Check if found
company = Company("MAYBE_INVALID")
if company.not_found:
print("Not available")
else:
filings = company.get_filings()
```
---
## Batch Processing
```python
tickers = ["AAPL", "MSFT", "GOOGL"]
companies = []
for ticker in tickers:
try:
company = Company(ticker)
companies.append({
'ticker': ticker,
'name': company.name,
'cik': company.cik,
'industry': company.industry,
})
except Exception as e:
print(f"Error with {ticker}: {e}")
```
## Performance Tips
1. Use CIK when possible — faster than ticker lookup
2. Cache Company objects; avoid repeated API calls
3. Filter filings with specific parameters in `get_filings()`
4. Use reasonable date ranges to limit result sets