关于 EdgarTools
EdgarTools 是一个开源 Python 库,可将 SEC EDGAR 文件转为结构化数据,面向金融研究人员和开发者。它通过统一 API 提供类型化文件对象、标准化报表和文件文本。
主要功能
- 01SEC 表格的类型化对象
- 02标准化财务报表
- 03文件全文搜索
- 04文件章节与 Markdown
- 05解析持仓和内幕交易
适用场景
- 01比较公司财务报表
- 02研究机构持仓
- 03查看内幕交易
- 04整理用于 RAG 的文件文本
MCP 相关
EdgarTools 在 `ai` 扩展中包含本地 MCP 服务,向 MCP 客户端提供 SEC 文件相关能力。edgar.tools 也提供托管 MCP 服务。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx edgartoolsEDGAR_IDENTITYYour name and email for SEC EDGAR API identification (e.g. 'Your Name [email protected]')本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
13收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| annual | boolean | 否 | 已弃用。请改用 'period'。年度(true)或季度(false)财务数据 |
| period | enum | 否 | 期间类型:'annual'、'quarterly' 或 'ttm'(过去十二个月)annual | quarterly | ttm |
| include | array | 否 | 要包含的数据。默认值:profile、financials、filings |
| periods | integer | 否 | 财务期间数(默认值为 4) |
| identifier | string | 是 | 公司股票代码(AAPL)、CIK(320193)或名称(Apple Inc) |
详细介绍
EdgarTools — SEC EDGAR 文件的 Python 库
EdgarTools 是一个用于将 SEC EDGAR 文件转换为结构化数据的 Python 库,涵盖财务报表、内部人士交易、基金持仓、委托书声明及数十种其他文件类型,并通过统一的 Python API 提供访问。SEC 免费发布自 1994 年以来的所有文件,但几乎没有文件可以直接使用;EdgarTools 会将文件转换为带类型的 Python 对象。免费开源,采用 MIT 许可证。
文档 · 速查表 · Agent:技能 · MCP 服务 · 托管服务:edgar.tools

快速开始
1. 安装。 包名为 edgartools;导入的模块名为 edgar。需要 Python 3.11+。
uv add edgartools # or: pip install edgartools
2. 向 SEC 表明身份。 EDGAR 要求每次请求都提供联系邮箱。无需密钥、注册或速率限制等级。
from edgar import Company, set_identity
set_identity("[email protected]")
3. 获取数据。
# Five fiscal years of standardized income statement, from XBRL
Company("NVDA").income_statement(periods=5)
#> Total Revenue $215.9B $130.5B $60.9B
为什么不直接调用 SEC 的 API?
data.sec.gov 提供 JSON 格式的事实数据和文件索引。除此之外都得由你编写代码。EdgarTools 帮你处理这些工作:
- 章节文本和 Markdown。 将 10-K 或 10-Q 的 Item 1A、Item 7 或任意 Item 提取为文本,并将完整文件转换为 Markdown,以供 RAG 使用。手写解析器往往会在处理原始 HTML 时出错。
- 解析后的表单,而非 XML。 将 13F 持仓、Form 4 交易、N-PORT 投资组合和 8-K 条目转换为带类型的对象和 DataFrame。
- 统一口径的报表。 对不同申报公司的行进行标准化,因此“总收入”对银行和芯片制造商含义一致;还提供离散季度(由 10-K 推导 Q4)和过去 12 个月数据。
- 搜索和基础设施。 对文件内容进行全文搜索,提供实时文件流、速率限制、缓存和离线存储。
它在你自己的进程中运行,采用 MIT 许可证,无需 API 密钥,也没有供应商配额;但仍须遵守 SEC 每秒 10 个请求的公平访问限制,EdgarTools 会遵守此限制。
你可以做什么
搜索 SEC 文件全文
搜索自 2001 年以来每份文件的文本,而不仅仅是表单类型和日期。
from edgar import search_filings
# Every 10-K filed since 2025 that mentions tariffs
results = search_filings("tariff", forms="10-K", start_date="2025-01-01")
hit = results[0]
hit.accession_number, hit.form, hit.filed, hit.company # a hit's fields; filed is the filing date
hit.get_filing() # the Filing behind a hit, ready for .obj() or .markdown()
# Structured: 8-Ks that reported a cybersecurity incident (Item 1.05) in 2025
search_filings(forms="8-K", items="1.05", start_date="2025-01-01", end_date="2025-12-31")
#> 19 total
查看多年财务报表
Company("MSFT").income_statement(periods=10) # also .balance_sheet() and .cash_flow_statement()
跨公司比较同一指标
根据标准化标签选择行,绝不要按位置选择:损益表的第一行并不总是总收入。
import pandas as pd
revenue = {
ticker: Company(ticker).income_statement(periods=3, as_dataframe=True)
.set_index("label").filter(like="FY").loc["Total Revenue"] / 1e9
for ticker in ["JPM", "PFE", "CAT"]
}
pd.DataFrame(revenue).round(1) # $ billions
#> FY 2025 182.4 62.6 67.6
季度数据和过去 12 个月数据
nvda = Company("NVDA")
nvda.get_ttm_revenue() # the last four quarters, summed
nvda.income_statement(period="quarterly", periods=8) # discrete quarters; Q4 is derived from the 10-K
用于 RAG 的章节和 Markdown
filing = Company("NVDA").latest("10-K")
filing.markdown() # the whole filing as markdown
tenk = filing.obj()
tenk.risk_factors # Item 1A as text
tenk["Item 1C"] # any Item by number
按任意条件查找申报文件
from edgar import find, get_current_filings, get_filings
get_filings(2025, 4, form="10-K") # every 10-K filed in Q4 2025
get_current_filings() # the live feed, as SEC posts it
find("0000320193-25-000079") # an accession number, CIK or ticker


13F 机构持仓
thirteenf = Company("BRK.A").get_filings(form="13F-HR").latest().obj()
thirteenf.holdings # one row per security: Issuer, Cusip, Ticker, SharesPrnAmount, Value, ...

Form 4 内部人交易
form4 = Company("TSLA").get_filings(form="4").latest().obj()
form4.to_dataframe() # buys, sells, grants and exercises

N-PORT 基金持仓
from edgar import Fund
Fund("VOO").get_portfolio() # the latest N-PORT holdings as a DataFrame
8-K 事件和财报发布
eightk = find("0001045810-26-000073").obj() # NVIDIA, 2026-08-26
eightk.items # ['Item 2.02', 'Item 9.01']
eightk.earnings # the EX-99.1 press release tables, parsed
使用库还是托管平台?
EdgarTools 是此处的库:免费、采用 MIT 许可证,可在你自己的 Python 进程中运行。edgar.tools 是基于它构建的托管平台:解析能力相同,持续运行并保持最新,每个答案都附有申报文件引文。你付费购买的不是解析能力,而是让它持续运行并随时提供答案。我们绝不会为了销售平台而从库中移除任何功能。
| 如果你想要…… | 使用 |
|---|---|
| 构建可运行的内容:管道、回填、回测、模型语料库、笔记本、自定义联接,以及任何需要对数百个名称重复执行或在你自己的网络中运行的内容 | 该库 |
| 只需提问,无需构建:你关注的公司提交了哪些文件、与上次相比有何变化、谁卖出了、谁持有某项资产、某个人涉及的所有公司、覆盖整个范围的筛选、提醒,以及可转发或分享给团队的引用答案。可通过浏览器、手机、Excel、Claude 或 ChatGPT 使用,也可供无法运行 Python 的 Agent 使用 | edgar.tools。免费注册即可开始 |
| 获取维护好的数据集(内部人交易、13F、BDC 投资组合、重大事件),每行都可追溯至对应申报文件,且无需运行管道 | edgar.tools 数据授权 |
| 通过脚本一次性获取某份已知申报文件或某个 JSON 文档 | 两者都不用:直接调用 EDGAR |
两者都提供 MCP 服务:库的 MCP 服务在本地运行(见下文“AI 集成”),edgar.tools 的 MCP 服务则托管在 app.edgar.tools/mcp。每个客户端只连接一个,不要同时连接两者:它们的功能重叠,会分散助手的路由。
AI 集成
EdgarTools 在 ai extra 中提供 Agent 技能和本地 MCP 服务。对于无法运行 Python 的助手,请改用上文中的托管连接器。
pip install "edgartools[ai]"
python -c "from edgar.ai import install_skill; install_skill()" # the skill, for Claude Code and Claude Desktop
该 MCP 服务适用于任何 MCP 客户端。对于 Claude Desktop,请将其添加到 claude_desktop_config.json:
{
"mcpServers": {
"edgartools": {
"command": "uvx",
"args": ["--from", "edgartools[ai]", "edgartools-mcp"],
"env": {
"EDGAR_IDENTITY": "Your Name [email protected]"
}
}
}
}
uvx 需要安装 uv;如果没有,可运行 pip install "edgartools[ai]" 并执行 python -m edgar.ai。其他客户端的设置方法:MCP 服务指南 · 技能指南。
支持项目
SEC 每年都会更改申报格式并发布新的 XBRL 分类标准。赞助有助于让解析器保持最新,并为新披露内容出现时开发新的解析器提供资金。
- GitHub Sponsors:每月赞助或一次性赞助。公司可以通过现有的 GitHub 账单进行赞助。
- Buy Me a Coffee:一次性的感谢。
- 咨询服务:由该库的作者协助构建 SEC 数据管道和基于该库的金融 AI。
文档、帮助与贡献
- 文档 · 速查表 · 笔记本 · 博客
- 问题请前往 Discussions;Bug 和功能请求请提交至 Issues。
- 欢迎贡献,包括借助 AI 的贡献。请阅读贡献指南,并让你的助手参考 AGENTS.md。
EdgarTools 根据 MIT License 发布。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。