---
name: sec-rss-ingestion
description: "How to get SEC EDGAR RSS feeds data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load the SEC EDGAR latest 8-K Atom feed into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/sec-rss
Provider: https://www.sec.gov/about/rss-feeds
Checked against the provider's documentation: 2026-10-30

## Access
- No account or API key.
- Declare an organization and contact address in User-Agent.

## Request
```bash
curl -A 'SignalLabExample admin@example.com' 'https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&type=8-K&output=atom'
```

## Format
Atom XML. Each entry includes a filing title, accession identifier, alternate HTML link, updated timestamp, form-type category and an HTML summary with filed date, size and any listed form items.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""SEC EDGAR latest 8-K Atom feed -> pandas -> Parquet. No key."""
import xml.etree.ElementTree as ET
import requests
import pandas as pd

URL = "https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&type=8-K&output=atom"
HEADERS = {"User-Agent": "SignalLabExample admin@example.com"}
r = requests.get(URL, headers=HEADERS, timeout=30)
r.raise_for_status()
root = ET.fromstring(r.content)
ns = {"a": "http://www.w3.org/2005/Atom"}
rows = []
for entry in root.findall("a:entry", ns):
    link = entry.find("a:link[@rel='alternate']", ns)
    category = entry.find("a:category", ns)
    rows.append({
        "title": entry.findtext("a:title", default="", namespaces=ns),
        "updated": entry.findtext("a:updated", default="", namespaces=ns),
        "form": category.get("term") if category is not None else None,
        "url": link.get("href") if link is not None else None,
        "summary": entry.findtext("a:summary", default="", namespaces=ns),
    })
df = pd.DataFrame(rows)
df["updated"] = pd.to_datetime(df["updated"], utc=True)
df.to_parquet("sec_latest_8k.parquet", index=False)
print(len(df), "8-K filings", df["updated"].min().isoformat(), "to", df["updated"].max().isoformat())
```
Run by us on 2026-10-30 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 40 8-K filings 2026-10-30T12:33:07+00:00 to 2026-10-30T16:15:22+00:00

## Limits
- No more than 10 requests/second in total, regardless of the number of machines.
- After exceeding the threshold, the request rate must remain below it for 10 minutes before access resumes.
- Observed 2026-10-30: the latest 8-K request returned 40 entries. The RSS page does not state a feed-entry limit.

## Quirks
- Atom uses the namespace http://www.w3.org/2005/Atom; namespace-aware XML paths are required.
- The entry updated timestamp is the feed event time. The summary also carries a filed date and may list 8-K item numbers.
- This is a current feed, not a historical bulk archive. Store accession links and poll timestamps, and deduplicate by accession identifier.

## Terms and attribution
- SEC.gov information may be copied or further distributed without permission; the SEC asks users to consider citing it as the source.
- Do not reuse SEC seals, logos or artwork, and do not imply affiliation or approval.
- Declare the automated client in User-Agent and follow the fair-access request ceiling.
- Terms page: https://www.sec.gov/privacy

## Sources
- https://www.sec.gov/about/rss-feeds: "you can subscribe to all filings, or filter by company, CIK, or Form Type."
- https://www.sec.gov/os/accessing-edgar-data: "Please declare your user agent in request headers:"
- https://www.sec.gov/privacy: "Current guidelines limit users to a total of no more than 10 requests per second, regardless of the number of machines used to submit requests."
- https://www.sec.gov/privacy: "Information presented on sec.gov is considered public information and may be copied or further distributed by users of the web site without the SEC’s permission."

Information for educational purposes only. Free tiers, limits and licenses belong to the providers and may change; check the provider's own terms before using the data.
