M&A Tender Offers and Merger Proxies
Tender offers, going-private transactions, merger proxies and deal registration statements - SC TO, SC 14D9, SC 13E3, S-4/F-4 and PREM/DEFM proxies - one row per filing with both sides of the deal, the registration it is filed on, and the deal's own stated transaction value where the filer tagged a filing-fee exhibit.
edgar_deal_events - the dataset name to pass to the Obscura API.
What one row means
One **merger / change-of-control document** filed on EDGAR: a registration of the securities issued in a business combination (`S-4`, `F-4`), a tender offer (`SC TO-T`, `SC TO-I`, `SC TO-C`), the target board's response to one (`SC 14D9`, `SC14D9C`), the proxy or information statement that puts a merger to a vote (`PREM14A`, `DEFM14A`, `PREM14C`, `DEFM14C`), or a going-private transaction (`SC 13E3`). These are LOW-COUNT, HIGH-SIGNAL. Measured over two full quarters (2015 Q2 and 2024 Q2 `form.idx`): **4,608 index rows carrying 1,901 distinct submissions**, i.e. ~950 per quarter and ~3,800 a year, against 70,018 Rule 425 communications since 2015. A `PREM14A` is routinely the FIRST detailed public document on a deal - ahead of the definitive proxy - and tender offers (`SC TO-T` + `SC 14D9`) are an entire deal category with no coverage at all today. **The header shape is BIMODAL, and the schema says which one a row is rather than averaging them.** The Williams Act schedules name two parties - `SUBJECT COMPANY:` (the target) and `FILED BY:` (the offeror) - so the row is a dated, directed offeror → target edge, exactly like a Rule 425 communication. The registration statements and merger proxies name **only their own registrant**: verified live on `0001104659-24-045287` (Asure Software `S-4`), `0001193125-24-095515` (Catalent `DEFM14A`), `0001193125-24-096376` (Landos `PREM14A`) and `0001193125-24-095445` (Agiliti `DEFM14C`) - every one carries `FILER:` blocks and **no** `SUBJECT COMPANY:` block at all. `party_structure` states which shape the row is, and the counterparty of a registrant-only row is recovered by JOINING on `registration_file_number`, never by guessing. See `docs/datasets/edgar_deal_events.md`.
One row per One row per deal document, keyed by its ACCESSION. The key is the accession and NOT the archive path because EDGAR indexes one submission under one path PER associated CIK, and this family fans out further than any other: measured over 2015 Q2 + 2024 Q2, 4,608 index rows carry only 1,901 distinct submissions, and ONE S-4 (0001571049-15-002892, Yuba Aviv L.L.C.) appears under 500 separate co-registrant paths. SC TO-T and SC TO-T/A are 2.00 rows per accession every time - the offeror's path and the subject's - while SC 14D9, SC TO-I and DEFM14A are exactly 1.00. Keying on the path would store one guarantor-heavy S-4 as 500 rows and every genuine tender-offer edge twice..
Point-in-time availability
Every Obscura dataset carries available_date: the calendar day the publisher made the row
available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the
same thing on every dataset in the catalog.
For edgar_deal_events: filing_join: available_date is the EDGAR DISSEMINATION day, taken from the bronze object's own day partition, never from the header's FILED AS OF DATE. These documents carry no embargo - a deal filing is public the day EDGAR disseminates it - but the header's legal filing date is NOT that day, measured in BOTH directions inside this family: accession 0001838126-24-000032 (HPS Corporate Lending Fund, SC TO-I) is stamped FILED AS OF DATE 20240501 and appears in master.20240502.idx and in NEITHER master.20240430.idx NOR master.20240501.idx, so dating it from the header is a one-day look-ahead; accession 0001096199-15-000039 (Geeknet, SC 14D9) was accepted 2015-05-26 17:48:15 after the daily cutoff and SEC rolled its legal date FORWARD to 20150527.
Refresh cadence
Obscura refreshes edgar_deal_events every 6 hours - the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.
Schema - 34 columns
The full public column list for edgar_deal_events, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/edgar_deal_events.
| Column | Type | Description |
|---|---|---|
| accession | text · not null | PK. SEC accession number of the submission, e.g. `0001104659-24-041703`. The key is the accession, not the archive path: EDGAR lists a two-party Schedule TO under the offeror's CIK path AND the subject's, and a co-registered `S-4` under one path per guarantor - up to 500 of them on a single accession. |
| filename | text · not null | The FILING party's SEC EDGAR Archives path for this submission (`edgar/data/{filer_cik}/{accession}.txt`), derived from the payload's own filing-party CIK rather than from whichever index row was walked - so it is the same value on every ingestion path. The join key into `edgar_filings`. |
| available_date | date | Public availability date: the EDGAR DISSEMINATION day, recovered from the bronze object's day partition. A deal filing IS a publication, so this is both when it happened and when it could be read; it is the point-in-time anchor and the only date a backtest may key on. |
| accepted_at | timestamp with time zone | When SEC ACCEPTED the submission (`<ACCEPTANCE-DATETIME>`), US-Eastern wall clock stored under a UTC type. Deliberately NOT the availability date: an after-cutoff acceptance is disseminated the next business day (`0001096199-15-000039`, accepted 2015-05-26 17:48:15, legally dated 2015-05-27). NULL on a row ingested from the dissemination feed rather than from Archives - the feed's PDS envelope does not carry this stamp, so a NULL here is a fact about the envelope and not a decoder gap. |
| filed_as_of | date | SEC's LEGAL filing date for the submission (`FILED AS OF DATE`), which is what a Williams Act or proxy-rule deadline means by "filed". Kept for parity with `edgar_filings`; never an availability date - SEC both back-dates it (measured one day on `0001838126-24-000032`) and rolls it forward past an after-cutoff acceptance (measured on `0001096199-15-000039`). |
| form_type | text · not null | The EDGAR form type literal, verbatim: `S-4`, `S-4/A`, `S-4MEF`, `F-4`, `F-4/A`, `F-4MEF`, `SC TO-T`, `SC TO-T/A`, `SC TO-I`, `SC TO-I/A`, `SC TO-C`, `SC 14D9`, `SC 14D9/A`, `SC14D9C`, `SC 13E3`, `SC 13E3/A`, `PREM14A`, `DEFM14A`, `PREM14C`, `DEFM14C`. Note that `SC14D9C` has no space and the other `SC ` forms do - SEC's own spelling, preserved rather than normalised. |
| document_kind | text · not null | What KIND of deal document this is, derived from `form_type` alone and therefore never guessed: `merger_registration` (S-4/F-4 - the securities issued as consideration), `tender_offer_third_party` (SC TO-T - an outside bidder), `tender_offer_issuer` (SC TO-I - the company bidding for its OWN shares), `tender_offer_communication` (SC TO-C), `target_response` (SC 14D9 - the board's recommendation), `target_response_communication` (SC14D9C), `merger_proxy` (PREM14A/DEFM14A/PREM14C/DEFM14C), `going_private` (SC 13E3). **`tender_offer_issuer` is NOT a change of control** and is flagged distinctly for that reason - 276 of the 677 Schedule TO filings measured over the two probed quarters are `SC TO-I`, and the population is dominated by closed-end-fund and BDC periodic repurchase offers (PIMCO, Aetos, HPS, Audax, Hamilton Lane) plus corporate self-tenders and split-off exchange offers (Cummins/Atmus). |
| stage | text · not null | Where in the deal's document sequence this filing sits, derived from `form_type` alone: `preliminary` (PREM14A/PREM14C - filed before SEC review, routinely the FIRST detailed public document on a deal), `definitive` (DEFM14A/DEFM14C - the version actually mailed to holders), `pre_commencement` (SC TO-C/SC14D9C - written material published before the offer formally begins), `as_filed` (everything else). Amendment status is carried separately by `is_amendment` so the two facts never have to be untangled from one string. |
| is_amendment | boolean · not null | TRUE when `form_type` ends in `/A` - an amendment to an earlier filing of the same family rather than a new one. The COMMON case for tender offers: 401 of 677 Schedule TO filings and 282 of 368 `SC TO-T` filings measured over the two probed quarters are amendments, because a tender offer is amended on every extension and every price change. Derived, and the derivation is enforced by a CHECK rather than trusted. |
| party_structure | text · not null | Which parties the SGML header actually names, stated structurally so a consumer never has to infer it: `counterparty` (a `SUBJECT COMPANY:` block and a `FILED BY:` block naming DIFFERENT CIKs - a genuine offeror → target edge), `self_filed` (both blocks naming the SAME CIK - an issuer self-tender, or a target responding about itself), `registrant_only` (NO `SUBJECT COMPANY:` block at all - every S-4/F-4 and every merger proxy), `subject_only` (a subject named with no identified filing party). Derived from the CIK pair, and the derivation is enforced by a CHECK. |
| subject_cik | bigint | Central Index Key of the company the filing is ABOUT - the TARGET of a tender offer, the company being taken private, the issuer repurchasing its own shares. From the header's `SUBJECT COMPANY:` / `<SUBJECT-COMPANY>` block. **NULL on every S-4, F-4 and merger proxy**, because those submissions carry no such block; that is a fact about the form, not a gap, and `party_structure` says so. |
| subject_name | text | Subject company name as EDGAR conforms it, e.g. `Inland Real Estate Income Trust, Inc.`. |
| subject_sic_code | integer | The SUBJECT company's SIC code, read from its own header block - the industry of the thing being acquired. An unscoped read of the header would return the same code for both parties on a two-party filing and silently record the acquirer as being in the target's industry. |
| subject_state_of_incorporation | text | Subject's domicile from its own header block, e.g. `DE`, `MD`, `C9` (Belgium), `E9` (Cayman). The offshore codes are what identify a cross-border or inversion structure. |
| subject_file_number | text | The subject's SEC file number on this filing. On a Williams Act schedule this is the `005-` TENDER OFFER file number (`005-90261`), which is the stable per-target key that links every `SC TO-T`, `SC TO-T/A` and `SC 14D9` of one offer together. `001-`/`000-` (Exchange Act listing) and `811-` (Investment Company Act) also occur. |
| filer_cik | bigint | Central Index Key of the party that FILED the document - the OFFEROR on an `SC TO-T`, the registrant issuing the consideration securities on an `S-4`, the company soliciting the vote on a merger proxy, the target itself on an `SC 14D9`. From `FILED BY:` / `<FILED-BY>`, falling back to the general `FILER:` block that single-party submissions use instead. |
| filer_name | text | Name of the filing party as EDGAR conforms it, e.g. `COMRIT INVESTMENTS 1, LIMITED PARTNERSHIP`. |
| filer_sic_code | integer | The FILING party's SIC code, read from its own header block. NULL when that block states none, which really happens on investment vehicles and foreign filers. |
| filer_state_of_incorporation | text | The filing party's domicile from its own header block. |
| filer_file_number | text | The filing party's SEC file number. On an `S-4` this is the `333-` SECURITIES ACT REGISTRATION the deal registers on (`333-278589`) - the key that links the registration statement to every Rule 425 communication about the same deal. |
| registration_file_number | text | The `333-` Securities Act registration this filing belongs to - the filer's own number when it is one (every `S-4`/`F-4`), else the subject's, else NULL. **This is how the counterparty of a registrant-only row is recovered**: `edgar_merger_communications.registration_file_number` carries the same number on every Rule 425 communication about the same deal, so joining on it names the other side from a document that DOES state both parties, rather than guessing one out of prose. Derived, and the derivation is enforced by a CHECK. |
| group_members | jsonb · not null | JSON array of the names in the header's `GROUP MEMBERS:` lines - the members of the bidding or buyout group who are party to the filing but do not have their own header block. **NAMES ONLY: EDGAR states no CIK for a group member**, so these are unresolved strings and must not be treated as identifiers. This is where the real buyers of a going-private hide: `0001144204-15-030844` (deltathree `SC 13E3`) is filed by the TARGET about itself, so the party pair is degenerate, and `D4 ACQUISITION, INC.` and `D4 HOLDINGS, LLC` appear only here. Empty array when the header names none. |
| group_member_count | integer · not null | Number of `GROUP MEMBERS:` names on the filing (0, 1 for the Gilead/CymaBay merger sub, 2 for the deltathree buyout vehicles). A non-zero value on a `self_filed` row is the signal that the real counterparty is in `group_members` rather than in `filer_cik`. |
| co_registrant_ciks | jsonb · not null | JSON array of `{cik, name, file_number}` for the SECOND and subsequent `FILER:` blocks - the guarantor subsidiaries co-registering a business-combination shelf. Empty on a two-party Williams Act schedule, which uses `SUBJECT COMPANY:`/`FILED BY:` and has no `FILER:` block at all. |
| co_registrant_count | integer · not null | Number of co-registrants beyond the primary one. Usually 0, but this family has the most extreme fan-out on EDGAR: 60 on `0001193125-24-151983` (WBP Leasing) and 499 on `0001571049-15-002892` (Yuba Aviv). It is the guard against fanning one registration statement into 500 rows, and a cheap proxy for a guaranteed-debt exchange offer as opposed to a corporate merger. |
| references_429 | text | The earlier registration this statement folds into under Securities Act Rule 429 (`REFERENCES 429:` in the header, e.g. `333-254140`) - a combined prospectus covering securities registered on a previous statement as well. Present only on registration statements, and NULL on the Williams Act schedules and proxies, which have no such concept. |
| document_count | integer | Number of documents in the submission (`PUBLIC DOCUMENT COUNT:`) - a size/complexity proxy: 1 for a bare `SC 13E3` cover, 15 for a Schedule TO with its offer to purchase, letter of transmittal and eight images. |
| exhibit_types | jsonb · not null | Ordered JSON array of the submission's document types, e.g. `["S-4","EX-5.1","EX-23.1","EX-FILING FEES","GRAPHIC"]`. The manifest is kept; the bodies are NOT - a merger proxy runs to 1.5-22 MB of prose and images (measured: `0001213900-24-013589`, 21.9 MB) against ~1 KB of signal per row. |
| has_transaction_agreement | boolean · not null | TRUE when an `EX-2.x` (merger / business-combination / purchase agreement) rides on the submission - the filing publishes the EXECUTED deal document rather than describing it. |
| has_filing_fee_exhibit | boolean · not null | TRUE when the submission carries an `EX-FILING FEES` document - SEC's Exhibit 107 "Calculation of Filing Fee Tables", a structured cover-page table rather than prose. This is a HEADER-ONLY fact (it is read off the document manifest) and is therefore total and exact, which is what makes it the honest gate on the three monetary columns below: measured present on 5 of 5 sampled 2024 filings and 0 of 3 sampled 2015 filings, so those columns are populated on the modern era and NULL before it. |
| transaction_valuation | numeric | **The deal's own stated size, in USD**, from the `Total Transaction Valuation` line of the `EX-FILING FEES` exhibit - the value SEC's filing fee is computed on under Exchange Act Rule 0-11. Read ONLY from that labelled line in that document type, so it is the filer's own number and not an inference: `$17,010,000` on the Comrit / Inland REIT tender offer, `$1,379,088,054.30` on the Cummins/Atmus split-off exchange offer, `$214,409,599` on the Landos merger proxy. NULL - deliberately, and NULL beats a wrong number - whenever the submission carries no `EX-FILING FEES` document (everything before Exhibit 107 existed), whenever that exhibit states no such line (**every S-4 and F-4**, whose fee table states a `Total Offering Amount` instead - a different quantity, kept in its own column), and whenever the line carries no `$` amount. |
| offering_amount | numeric | **NOT a deal value.** The `Total Offering Amount` line of a registration statement's `EX-FILING FEES` exhibit - the maximum aggregate price of the SECURITIES BEING REGISTERED as consideration, which is a floor on the equity leg of a stock deal and says nothing about cash, debt assumed or the target's total value. `$95,562,500` on the Asure Software `S-4`. Kept in a separate column from `transaction_valuation` precisely because collapsing the two would publish a registered-share amount as a transaction size. |
| filing_fee | numeric | The fee SEC charged for the filing, in USD, from the `Total Fees Due for Filing` line of the same exhibit. Useful as a cross-check on `transaction_valuation`: the two are related by the published annual fee rate (`0.00014760` for FY2024), so a row where the ratio is off is a parse to distrust. |
| primary_description | text | The filer's own label for the primary document (`<DESCRIPTION>` on sequence 1), e.g. `SCHEDULE TO-T`, `FORM SC TO-C`, `S-4`. Free text and NOT a controlled vocabulary - useful as a document-kind hint only, since `document_kind` above is derived from the form type instead. |
Access edgar_deal_events
Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.
import obscura
client = obscura.Client("obs_live_…")
df = client.query(
dataset="edgar_deal_events",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 122 datasets
Frequently asked questions
What is in the edgar_deal_events dataset?
Tender offers, going-private transactions, merger proxies and deal registration statements - SC TO, SC 14D9, SC 13E3, S-4/F-4 and PREM/DEFM proxies - one row per filing with both sides of the deal, the registration it is filed on, and the deal's own stated transaction value where the filer tagged a filing-fee exhibit. One **merger / change-of-control document** filed on EDGAR: a registration of the securities issued in a business combination (`S-4`, `F-4`), a tender offer (`SC TO-T`, `SC TO-I`, `SC TO-C`), the target board's response to one (`SC 14D9`, `SC14D9C`), the proxy or information statement that puts a merger to a vote (`PREM14A`, `DEFM14A`, `PREM14C`, `DEFM14C`), or a going-private transaction (`SC 13E3`). These are LOW-COUNT, HIGH-SIGNAL. Measured over two full quarters (2015 Q2 and 2024 Q2 `form.idx`): **4,608 index rows carrying 1,901 distinct submissions**, i.e. ~950 per quarter and ~3,800 a year, against 70,018 Rule 425 communications since 2015. A `PREM14A` is routinely the FIRST detailed public document on a deal - ahead of the definitive proxy - and tender offers (`SC TO-T` + `SC 14D9`) are an entire deal category with no coverage at all today. **The header shape is BIMODAL, and the schema says which one a row is rather than averaging them.** The Williams Act schedules name two parties - `SUBJECT COMPANY:` (the target) and `FILED BY:` (the offeror) - so the row is a dated, directed offeror → target edge, exactly like a Rule 425 communication. The registration statements and merger proxies name **only their own registrant**: verified live on `0001104659-24-045287` (Asure Software `S-4`), `0001193125-24-095515` (Catalent `DEFM14A`), `0001193125-24-096376` (Landos `PREM14A`) and `0001193125-24-095445` (Agiliti `DEFM14C`) - every one carries `FILER:` blocks and **no** `SUBJECT COMPANY:` block at all. `party_structure` states which shape the row is, and the counterparty of a registrant-only row is recovered by JOINING on `registration_file_number`, never by guessing. See `docs/datasets/edgar_deal_events.md`.
How do I avoid look-ahead bias with edgar_deal_events?
Filter on edgar_deal_events.available_date, the day the publisher made the row public. For this dataset that date is derived as follows - filing_join: available_date is the EDGAR DISSEMINATION day, taken from the bronze object's own day partition, never from the header's FILED AS OF DATE. These documents carry no embargo - a deal filing is public the day EDGAR disseminates it - but the header's legal filing date is NOT that day, measured in BOTH directions inside this family: accession 0001838126-24-000032 (HPS Corporate Lending Fund, SC TO-I) is stamped FILED AS OF DATE 20240501 and appears in master.20240502.idx and in NEITHER master.20240430.idx NOR master.20240501.idx, so dating it from the header is a one-day look-ahead; accession 0001096199-15-000039 (Geeknet, SC 14D9) was accepted 2015-05-26 17:48:15 after the daily cutoff and SEC rolled its legal date FORWARD to 20150527. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get edgar_deal_events?
As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="edgar_deal_events". The column schema is public at https://api.obscura.trade/v1/catalog/edgar_deal_events.
Can I filter edgar_deal_events by company or symbol?
Yes. edgar_deal_events carries subject_cik, the column the API's symbols filter resolves against.
How often is edgar_deal_events updated?
Obscura refreshes edgar_deal_events on a every 6 hours schedule - that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.