如何将sec.gov EDGAR交互式数据导入Google Sheets
EDGAR财务报表导入Google Sheets解决方案
原脚本失效原因
- SEC更新了请求校验规则,所有EDGAR页面请求必须携带可识别的User-Agent头,否则会直接返回403拦截,原脚本未配置请求头导致无法拉取页面内容
- 原正则匹配规则不符合当前EDGAR列表页的DOM结构,无法正确提取CIK编号和申报文件 accession号
修复后可用脚本
function secData(company, tablenum) { // 请将下方的User-Agent修改为你自己的邮箱地址,SEC要求提供可识别的请求方信息 const REQUEST_HEADER = { 'User-Agent': 'your-email@example.com' }; // 未传参时默认取苹果公司的资产负债表 if (!company) company = 'AAPL'; if (!tablenum) tablenum = 3; try { // 链接末尾的type=10-K代表默认拉取年报,如需拉取季报可修改为type=10-Q var url = "https://www.sec.gov/cgi-bin/browse-edgar?CIK=" + encodeURIComponent(company) + "&owner=exclude&action=getcompany&type=10-K"; var result = UrlFetchApp.fetch(url, {headers: REQUEST_HEADER}).getContentText(); var reg = /<a href="\/Archives\/edgar\/data\/(\d+)\/([\d-]+)\/-index.htm"/.exec(result); if (!reg || reg.length < 3) return ""; var cik = reg[1]; var accession = reg[2]; // 生成对应报表的直链 return 'https://www.sec.gov/Archives/edgar/data/' + cik + '/' + accession.replace(/-/g, '') + '/R'+tablenum+'.htm'; } catch (e) { return ""; } }
使用步骤
- 打开目标Google Sheets,点击顶部菜单栏「扩展程序」-「Apps脚本」,清空编辑器内默认的代码,粘贴上述修改后的脚本
- 将脚本中的
your-email@example.com替换为你自己的真实邮箱地址,点击顶部「保存」按钮,项目名称可随意填写(如SECFetcher) - 首次保存后点击「运行」按钮,按提示完成Google账号授权,授权时遇到风险提示点击「高级」-「前往xxx(项目名)」即可完成授权
- 回到Google Sheets页面即可调用函数拉取数据
表格公式用法
直接在单元格内输入如下公式即可:=IF(NOT(ISBLANK(G1)), IMPORTHtml(secData(G1,4),"table",1), "")
参数说明
- G1单元格填写目标公司的股票代码或CIK编号
- secData的第二个参数为报表编号,常用对应关系:
- 2 = 综合收益表
- 3 = 资产负债表
- 4 = 现金流量表
- 5 = 股东权益变动表
异常排查
- 出现
#N/A错误:首先确认脚本内的User-Agent已替换为真实邮箱,其次检查输入的股票代码/CIK编号是否正确,网络是否正常 - 表格加载错乱:部分报表的结构化数据存储在第二个table节点,可将公式中的
IMPORTHtml第三个参数从1改为2 - 需要拉取指定时间的报表:可在请求URL中增加
dateb参数筛选申报时间,格式为YYYYMMDD,例如&dateb=20231231代表拉取2023年12月31日之前的申报文件
内容的提问来源于stack exchange,提问作者bradendennis
相关产品推荐
相关产品推荐

