Skip to content
Back to skills

2576 Entity Facts F66d3c9f

ASecurity

Structured access to SEC company financial facts with AI-ready features, querying, and professional formatting.

  • 9 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 11, 2026
businesspython

Works with

  • mcp

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 2576-entity-facts_f66d3c9f --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 2576 Entity Facts F66d3c9f?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 2576 Entity Facts F66d3c9f
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-2576-entity-facts-f66d3c9f/badge)](https://www.skillsdirectory.com/skills/tools-only-2576-entity-facts-f66d3c9f)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# edgartools — EntityFacts Reference

Structured access to SEC company financial facts with AI-ready features, querying, and professional formatting.

## Table of Contents
- [EntityFacts Class](#entityfacts-class)
- [FactQuery — Fluent Query Builder](#factquery--fluent-query-builder)
- [FinancialStatement Class](#financialstatement-class)
- [FinancialFact Class](#financialfact-class)
- [Common Patterns](#common-patterns)

---

## EntityFacts Class

### Getting EntityFacts

```python
from edgar import Company

company = Company("AAPL")
facts = company.get_facts()  # Returns EntityFacts object
```

### Core Properties

```python
facts.cik              # 320193
facts.name             # "Apple Inc."
len(facts)             # total number of facts

# DEI properties (from SEC filings)
facts.shares_outstanding       # float or None
facts.public_float             # float or None
facts.shares_outstanding_fact  # FinancialFact with full metadata
facts.public_float_fact        # FinancialFact with full metadata
```

### Financial Statement Methods

```python
# Income statement
stmt = facts.income_statement()                  # FinancialStatement (4 annual periods)
stmt = facts.income_statement(periods=8)         # 8 periods
stmt = facts.income_statement(annual=False)      # quarterly
df   = facts.income_statement(as_dataframe=True) # return DataFrame directly

# Balance sheet
stmt = facts.balance_sheet()
stmt = facts.balance_sheet(periods=4)
stmt = facts.balance_sheet(as_of=date(2024, 12, 31))  # point-in-time

# Cash flow
stmt = facts.cash_flow()
stmt = facts.cashflow_statement(periods=5, annual=True)

# Parameters:
# periods (int): number of periods (default: 4)
# annual (bool): True=annual, False=quarterly (default: True)
# period_length (int): months — 3=quarterly, 12=annual
# as_dataframe (bool): return DataFrame instead of FinancialStatement
# as_of (date): balance sheet only — point-in-time snapshot
```

### Query Interface

```python
query = facts.query()
# Returns FactQuery builder — see FactQuery section
```

### Get Single Fact

```python
revenue_fact = facts.get_fact('Revenue')
q1_revenue   = facts.get_fact('Revenue', '2024-Q1')
# Returns FinancialFact or None
```

### Time Series

```python
revenue_ts = facts.time_series('Revenue', periods=8)  # DataFrame
```

### DEI / Entity Info

```python
# DEI facts DataFrame
dei_df = facts.dei_facts()
dei_df = facts.dei_facts(as_of=date(2024, 12, 31))

# Entity info dict
info = facts.entity_info()
print(info['entity_name'])
print(info['shares_outstanding'])
```

### AI / LLM Methods

```python
# Comprehensive LLM context
context = facts.to_llm_context(
    focus_areas=['profitability', 'growth'],  # or 'liquidity'
    time_period='5Y'    # 'recent', '5Y', '10Y', 'all'
)

# MCP-compatible tool definitions
tools = facts.to_agent_tools()
```

### Iteration

```python
for fact in facts:
    print(f"{fact.concept}: {fact.numeric_value}")
```

---

## FactQuery — Fluent Query Builder

Create via `facts.query()`. All filter methods return `self` for chaining.

### Concept Filtering

```python
query = facts.query()

# Fuzzy matching (default)
q = query.by_concept('Revenue')

# Exact matching
q = query.by_concept('us-gaap:Revenue', exact=True)

# By human-readable label
q = query.by_label('Total Revenue', fuzzy=True)
q = query.by_label('Revenue', fuzzy=False)
```

### Time-Based Filtering

```python
# Fiscal year
q = query.by_fiscal_year(2024)

# Fiscal period
q = query.by_fiscal_period('FY')   # 'FY', 'Q1', 'Q2', 'Q3', 'Q4'
q = query.by_fiscal_period('Q1')

# Period length in months
q = query.by_period_length(3)    # quarterly
q = query.by_period_length(12)   # annual

# Date range
q = query.date_range(start=date(2023, 1, 1), end=date(2024, 12, 31))

# Point-in-time
q = query.as_of(date(2024, 6, 30))

# Latest n periods
q = query.latest_periods(4, annual=True)
q = query.latest_instant()   # most recent balance sheet items
```

### Statement / Form Filtering

```python
q = query.by_statement_type('IncomeStatement')
q = query.by_statement_type('BalanceSheet')
q = query.by_statement_type('CashFlow')

q = query.by_form_type('10-K')
q = query.by_form_type(['10-K', '10-Q'])
```

### Quality Filtering

```python
q = query.high_quality_only()       # audited facts only
q = query.min_confidence(0.9)       # confidence score 0.0-1.0
```

### Sorting

```python
q = query.sort_by('filing_date', ascending=False)
q = query.sort_by('fiscal_year')
```

### Execution

```python
# Execute and return facts
facts_list = query.execute()   # List[FinancialFact]
count = query.count()          # int (no fetch)
latest_n = query.latest(5)     # List[FinancialFact] (most recent)

# Convert to DataFrame
df = query.to_dataframe()
df = query.to_dataframe('label', 'numeric_value', 'fiscal_period')

# Pivot by period
stmt = query.pivot_by_period()                        # FinancialStatement
df   = query.pivot_by_period(return_statement=False)  # DataFrame

# LLM context
llm_data = query.to_llm_context()
```

### Full Chaining Example

```python
results = facts.query()\
    .by_concept('Revenue')\
    .by_fiscal_year(2024)\
    .by_form_type('10-K')\
    .sort_by('filing_date')\
    .execute()
```

---

## FinancialStatement Class

Wrapper around DataFrame with intelligent formatting and display.

### Properties

```python
stmt = company.income_statement()

stmt.shape    # (10, 4) — rows x periods
stmt.columns  # period labels: ['FY 2024', 'FY 2023', ...]
stmt.index    # concept names: ['Revenue', 'Cost of Revenue', ...]
stmt.empty    # bool
```

### Methods

```python
# Get numeric DataFrame for calculations
numeric_df = stmt.to_numeric()
growth_rates = numeric_df.pct_change(axis=1)

# Get specific concept across periods
revenue_series = stmt.get_concept('Revenue')  # pd.Series or None

# Calculate period-over-period growth
growth = stmt.calculate_growth('Revenue', periods=1)  # pd.Series

# Format a value
formatted = stmt.format_value(1234567, 'Revenue')  # "$1,234,567"

# LLM context
context = stmt.to_llm_context()
```

### Display

- Jupyter: automatic HTML rendering with professional styling
- Console: formatted text with proper alignment
- Compatible with Rich library

---

## FinancialFact Class

Individual fact with full metadata.

### Core Attributes

```python
fact = facts.get_fact('Revenue')

fact.concept        # "us-gaap:Revenue"
fact.taxonomy       # "us-gaap"
fact.label          # "Revenue"
fact.value          # raw value
fact.numeric_value  # float for calculations
fact.unit           # "USD", "shares", etc.
fact.scale          # 1000, 1000000, etc.
```

### Temporal Attributes

```python
fact.period_start    # date (for duration facts)
fact.period_end      # date
fact.period_type     # "instant" or "duration"
fact.fiscal_year     # int
fact.fiscal_period   # "FY", "Q1", "Q2", "Q3", "Q4"
```

### Filing Context

```python
fact.filing_date   # date filed
fact.form_type     # "10-K", "10-Q", etc.
fact.accession     # SEC accession number
```

### Quality

```python
fact.data_quality      # DataQuality.HIGH / MEDIUM / LOW
fact.is_audited        # bool
fact.confidence_score  # float 0.0-1.0
```

### AI Attributes

```python
fact.semantic_tags     # List[str]
fact.business_context  # str description
```

### Methods

```python
context = fact.to_llm_context()      # dict for LLM
formatted = fact.get_formatted_value() # "365,817,000,000"
period_key = fact.get_display_period_key()  # "Q1 2024", "FY 2023"
```

---

## Common Patterns

### Multi-Period Income Analysis

```python
from edgar import Company

company = Company("AAPL")
facts = company.get_facts()

# 4 annual periods
stmt = facts.income_statement(periods=4, annual=True)
print(stmt)

# Convert to numeric for calculations
numeric = stmt.to_numeric()
revenue_growth = numeric.loc['Revenue'].pct_change()
print(revenue_growth)
```

### Query Latest Revenue Facts

```python
latest_revenue = facts.query()\
    .by_concept('Revenue')\
    .latest_periods(4, annual=True)\
    .to_dataframe()
```

### Error Handling

```python
from edgar.entity.core import NoCompanyFactsFound

try:
    facts = company.get_facts()
except NoCompanyFactsFound:
    print("No facts available")

# Methods return None gracefully
stmt = facts.income_statement()  # None if no data
if stmt and not stmt.empty:
    # process
    pass
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.