跳到主要内容
知仓学习社ZHICANG

EdgarTools

Query and analyze SEC filings and financial statements using EdgarTools. Get company data, filings, XBRL financials, and perform multi-company analy…

联网无严重或高危命中Microck/ordinary-claude-skills

它会碰到什么

扫了多少2 个文本文件,14 KB
它会碰到什么联网
命中总数1 处
命中统计严重 0 · 高 0 · 中 0 · 低 1

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

EdgarTools

Analyze SEC filings and financial statements using EdgarTools

Overview

Essential SEC filing analysis operations. See [objects.md](./objects.md) for object reference, [workflows.md](./workflows.md) for patterns, [readme.md](./readme.md) for setup.

Prerequisites & Setup

REQUIRED: Set your identity (SEC requirement):

from edgar import set_identity
set_identity("Your Name your@email.com")

Without this, all API calls fail with "User-Agent identity is not set" error.

⚡ Token-Efficient API Usage

ALWAYS use .to_context() first for concise summaries with available actions. 5-10x more token-efficient than full objects.

Company.to_context()

from edgar import Company

company = Company("AAPL")
print(company.to_context())  # ~88 tokens vs 200+ for full object

Output:

**Company:** Apple Inc.
**CIK:** 0000320193
**Ticker:** AAPL
**Exchange:** Nasdaq
**Industry:** Electronic Computers (SIC 3571)
**Fiscal Year End:** Sep 30

Filings.to_context()

filings = company.get_filings(form="10-K")
print(filings.to_context())  # ~95 tokens vs 500-1000 for rich table

Shows summary + AVAILABLE ACTIONS.

Filing.to_context()

filing = filings.latest()
print(filing.to_context())  # ~109 tokens, includes available methods

XBRL.to_context()

xbrl = filing.xbrl()
print(xbrl.to_context())  # ~275 tokens vs 2,500+ for full statements

Token Comparison:

| Object | Full Output | to_context() | Savings |

|--------|-------------|--------------|---------|

| Company | ~200 tokens | ~88 tokens | 56% |

| Filings | ~500-1000 | ~95 tokens | 80-90% |

| XBRL | ~2,500 tokens | ~275 tokens | 89% |

Pattern: to_context() first → see available → access data.

Quick Start

Common starting patterns. Use .to_context() for efficiency.

Get a Company

from edgar import set_identity, Company

set_identity("Your Name your@email.com")  # Required first!

company = Company("AAPL")
print(company.to_context())  # Concise profile (~88 tokens)
# OR for full details:
# print(company)  # Full object (~200 tokens)

Get Recent Filings

from edgar import get_current_filings

filings = get_current_filings()  # Last ~24 hours
print(filings.to_context())  # Summary + available actions (~95 tokens)
# OR to see first 5 in table:
# print(filings.head(5))  # Rich table (~500-1000 tokens)

Get Financial Statements

from edgar import Company

company = Company("AAPL")
income = company.income_statement(periods=3)  # 3 fiscal years
print(income)  # Full statement

Core API Reference

Main API functions and approaches.

Getting Filings (3 Approaches)

Choose the approach based on your use case:

1. Published Filings - Discovery & Bulk Analysis

When to use: Cross-company screening, pattern discovery, historical research, don't know which specific companies.

Data source: SEC quarterly indexes (updated nightly)

from edgar import get_filings

# Get all filings for a quarter
filings = get_filings(2023, 1)  # Q1 2023

# Filter by form type
filings = get_filings(2023, 1, form="10-K")

# Filter by date range
filings = get_filings(2023, 1, filing_date="2023-02-01:2023-02-15")

# Further filter results
filtered = filings.filter(ticker="AAPL")
tech_filings = filings.filter(ticker=["AAPL", "MSFT", "GOOGL"])

2. Current Filings - Real-time Monitoring

When to use: Monitoring recent filing activity, tracking latest submissions

Data source: SEC RSS feed (last ~24 hours)

from edgar import get_current_filings

# Get all recent filings
current = get_current_filings()

# Filter by form type
reports = current.filter(form=["10-K", "10-Q"])

# Filter by specific companies
tech_current = current.filter(ticker=["AAPL", "MSFT"])

3. Company Filings - Known Entity Analysis

When to use: You know the specific company ticker or name

Data source: SEC company submissions endpoint

from edgar import Company

company = Company("AAPL")

# Get all filings
all_filings = company.get_filings()

# Filter by form type
annual_reports = company.get_filings(form="10-K")

# Filter by year
filings_2023 = company.get_filings(year=2023)

# Combine filters
q1_2023_10q = company.get_filings(year=2023, form="10-Q")

Getting Financials (2 Approaches)

1. Entity Facts API - Multi-Period Comparison

When to use: Comparing multiple periods, trend analysis (fastest approach)

Data source: SEC Company Facts API

Advantages: Very fast (single API call), pre-aggregated data, multi-period comparison built-in

from edgar import Company

company = Company("AAPL")

# Annual data (fiscal years)
income = company.income_statement(periods=3)  # Last 3 fiscal years
balance = company.balance_sheet(periods=3)
cash_flow = company.cash_flow_statement(periods=3)

# Quarterly data
quarterly_income = company.income_statement(periods=4, annual=False)  # Last 4 quarters

2. Filing XBRL - Single Period Detail

When to use: Need specific filing details, want complete line items, analyzing single period

Data source: XBRL files attached to specific filings

Advantages: Most comprehensive detail, all line items available, exact as-filed data

from edgar import Company

company = Company("AAPL")

# Get specific filing
filing = company.get_filings(form="10-K")[0]  # Latest 10-K

# Parse XBRL
xbrl = filing.xbrl()

# Get statements
income = xbrl.statements.income_statement()
balance = xbrl.statements.balance_sheet()
cash_flow = xbrl.statements.cash_flow_statement()

# Access metadata
print(f"Entity: {xbrl.entity_name}")
print(f"Fiscal Year: {xbrl.fiscal_year}")
print(f"Period: {xbrl.fiscal_period}")

Searching Filing Content

⚠️ IMPORTANT: Filing has TWO different search methods. Use the right one!

Content Search: filing.search(query) ⭐ Find Text in Filings

Search the actual filing document - find keywords, topics, or sections within SEC filings.

from edgar import Company

company = Company("AAPL")
filing = company.get_filings(form="DEF 14A")[0]  # Proxy statement

# Search for content IN the filing
results = filing.search("executive compensation")

# Process results
print(f"Found {len(results)} matches")
for match in results[:5]:  # Top 5 matches
    print(f"Relevance score: {match.score:.2f}")
    print(f"Excerpt: {str(match)[:200]}...")
    print()

Features: BM25 relevance ranking (best matches first), searches parsed HTML sections, returns DocSection objects with scores, index cached for performance (~1-2 seconds per filing)

Use cases: Find mentions of specific topics ("revenue recognition", "risk factors"), locate sections in large filings, screen filings for relevant content, extract context around keywords

Example: Find proxy statements mentioning compensation changes

from edgar import get_filings
from datetime import datetime, timedelta

# Get recent proxy statements
start_date = datetime.now() - timedelta(days=30)
filings = get_filings(form="DEF 14A")
recent = filings.filter(filing_date=f"{start_date.strftime('%Y-%m-%d')}:")

# Search each filing
companies_with_matches = []
for filing in recent:
    matches = filing.search("executive compensation changes")

    if matches and len(matches) > 0:
        companies_with_matches.append({
            'company': filing.company,
            'date': filing.filing_date,
            'matches': len(matches),
            'top_score': matches[0].score,
            'excerpt': str(matches[0])[:200]
        })

print(f"Found {len(companies_with_matches)} companies")

API Documentation Search: filing.docs.search(query) 📚 Find Methods

Search the Filing API documentation - discover how to use the Filing class.

# Find how to use Filing API
help_text = filing.docs.search("how to get XBRL")
print(help_text)  # Shows documentation about filing.xbrl() method

help_text = filing.docs.search("convert to markdown")
print(help_text)  # Shows documentation about filing.markdown() method

Use cases:

  • Learning the Filing API
  • Discovering available methods
  • Finding parameter details

Quick Reference

| What are you searching? | Method | Returns |

|-------------------------|--------|---------|

| Text in the filing (content) | filing.search("keyword") | List of DocSection matches with scores |

| How to use Filing API (methods) | filing.docs.search("how to") | API documentation snippets |

⚠️ Common Mistake:

# WRONG - Searches API docs, not filing content!
matches = filing.docs.search("executive compensation")  # ❌
# Returns empty - API docs don't mention "executive compensation"

# CORRECT - Searches the actual filing document
matches = filing.search("executive compensation")  # ✅
# Returns 50+ matches from proxy statement

Quick Reference

Complete examples in [common-questions.md](common-questions.md).

| Task | Primary Method | Example |

|------|----------------|---------|

| Show S-1 filings from date range | get_filings(year, quarter, form="S-1", filing_date="...") | [See example](common-questions.md#show-all-s-1-filings-from-february-2023) |

| Get today's filings | get_current_filings() | [See example](common-questions.md#whats-been-filed-today) |

| Get company revenue trend | company.income_statement(periods=3) | [See example](common-questions.md#get-apples-revenue-for-last-3-fiscal-years) |

| Get quarterly financials | company.income_statement(periods=4, annual=False) | [See example](common-questions.md#teslas-quarterly-net-income-trend-4-quarters) |

| Get statement from specific filing | filing.xbrl().statements.income_statement() | [See example](common-questions.md#full-income-statement-from-apples-2023-10-k) |

| Compare multiple companies | compare_companies_revenue(["AAPL", "MSFT"]) | [See example](common-questions.md#compare-apple-and-microsoft-revenue) |

| Get latest quarterly balance sheet | company.get_filings(form="10-Q")[0].xbrl() | [See example](common-questions.md#get-balance-sheet-from-latest-10-q) |

| Get insider transactions (Form 4) | company.get_filings(form="4") | [See example](common-questions.md#get-all-form-4-insider-transactions-for-aapl) |

| Filter filings efficiently | filings.filter(ticker="AAPL", filing_date="2024-01-01:") | [See example](common-questions.md#when-to-use-filter-vs-python-filtering) |

| Look up form types | describe_form("C") or see form-types-reference.md | [See example](common-questions.md#dont-know-the-form-type-look-it-up) |

Pattern: For any question, check [common-questions.md](common-questions.md) for full working examples.

Advanced Topics

Advanced patterns, helpers, error handling, skill exportation: [advanced-guide.md](advanced-guide.md).

Includes:

  • Filtering and pagination
  • Multi-company analysis
  • Error handling patterns
  • Working with filing documents
  • Helper functions reference
  • Exporting skills for Claude Desktop
  • Creating custom external skills

Troubleshooting

"User-Agent identity is not set"

Error:

RuntimeError: User-Agent identity is not set. Please call set_identity() first.

Cause: Missing set_identity() call (SEC requirement)

Solution:

from edgar import set_identity
set_identity("Your Name your@email.com")  # Must call before any API operations

AttributeError on Company object

Error:

AttributeError: 'Company' object has no attribute 'sic_code'

Cause: Incorrect attribute name

Solution: Check the [API reference in objects.md](objects.md) for correct attribute names (e.g., use company.sic instead of company.sic_code)

Using too many tokens?

Cause: Not using .to_context() method

Solution: Always call .to_context() before printing full objects:

# Instead of:
print(company)  # 200+ tokens

# Use:
print(company.to_context())  # ~88 tokens

Empty filings result

Problem: get_filings() returns empty list

Possible causes: No filings match criteria (try broader search), wrong quarter/year combination, or form type doesn't exist for that period

Solution:

filings = get_filings(2024, 1, form="10-K")
if len(filings) == 0:
    print("No filings found - try different criteria")
    # Try broader search
    all_filings = get_filings(2024, 1)
    print(f"Found {len(all_filings)} total filings in 2024 Q1")

Accessing Documentation Programmatically (For AI Agents)

Use the skill API to read documentation:

from edgar.ai import get_skill

skill = get_skill("EdgarTools")
common_questions = skill.get_document_content("common-questions")
advanced_guide = skill.get_document_content("advanced-guide")

Available documents: SKILL, common-questions, advanced-guide, quickstart-by-task, objects, workflows, form-types-reference, readme

See [readme.md](readme.md#accessing-skill-documentation-programmatically-for-ai-agents) for complete API documentation.

See Also

  • [Common Questions](common-questions.md) - Complete examples with full code for common tasks
  • [Advanced Guide](advanced-guide.md) - Advanced patterns, helper functions, and skill exportation
  • [Quick Start by Task](quickstart-by-task.md) - Fast task routing (< 30 seconds)
  • [Object Reference](objects.md) - Object representations and token size estimates
  • [Workflows](workflows.md) - End-to-end analysis patterns
  • [Form Types Reference](form-types-reference.md) - Complete SEC form catalog (311 forms)
  • [README](readme.md) - Installation and package overview

Rate Limiting

EdgarTools automatically handles SEC rate limiting (10 requests/second):

  • Built-in rate limiting
  • Request caching to reduce API calls
  • Large batch operations may take time due to rate limits

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。

同名技能的其他版本

有 2 个不同仓库或目录里都有叫 EdgarTools 的技能。它们内容并不相同,别混用: