Install
openclaw skills install @lkcair/secSEC EDGAR data for US-listed companies and funds. 10-K, 10-Q, 8-K, proxies, S-1/F-1 and IPOs, 13D/13G, Form 4 insiders, 13F fund holdings, XBRL financials and cross-company comparisons, full-text search across all filings, and reading or searching inside one filing (link-only for very large filings).
openclaw skills install @lkcair/sec23 functions over the official SEC EDGAR APIs. Run them with one command; no Python to write.
GitHub (open source, also for OpenWebUI): https://github.com/lkcair/sec-finance-ai
Run once, and again after every install or update of this skill (updates replace the folder):
cd {baseDir} && python3 -m venv .venv && .venv/bin/python -m pip install -r requirements.txt
requirements.txt pins every dependency to an exact version with SHA-256 hashes (Python 3.10+). On Windows use .venv\Scripts\python instead of .venv/bin/python.
Always use this exact form:
{baseDir}/.venv/bin/python {baseDir}/scripts/cli.py <function> key=value key=value
{baseDir}/.venv/bin/python {baseDir}/scripts/cli.py list prints every function with its parameters. Only call functions from that list.query='"going concern"'.Missing dependency, run Setup, then retry.get_latest_10k, get_latest_10q, get_recent_8k_filings or get_company_filings (each result has filing_url). The content_preview from get_latest_10k/get_latest_10q (10,000 characters) and get_recent_8k_filings (5,000) is only the start of the filing: when preview_is_partial is true, follow read_more and read on with step 3.get_filing_size filing_url=URL returns the exact size from the EDGAR index and recommendation = read_text or link_only.download_filing_text filing_url=URL answers in one of three modes:
mode: text: 50,000 characters per page. While has_more is true, call again with offset=<next_offset>.mode: search: add search='risk factors' to get snippets around each match with its position. Read around a match with offset=<position>.mode: link_only: the document is over 25 MB. Give the user filing_url and size_mb; do not try to read it.get_filing_content, get_company_concept or get_xbrl_frames instead of reading the text.| Need | Command |
|---|---|
| Latest annual / quarterly report | get_latest_10k ticker=AAPL / get_latest_10q ticker=AAPL |
| Recent 8-K events | get_recent_8k_filings ticker=AAPL limit=5 |
| Any form, any period | get_company_filings ticker=AAPL form_type=10-K,10-K/A limit=20 start_date=2015-01-01 |
| Read or search a filing | download_filing_text filing_url=URL (add search='...' or offset=N) |
| Exhibits inside a filing | get_filing_documents filing_url=URL |
| Search all filings by words | full_text_search query='"supply chain"' form_type=8-K start_date=2025-01-01 |
| Key financials (XBRL) | get_filing_content ticker=AAPL or get_company_concept ticker=AAPL concept=Revenues |
| Compare one metric across all companies | get_xbrl_frames concept=Revenues period=CY2024 |
| Insider trades (Form 4) | get_insider_transactions ticker=TSLA |
| Activist / large holders | get_beneficial_ownership ticker=GME schedule=13D (or 13G, all) |
| A fund's portfolio (13F) | get_13f_holdings ticker_or_cik=BRK-B or ticker_or_cik=1350694 |
| Recent IPOs | get_recent_ipos days=30 |
| Find a company | search_filings query=Apple |
Tickers with a share class work either way (BRK.B or BRK-B). Numeric CIKs work wherever a ticker is accepted.
get_company_filings, get_latest_10k, get_latest_10q, get_recent_8k_filings, analyze_8k_filing, get_proxy_statements, get_recent_iposget_filing_size, download_filing_text, get_filing_documents, get_filing_contentfull_text_search, search_filingsget_insider_transactions, get_beneficial_ownership, get_13f_holdingsget_company_facts, get_company_concept, get_available_metrics, get_xbrl_framesget_sec_api_status, get_available_functions, run_self_testForms include 10-K, 10-Q, 8-K, 20-F, 40-F, 6-K, DEF 14A, S-1, S-3, S-4, S-8, F-1, 424B4, 425, 13D/13G, 3/4/5, 13F-HR, 144, Form D, N-CSR, N-PORT, SC TO and amendments. Any other EDGAR form code is matched exactly.
https://*.sec.gov: every redirect hop is re-checked, and responses are size-capped while streaming.SEC_USER_AGENT="Your Name your@email.com" in the environment; otherwise a generic agent string is sent.