---
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."

## Help improve this skill
Missing a source, or see something to improve? Call the MCP tool suggest_source or feedback (or POST /api/suggest or /api/feedback). Reviewed ideas: https://signal-lab-jet.vercel.app/agent-suggestions

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.
