<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Geo</title>
    <description>The latest articles on DEV Community by Geo (@forgegp).</description>
    <link>https://dev.to/forgegp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4205337%2Fa03ff59c-ddc0-4966-99c2-82ccf18c688d.png</url>
      <title>DEV Community: Geo</title>
      <link>https://dev.to/forgegp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/forgegp"/>
    <language>en</language>
    <item>
      <title>How to Pull SEC EDGAR Filings and XBRL Financial Data with an API</title>
      <dc:creator>Geo</dc:creator>
      <pubDate>Mon, 26 Oct 2026 13:30:05 +0000</pubDate>
      <link>https://dev.to/forgegp/how-to-pull-sec-edgar-filings-and-xbrl-financial-data-with-an-api-20h9</link>
      <guid>https://dev.to/forgegp/how-to-pull-sec-edgar-filings-and-xbrl-financial-data-with-an-api-20h9</guid>
      <description>&lt;p&gt;Every US public company files its financials with the SEC, and the SEC makes all of it available for free through public endpoints on &lt;code&gt;data.sec.gov&lt;/code&gt; — submissions (filing metadata) and companyfacts (XBRL financial data). No login, no API key, no paywall, and the SEC explicitly permits programmatic access.&lt;/p&gt;

&lt;p&gt;The catch: companyfacts files are large nested JSON, the SEC caps you at 10 requests/second, and tickers don't map directly to company identifiers (the SEC keys everything by CIK number).&lt;/p&gt;

&lt;p&gt;This tutorial shows how to get the same data as structured JSON with a single API call — using a pay-per-event actor that handles CIK resolution, rate limiting, and XBRL normalization for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we're building
&lt;/h2&gt;

&lt;p&gt;A pipeline that, for any ticker or CIK:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Resolves the ticker to a CIK via the SEC's company list&lt;/li&gt;
&lt;li&gt;Pulls recent filings (&lt;code&gt;10-K&lt;/code&gt;, &lt;code&gt;10-Q&lt;/code&gt;, &lt;code&gt;8-K&lt;/code&gt;, &lt;code&gt;4&lt;/code&gt; for Form 4, &lt;code&gt;13F-HR&lt;/code&gt;, &lt;code&gt;S-1&lt;/code&gt;, &lt;code&gt;DEF 14A&lt;/code&gt;…) with full metadata&lt;/li&gt;
&lt;li&gt;Fetches XBRL concept time-series (Revenue, Net Income, EPS, Assets, …) with up to the 20 most recent values each&lt;/li&gt;
&lt;li&gt;Returns everything as JSON records&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An Apify account (the free tier is enough — a few test runs cost cents)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;curl&lt;/code&gt; or any HTTP client&lt;/li&gt;
&lt;li&gt;A ticker or CIK you care about — let's use &lt;code&gt;AAPL&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: The API call
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://api.apify.com/v2/acts/gp005~edgar-xbrl-fundamentals/runs"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer ***"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "tickers": ["AAPL"],
    "mode": "both",
    "formTypes": ["10-K"],
    "maxFilings": 2
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;mode: "both"&lt;/code&gt; returns filings and financial data in one run. You can also use &lt;code&gt;"filings"&lt;/code&gt; or &lt;code&gt;"financials"&lt;/code&gt; alone. &lt;code&gt;formTypes&lt;/code&gt; filters the filing list, and &lt;code&gt;maxFilings&lt;/code&gt; caps it (up to 500 per company).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;formTypes&lt;/code&gt; matches EDGAR's own form codes exactly — copy the code from the filing you're targeting. Form 4 insider transactions are &lt;code&gt;4&lt;/code&gt; (not "Form 4"), and a 13F holdings report is &lt;code&gt;13F-HR&lt;/code&gt; (there is no &lt;code&gt;13-F&lt;/code&gt; code).&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Reading the output
&lt;/h2&gt;

&lt;p&gt;Two kinds of records come back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filing records&lt;/strong&gt; — metadata about each filing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cik"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0000320193"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ticker"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AAPL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"companyName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Apple Inc."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"form"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"10-K"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"filedDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-10-31"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reportDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-09-27"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"accessionNumber"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0000320193-25-000079"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"primaryDocument"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"aapl-20250927.htm"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fileUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/aapl-20250927.htm"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Concept records&lt;/strong&gt; — normalized financial time-series:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cik"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0000320193"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ticker"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AAPL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"companyName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Apple Inc."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"concept"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"us-gaap/NetIncomeLoss"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Net Income (Loss) Attributable to Parent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"values"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-29"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-27"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"val"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;29789000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"accn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0000320193-26-000020"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"fy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"fp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Q3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"form"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"10-Q"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-31"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"frame"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CY2026Q2"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every value keeps its period start/end, fiscal year and period, the accession number and form it came from, and the filing date — which makes charting or screening logic straightforward. Balance-sheet concepts (&lt;code&gt;Assets&lt;/code&gt;, &lt;code&gt;StockholdersEquity&lt;/code&gt;) carry only an &lt;code&gt;end&lt;/code&gt;, since they are point-in-time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Financial concepts
&lt;/h2&gt;

&lt;p&gt;The actor reads the SEC's companyfacts API, which covers thousands of US-GAAP and DEI XBRL concepts. Common ones:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Revenues&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Total revenue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RevenueFromContractWithCustomerExcludingAssessedTax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Revenue, for filers that switched off the &lt;code&gt;Revenues&lt;/code&gt; tag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NetIncomeLoss&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Net income&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EarningsPerShareBasic&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Basic EPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Assets&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Total assets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;StockholdersEquity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shareholders' equity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pass them explicitly with &lt;code&gt;xbrlConcepts&lt;/code&gt; (defaults apply if omitted). Each concept returns up to the 20 most recent values.&lt;/p&gt;

&lt;p&gt;One gotcha worth knowing: &lt;strong&gt;companies retire XBRL tags&lt;/strong&gt;. Apple's &lt;code&gt;us-gaap/Revenues&lt;/code&gt; series stops in 2018; current Apple filings report revenue under &lt;code&gt;us-gaap/RevenueFromContractWithCustomerExcludingAssessedTax&lt;/code&gt;. If a concept comes back with no recent values, that's usually why — name the tag the filer actually uses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Batch and automate
&lt;/h2&gt;

&lt;p&gt;Pass multiple tickers or CIKs in one run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tickers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"AAPL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MSFT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NVDA"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"financials"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"xbrlConcepts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Revenues"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NetIncomeLoss"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EarningsPerShareBasic"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then schedule it — daily or weekly — via Apify Console, or trigger it with a webhook whenever you need fresh numbers. Common patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Earnings alerts:&lt;/strong&gt; schedule a daily filings run, filter &lt;code&gt;8-K&lt;/code&gt;s, and webhook the results into Slack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fundamentals feed:&lt;/strong&gt; nightly financials run for your watchlist → CSV/JSON into your datastore&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Screening:&lt;/strong&gt; pull Assets/Equity across an index and compute metrics (ROE, margins) server-side&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 5: What it costs
&lt;/h2&gt;

&lt;p&gt;Pay-per-event — you only pay for what a run actually fetches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;actor-start&lt;/code&gt;: $0.01 per run&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;filing-fetched&lt;/code&gt;: $0.003 per filing record&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;financial-concept-fetched&lt;/code&gt;: $0.005 per concept per company&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A measured smoke run (AAPL, &lt;code&gt;10-K&lt;/code&gt;, 2 filings + 10 concepts) returned 12 records in ~4 seconds for $0.066 in event charges — 0.00466 compute units, $0.00105 of platform usage. To hard-cap spend, pass the &lt;code&gt;maxTotalChargeUsd&lt;/code&gt; run option; the actor checks the charge limit after every event and exits gracefully instead of running up the bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rate limits and compliance
&lt;/h2&gt;

&lt;p&gt;The SEC allows up to 10 requests/second on data.sec.gov. The actor issues its requests one at a time with a 120 ms minimum gap between them (~8 req/s), so normal workloads never hit the cap — no proxy needed. Data comes exclusively from the SEC's official public APIs, which the SEC permits for programmatic access. The actor is not affiliated with or endorsed by the SEC.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is the SEC EDGAR API free?
&lt;/h3&gt;

&lt;p&gt;The SEC's EDGAR endpoints are free and public. You only pay for this actor's per-event usage when a run actually fetches data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need a SEC EDGAR API key?
&lt;/h3&gt;

&lt;p&gt;No. The SEC doesn't issue keys for &lt;code&gt;data.sec.gov&lt;/code&gt; — it asks for a descriptive &lt;code&gt;User-Agent&lt;/code&gt;, which the actor sends for you. No signup, no token, no OAuth.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a CIK and how do I find it?
&lt;/h3&gt;

&lt;p&gt;CIK (Central Index Key) is the SEC's unique numeric company identifier — Apple is &lt;code&gt;0000320193&lt;/code&gt;. The actor resolves tickers to CIKs automatically; you can also pass CIKs directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which SEC filing types are supported?
&lt;/h3&gt;

&lt;p&gt;All of them — &lt;code&gt;10-K&lt;/code&gt;, &lt;code&gt;10-Q&lt;/code&gt;, &lt;code&gt;8-K&lt;/code&gt;, &lt;code&gt;4&lt;/code&gt;, &lt;code&gt;13F-HR&lt;/code&gt;, &lt;code&gt;S-1&lt;/code&gt;, &lt;code&gt;DEF 14A&lt;/code&gt; and thousands more. Use &lt;code&gt;formTypes&lt;/code&gt; to filter, with EDGAR's own form codes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does this work from Python?
&lt;/h3&gt;

&lt;p&gt;Yes — run it through the Apify API with &lt;code&gt;apify-client&lt;/code&gt;, and the dataset comes back as a list of dicts. You skip the usual chores: fetching &lt;code&gt;company_tickers.json&lt;/code&gt; to map tickers to CIKs, back-off around the 10 req/s budget, and walking the nested companyfacts structure.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is XBRL financial data?
&lt;/h3&gt;

&lt;p&gt;The machine-readable format US companies use to tag their financial statements; the SEC publishes it via its companyfacts API, which this actor normalizes into JSON time-series.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related
&lt;/h2&gt;

&lt;p&gt;If you also need change detection on SEC documents, check out the &lt;a href="https://apify.com/gp005/edgar-filing-diff" rel="noopener noreferrer"&gt;SEC EDGAR Filing Diff &amp;amp; Section-Level Redline Monitor&lt;/a&gt; — it monitors SEC filings and returns section-level redline diffs when a document changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API docs:&lt;/strong&gt; &lt;a href="https://apify.com/gp005/edgar-xbrl-fundamentals/input" rel="noopener noreferrer"&gt;https://apify.com/gp005/edgar-xbrl-fundamentals/input&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>datascience</category>
    </item>
  </channel>
</rss>
