Tracking M&A deals from SEC filings: a typed JSON feed
When two public companies agree to a deal, the news hits the tape first, but the record hits EDGAR. The target files an 8-K saying it signed a definitive agreement, and over the following weeks both sides file the proxy material that takes the deal to a shareholder vote. If you run merger arbitrage, build a deal-monitoring tool, or just want to know the moment a name in your book gets a bid, those filings are the ground truth, earlier and more precise than a headline, and they say exactly what was signed.
The catch is that a single deal does not arrive as one tidy "merger" record. It arrives as a handful of differently-shaped forms, filed under different CIKs, spread across the deal's life.
Where a deal shows up in EDGAR
There are two surfaces, and a complete picture needs both.
The first is the 8-K. When a company signs a merger agreement, it reports it under item 1.01, "entry into a material definitive agreement," within four business days. That is the fastest signal: the announcement, machine-readable, usually the same day the deal is public. The same item 1.01 also fires for financing agreements and big commercial contracts, so the item code tells you a material agreement exists, not that it is specifically a merger; you read the 8-K or the follow-on proxy to confirm which.
The second surface is the proxy trail. A merger that needs a shareholder vote generates its own forms:
| Form | What it is |
|---|---|
| 425 | Prospectus / communication about a business combination |
| PREM14A | Preliminary merger proxy statement |
| DEFM14A | Definitive merger proxy statement |
| DEFA14A | Additional proxy soliciting material |
These are unambiguous: a DEFM14A is only ever a merger going to a vote. They come later than the 8-K, but they carry the terms, the board's reasoning, and the timeline. Watch the 8-K for the announcement and the proxy forms for everything that follows.
Why it is awkward as data
Pull a company's submissions feed from data.sec.gov and the forms come back as
parallel arrays of bare strings. Reconstructing a deal from that means doing
several jobs at once:
- Recognize the merger forms by string.
425,PREM14A,DEFM14A,DEFA14Aare the live set, and the proxy variants are easy to confuse with the ordinaryDEF 14Aannual meeting proxy, which is not a merger at all. - Find item 1.01 inside the 8-K. The item arrives as a comma-joined string like
1.01,9.01, so you are substring-matching a code out of a list and deciding whether the rest of the filing is noise. - Watch both sides. The agreement can be reported by the target, the acquirer, or both, under separate CIKs. If you only track one ticker you miss half the trail.
- Gate on the right timestamp. The useful time is
acceptanceDateTime, when the filing went public, notfilingDate, a calendar date that buckets a whole day together.
None of this is hard. It is just the kind of glue that quietly breaks when the SEC adds a form or a deal is structured in a way your string matching did not anticipate, and a missed DEFM14A is a missed deal.
The typed shape
EDGAR Events does the recognition and hands back labeled JSON. The 8-K announcement comes through as an 8-K event with item 1.01 already parsed:
{
"event_type": "8-K",
"form": "8-K",
"ticker": "...",
"company": "...",
"filed_date": "2026-06-22",
"accepted": "2026-06-22T12:41:08.000Z",
"items": [
{ "code": "1.01", "label": "entry into material definitive agreement", "material": true },
{ "code": "9.01", "label": "financial statements and exhibits", "material": false }
],
"summary": "8-K: 1.01 (entry into material definitive agreement); 9.01 (financial statements and exhibits)",
"material": true,
"accession": "...",
"filing_url": "https://www.sec.gov/Archives/edgar/data/.../...",
"source": "submissions"
}
The proxy filings come through with event_type set to merger and the form
labeled:
{
"event_type": "merger",
"form": "DEFM14A",
"ticker": "...",
"company": "...",
"filed_date": "2026-07-10",
"accepted": "2026-07-10T21:03:55.000Z",
"summary": "definitive merger proxy",
"material": true,
"accession": "...",
"filing_url": "https://www.sec.gov/Archives/edgar/data/.../...",
"source": "submissions"
}
Every merger form maps to a plain label: 425 is a merger communication,
PREM14A a preliminary merger proxy, DEFM14A a definitive merger proxy,
DEFA14A additional soliciting material. You branch on event_type and
form, not on a string-matching table you maintain.
Pulling it
For the announcement, filter the 8-K stream to item 1.01 across the names you care about:
curl -s -H "X-API-Key: $EDGAR_KEY" \
"https://api.edgarevents.com/filings?ticker=WBD,PARA,LYV&type=8-K&item=1.01"
For the proxy trail, ask for the specific form:
curl -s -H "X-API-Key: $EDGAR_KEY" \
"https://api.edgarevents.com/filings?ticker=WBD,PARA,LYV&type=DEFM14A"
Or pull everything typed for a name and branch on event_type in your own code;
8-K, merger, activist_stake, and ipo_or_prospectus all come back from the
same call:
curl -s -H "X-API-Key: $EDGAR_KEY" \
"https://api.edgarevents.com/filings/WBD?hours=168"
hours sets the lookback up to a week, material=true drops the routine forms,
and since takes an ISO timestamp if you are polling on a cursor.
Push, don't poll
Deals do not wait for your next poll. Register a webhook for the 8-K and merger streams and matching filings are POSTed to you within seconds:
curl -s -X POST -H "X-API-Key: $EDGAR_KEY" -H "Content-Type: application/json" \
-d '{"event_types":["8-K","merger"],"tickers":["WBD","PARA","LYV"],"material_only":true,"url":"https://your-app.com/hooks/edgar"}' \
"https://api.edgarevents.com/webhooks"
You get every material 8-K and every merger form for those tickers; in your
handler, check event_type == "merger" or scan items for code 1.01 to route
the deal-relevant ones. Each delivery is signed with HMAC-SHA256 in the
X-Edgar-Signature header, so you can verify it before acting.
Do you need this?
If you are happy owning the form-string set, the item-1.01 substring match, the
both-sides CIK dedup, and a polling loop against the SEC rate limit, a library
like edgartools gets you the raw filings for free. What you pay for here is not
having to keep that glue alive: the merger forms stay recognized as the SEC
revises them, item 1.01 is parsed and labeled the same way every time, and a
signed event is pushed to you instead of you diffing the submissions feed on a
timer.
It is $29/month, self-serve, live from data.sec.gov, cancel anytime. Grab a key
at edgarevents.com; the full interactive reference is
at api.edgarevents.com/docs.
SEC filings, already parsed.
Typed JSON for 8-K item codes, SC 13D activist stakes, IPO forms and merger proxies. $29/mo, self-serve, cancel anytime.