Blog · 2026-10-26

SEC RSS Feed: How to Use EDGAR's Filing Feed in Code

SEC RSS Feed: How to Use EDGAR's Filing Feed in Code
Six pages of the type=4 feed: 600 entries, 174 unique Form 4 filings.

I pulled 600 entries from the SEC's "Form 4" RSS feed. Just 174 turned out to be unique Form 4 filings.

As a developer, the SEC RSS feed you're after is EDGAR's Latest Filings feed, served as Atom from /cgi-bin/browse-edgar?action=getcurrent. It costs nothing and runs close to real time. Four things trip people up, though: pages stop at 100 entries, the form filter matches by prefix, a filing repeats once per filer role, and scripts without a declared User-Agent get a 403. Deal with those and it's solid.

Key takeaway: The SEC RSS feed developers want is EDGAR's Latest Filings Atom feed (action=getcurrent). It is free, but each page caps at 100 entries, type= is a prefix match, every filing is listed once per filer role, and scripts without a declared User-Agent get 403. Filter on the exact form, dedupe by accession number, and page until you reach a filing you have already seen.

What is the SEC RSS feed?

Four separate feeds go by the name "SEC RSS feed." Developers usually need EDGAR's Latest Filings feed, which shows new filings from every company as EDGAR accepts them. Beside it sit per-company EDGAR feeds, structured-data (XBRL) feeds refreshed every 10 minutes, and SEC news feeds carrying press releases and enforcement actions. That last group holds no company filings whatsoever.

All four are listed on the SEC's own RSS page. How they behave, it never says.

Side by side:

FeedURL starts withWhat's in itRefresh
Latest Filings/cgi-bin/browse-edgar?action=getcurrentEvery new filing, all companiesAs filings are accepted
Company feed/cgi-bin/browse-edgar?action=getcompanyOne company's filingsAs filings are accepted
Structured data/Archives/edgar/xbrlrss.all.xmlXBRL filings only, 200 itemsEvery 10 minutes
SEC news/news/pressreleases.rss and similarPress releases, speeches, enforcementWhen posted

On weekdays from 6am to 10pm Eastern, the structured-data feeds refresh every ten minutes. The SEC adds a warning that their format "may change without prior notice."

Want alerts on new filings? Latest Filings is the feed, and it's what the rest of this guide covers.

The four SEC RSS feeds
Only Latest Filings lists every new filing as it is accepted.

How do you build an EDGAR RSS feed URL?

Take the Latest Filings search and add output=atom, and you have an EDGAR feed URL. type picks the form, owner decides whether insider filings come along, count sets the page size and start pages through results. The ceiling on count is 100: on October 26, 2026 I requested 200 and received 100. What comes back is Atom XML rather than RSS 2.0.

The Form 4 URL I polled:

https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&type=4&owner=include&count=100&start=0&output=atom
ParameterValuesWhat it does
type4, 8-K, 10-K, or blankForm filter, matched as a prefix
ownerinclude, exclude, onlyInclude, drop, or isolate Forms 3, 4, 5 and 144
countup to 100Entries per page; higher values return 100
start0, 100, 200...Offset for the next page
outputatomReturns the feed instead of an HTML page

Inside each entry you'll find a title, a link to the filing index, the filed date, the accession number and an updated timestamp in Eastern time. The form type lives in the category element.

A real entry from Friday evening, trimmed:

<entry>
<title>4 - Ruddy Jordan B. (0001575426) (Reporting)</title>
<link rel="alternate" type="text/html" href="https://www.sec.gov/Archives/edgar/data/1575426/000139834426018733/0001398344-26-018733-index.htm"/>
<summary type="html"> &lt;b&gt;Filed:&lt;/b&gt; 2026-10-23 &lt;b&gt;AccNo:&lt;/b&gt; 0001398344-26-018733 &lt;b&gt;Size:&lt;/b&gt; 5 KB</summary>
<updated>2026-10-23T21:34:10-04:00</updated>
<category scheme="https://www.sec.gov/" label="form type" term="4"/>
<id>urn:tag:sec.gov,2008:accession-number=0001398344-26-018733</id>
</entry>

See "(Reporting)" at the end of that title? Most EDGAR poller bugs start right there.

Pollers should also note one header. Responses arrive with Cache-Control: no-cache, no-store and without an ETag, which rules out cheap conditional requests. You download the whole page on every poll, roughly 56 KB per 100 entries.

Why does the EDGAR feed show the same filing twice?

Every filer on a filing gets its own row in the EDGAR feed. So a Form 4 appears as "(Reporting)" for the insider, as "(Issuer)" for the company, and once more for each additional reporting owner. Across 600 Form 4 feed entries I pulled on October 26, 2026, only 174 unique Form 4 filings remained. Deduplicate on the accession number, and never on the title.

How those 600 broke down:

Alert on every entry and your script fires two or three times for one insider trade.

One line of logic fixes it. Each entry carries an id such as urn:tag:sec.gov,2008:accession-number=0001398344-26-018733. Keep whatever follows the = in a set of filings you've already handled.

Amendments work differently. Because a 4/A gets its own accession number, it counts as a new filing rather than a repeat. My six pages held six 4/A entries, while type=4/A by itself returned 22 covering the previous two days.

The owner parameter shifts the mix as well. With owner=only you get Forms 3, 4, 5 and 144 and nothing else. owner=exclude removes them, which is why type=4&owner=exclude handed me 50 424B2 prospectuses out of 100, with zero Form 4s.

How 600 feed entries became 174 Form 4 filings
One Form 4 is listed once for the insider and once for the company.

Why does type=4 return 424B2 filings?

EDGAR's feed matches the type parameter by prefix. Any form beginning with "4" matches type=4, so 424B2 prospectuses, 485BXT fund filings and 425 merger documents all land in the "Form 4" feed. Across six pages of type=4 results on October 26, 2026, actual Form 4s made up only 64.7% of entries. Check each entry's category term on your side.

Every filter I tried leaked other forms:

You asked forYou also got
type=8-K8-K/A, 8-K12B
type=10-K10-K/A
type=S-1S-1/A, S-1MEF
type=4040-APP, 40-17G, 40-24B2
type=DDEF 14A and DEFA14A proxy filings

I didn't expect the Form D row. Request private placements and proxy statements come along with them.

Timing changes the picture as well. Page one of type=4, spanning 6:30pm to 9:34pm on Friday, was 100% Form 4s. Page two, spanning 5:08pm to 6:30pm, was down to 51%.

Blame EDGAR's clock.

EDGAR runs from 6am to 10pm Eastern, yet most filings submitted after 5:30pm are dated the next day. Forms 3, 4, 5 and 144 escape that rule, which leaves the evening feed nearly all insider filings. Run your filter tests at 2pm, not 9pm.

What the type=4 feed actually returned
The evening page looks clean. The afternoon pages do not.

Is there an RSS feed for one company's SEC filings?

EDGAR has a per-company RSS feed: replace action=getcurrent with action=getcompany and pass the company's CIK or ticker. On October 26, 2026, Tesla's 8-K feed gave me 100 entries reaching back to July 2019, made up of 99 8-Ks and one 8-K/A. The 100-entry cap and the prefix match still apply, so older filings drop off.

Tesla's 8-K feed looks like this:

https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001318605&type=8-K&dateb=&owner=include&count=100&output=atom

CIK=AAPL worked for Apple as well, so you can put a ticker in that slot.

How much history the cap leaves depends on the form. With so many 8-Ks, Tesla's 100 entries stop at 2019. Its 10-K feed, by contrast, returned 22 entries reaching 2011, six of them 10-K/A amendments pulled in by the prefix match.

Entries in a company feed carry more than Latest Filings entries do: the accession number, filing date, form name and a link to the full index.

That link is worth following. Every exhibit appears on the filing index, and one investor described missing an exhibit because the web view opened only the main document.

For a fixed list of companies, the SEC's submissions JSON often does the job better. A single request to data.sec.gov/submissions/CIK0000320193.json brought back Apple's 1,002 most recent filings in 0.39 seconds, each with its acceptance time.

How fast is the SEC RSS feed?

New filings reached the SEC RSS feed a median of 35 seconds after EDGAR accepted them in my test, and 97% arrived within a minute. On the morning of October 26, 2026 I polled the Latest Filings feed every 15 seconds and timed 65 filings against their acceptance timestamps. The slowest needed 73 seconds. My polling gap is baked into those numbers, so the feed itself runs slightly faster.

Each measurement runs from the entry's updated timestamp, which is the acceptance time, to the first poll where the entry showed up.

The spread: 22 filings in under 30 seconds, 28 in 30 to 45 seconds, 13 in 45 to 60 seconds, and 2 just over a minute.

Two caveats apply. This was a quiet window, 6:04 to 6:40am, averaging about two new filings a minute. My own connection also dropped a few times, and I excluded every filing that arrived while it was down.

Something odd happened at the open. Between 5:59 and 6:04am, 38 filings accepted from Friday 8:17pm through Monday 12:15am appeared, each still stamped with its original time. SEC effectiveness notices and Form D filings made up most of them, released as EDGAR reopened.

Measure lag from the updated field and those filings look days late. At the open, don't alert on that number.

Remember the trade behind the filing, too. A Form 4 is due within two business days, so even a fast feed can deliver a trade that's two days old.

The delay bothered me far less than the 100-entry window.

Only the newest 100 entries fit on a page, and duplicate rows use up part of that space. When more than 100 entries arrive between two polls, the overflow sits on page two. Read page one alone and you'll quietly miss them.

How long new filings took to appear in the SEC feed
65 filings timed against their acceptance stamps. Most showed up within 45 seconds.

Why does SEC EDGAR return 403 Forbidden?

A 403 Forbidden from EDGAR means your request carried no User-Agent, or one that reads like a stock library or browser string. The SEC wants automated traffic to name itself with a company name and a contact email. When I tested on October 26, 2026, a blank User-Agent, curl's default and "Mozilla/5.0" each drew a 403 from the feed, while a declared name with a contact email got a 200.

The browser string was a deliberate test, since many tutorials suggest faking a browser with "Mozilla/5.0". EDGAR blocked it along with the others.

You'll find the rule in the SEC's Accessing EDGAR Data guidance. The sample header there pairs a company name with an admin email: "Sample Company Name AdminContact@<sample company domain>.com".

That page also caps traffic at 10 requests per second, totaled over every machine you run. According to the SEC, it "reserves the right to limit request rates" so access stays fair.

A 403 that shows up after a string of successful requests points to the rate limit more than the header. Slow down and back off.

SEC EDGAR responses by User-Agent
A fake browser string is blocked like no header at all.

How do you poll the SEC RSS feed in Python?

To poll the SEC's Latest Filings feed, send a declared User-Agent, keep only the exact form you want, and deduplicate on the accession number. Keep reading pages until you hit a filing from your previous poll, so a busy minute can't push entries past you. When I ran the script below on October 26, 2026, the first pass found 151 unique Form 4s and the second found zero repeats.

import time
import xml.etree.ElementTree as ET
import requests

FEED = "https://www.sec.gov/cgi-bin/browse-edgar"
HEADERS = {"User-Agent": "Your Company you@example.com"}   # required, or you get a 403
NS = {"a": "http://www.w3.org/2005/Atom"}

def new_filings(form, seen, max_pages=5):
    """Newest-first filings of exactly `form`, deduplicated by accession number."""
    found, known = [], set(seen)          # known = filings from earlier polls
    for page in range(max_pages):
        params = {"action": "getcurrent", "type": form, "owner": "include",
                  "count": 100, "start": page * 100, "output": "atom"}
        root = ET.fromstring(requests.get(FEED, params=params, headers=HEADERS, timeout=30).content)
        entries = root.findall("a:entry", NS)
        hit_seen = False
        for e in entries:
            acc = e.find("a:id", NS).text.split("=")[-1]
            if acc in known:                    # caught up with the last poll
                hit_seen = True
                continue
            if acc in seen:                     # same filing, another filer role
                continue
            if e.find("a:category", NS).get("term") != form:   # type= is a prefix match
                continue
            seen.add(acc)
            found.append((acc, e.find("a:title", NS).text, e.find("a:updated", NS).text))
        if hit_seen or len(entries) < 100:
            break
        time.sleep(0.2)                                         # stay far under 10 requests/second
    return found

Run it on a timer and store seen in a database, so restarting the poller doesn't trigger fresh alerts.

My first version had a bug that's worth seeing. It quit after a single page, because a filing's "Issuer" row looked like one it had seen already. The two sets in the code exist for that reason: one tracks earlier polls, the other tracks this pass.

When should you use webhooks instead of the SEC RSS feed?

Stick with the SEC RSS feed if you can run a poller and absorb its quirks. Pick a push service if you'd rather have new filings delivered than go fetch them. Edgrapi's webhooks POST each new insider trade, 8-K or 13D/G for up to 50 tickers to your URL, signed with HMAC-SHA256, and deliveries cost no credits. sec-api.io's real-time stream starts at $49 a month billed yearly.

OptionCostYou handleBest for
SEC Latest Filings feedFreeUser-Agent, 100 cap, prefix match, duplicates, pollingAll forms, all companies
SEC submissions JSONFreeOne request per company, pollingA watchlist of companies
Edgrapi webhooksFree deliveries, free accountAn https endpointInsider trades, 8-Ks and 13D/G on up to 50 tickers
sec-api.io streamFrom $49/mo, billed yearlyA WebSocket clientEvery filing, pushed

Webhooks aren't always the answer. The SEC feed spans every form type, while Edgrapi's webhooks handle three event types.

Need 485BXT fund filings the second they post? Poll the feed.

At scale the feed is also cheaper. Watching more forms costs nothing extra, and one poll sees the whole market. A watchlist service only knows about the tickers you've registered.

For insider buying or material events on a watchlist, though, a webhook takes away the poller, the deduplication and the 403s. Setup is covered in SEC filing webhooks.

Start with one form and one page

Aim the poller at the SEC RSS feed with type=4, print the results, and compare the count of unique accession numbers with the number of entries. When your numbers agree with the feed, add more forms. To skip the poller entirely, get a free Edgrapi key and register a webhook for your watchlist.

Frequently asked questions

How often is the SEC RSS feed updated?

The Latest Filings and company feeds change as EDGAR accepts filings, which happens from 6am to 10pm Eastern on business days. Structured-data XBRL feeds follow their own schedule: the SEC refreshes them every 10 minutes, Monday to Friday, 6am to 10pm Eastern. Weekends and federal holidays bring nothing new, so polling on a Saturday returns Friday's filings.

How many filings does the EDGAR RSS feed return?

No EDGAR feed page returns more than 100 entries, even when count is set higher. Page with the start parameter: start=100 for page two, start=200 for page three. Since a filing appears once per filer, 100 entries can represent far fewer than 100 filings. In my test, 600 entries contained 323 unique filings.

Can I get email alerts for SEC filings?

The SEC doesn't email alerts for company filings. Its email service covers SEC news rather than EDGAR filings. To get filing alerts, subscribe to a company feed in an RSS reader, write a poller against the Latest Filings feed, or use a third-party alert or webhook service that watches EDGAR on your behalf.

Does the SEC RSS feed include exhibits?

A feed entry links to the filing's index page, which lists every document in the filing, exhibits included. The documents themselves aren't inside the entry. That beats clicking through the website, which often opens just the primary document. Open the index link and download whichever exhibits you need.

Is the SEC RSS feed free to use?

Yes. The SEC charges nothing for its RSS and Atom feeds or for the submissions JSON. What it requires is a declared User-Agent with a company name and contact email, plus staying under 10 requests per second across all your machines. Scripts that skip the User-Agent get 403 Forbidden.

Should I use the RSS feed or the submissions JSON API?

Watching all companies, or one form type across the market, calls for the Latest Filings feed. Watching a fixed list of companies calls for the submissions JSON, where one request per company returns its recent filings with acceptance times. The JSON sidesteps the prefix match and duplicate rows, but each company needs its own poll.

Get a free API key