Obscura

Bank Structured Note Offerings

Bank structured-note offerings as published in their pricing supplements: issuer and guarantor, the underlying asset or assets, CUSIP and ISIN, principal amount, coupon, the barrier and call thresholds, the pricing, issue and maturity dates, the dealer's commission and the issuer's own estimated value of the note.

edgar_structured_notes - the dataset name to pass to the Obscura API.

Category Regulatory Columns 33 Refresh Every 6 hours Entity key issuer_cik Point-in-time available_date

What one row means

One **note offering document** - the paper an issuer files to take a tranche of notes down off its shelf registration, on any of the four forms it may appear under: `424B2`, `424B3`, `424B5` and `FWP`. 1,357,653 filings since 2015 - `424B2` alone is 35 % of the EDGAR backlog by count - and the only place a US structured note's issuer, guarantor, CUSIP, offering size, denomination, issuer-modelled value and pricing / issue / maturity dates are all stated in one public document. The prose is NOT stored: 540 MB of parsed fields against 78 GB of text for `424B2`, plus a further 28-58 GB of text for `424B3` against 64 MB parsed, which is far past the exporter's practical ceiling. The bronze tarball retains every byte, so a later parser change is a replay rather than a re-scrape. # What a row IS, precisely One row per FILING - not per note. A single note produces several rows over its life: one or more `FWP` term sheets, one or more preliminary supplements (`is_preliminary = true`, terms indicative, pricing date in the FUTURE), then the final. They are separate submissions with separate accessions, and they are separate, genuinely-dated public documents. **Measured on one note** - Citigroup CUSIP `17331A5K3`, "Pricing Supplement No. 1,796"-style lifecycle: `424B2` `0000950103-24-005133` (preliminary, 2024-04-10), `FWP` `0000950103-24-005134` and `0000950103-24-005135` (term sheets, 2024-04-11, filed once per registrant), `424B2` `0000950103-24-005600` (final, 2024-04-23). Four accessions, four rows, one CUSIP - which is exactly why the key is the ACCESSION and never the CUSIP. Consumers who want priced deals filter `is_preliminary = false AND form_type = '424B2'`; consumers who want the marketing window need the `FWP` rows. # The two admission rules, and why they differ Rule 424(b)(2) also covers ordinary debt and equity takedowns - measured at roughly 5 % of a dissemination day's 424B2 population (ConocoPhillips notes, a Diamondback Energy senior-notes tranche, a Province of Ontario bond). Those rows exist with NULL note terms rather than being classified out by a prose heuristic: every discriminator tried on the 49-filing probe corpus produced both false positives and false negatives, and a wrong classification is worse than a NULL. That holds because the FILING IS THE OFFERING EVENT under 424(b)(2). It does not hold for the other three. A Rule 433 `FWP` is a marketing communication that may accompany ANY offering (ABS collateral summaries, commodity- and crypto-trust brochures, proprietary-index methodology decks); `424B5` is overwhelmingly follow-on equity and ATM programmes; `424B3` is overwhelmingly a microcap RESALE registration. Those are admitted only where the document identifies the security - a check-valid CUSIP/ISIN, a decoded issuer-estimated value, or a maturity date paired with a per-security price. A refused filing yields NO ROW, which is what keeps this table from filling with nulls. See `docs/datasets/edgar_structured_notes.md`.

One row per One row per note-offering FILING - a 424B2, 424B3 or 424B5 prospectus supplement, or an FWP term sheet - keyed by its ACCESSION. The key is the accession and NOT the archive path because EDGAR indexes one filing under one path PER associated CIK, and a co-registered shelf takedown associates BOTH the issuing finance subsidiary and its guaranteeing parent: measured on master.20240410.idx, 328 424B2 index rows carry 197 distinct supplements, and on master.20240411.idx, 574 rows carry 347 - 227 of the 347 are two-path. Keying on the path would double-count two thirds of the modern corpus. Nor is the CUSIP the key: a single note yields SEVERAL rows over its life and they are separate filings with separate accessions - measured on Citigroup CUSIP 17331A5K3, which carries four (424B2 preliminary 0000950103-24-005133 on 2024-04-10, FWP 0000950103-24-005134 and 0000950103-24-005135 on 2024-04-11, 424B2 final 0000950103-24-005600 on 2024-04-23). form_type and is_preliminary distinguish them..

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_structured_notes: 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 (SEC moves it in both directions). occurred_on is the note's PRICING DATE, which on a preliminary supplement is in the FUTURE - Citigroup 0001481057-24-004996 was disseminated 2024-04-11 and prices 2024-04-19 - so occurred_is_forecast is set and the usual occurred_on <= available_date monotonicity does not apply to those rows. Measured publication lag on a priced supplement: Morgan Stanley 0001839882-24-011104 is dated and prices 2024-04-08, was accepted 2024-04-10 10:34:12 and appears in the 2024-04-10 daily index - a genuine two-day lag, which is the rule working.

Refresh cadence

Obscura refreshes edgar_structured_notes 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 - 33 columns

The full public column list for edgar_structured_notes, with the meaning of every field. The same schema is served unauthenticated at https://api.obscura.trade/v1/catalog/edgar_structured_notes.

ColumnTypeDescription
accessiontext · not nullPK. SEC accession number of the supplement, e.g. `0001839882-24-011104`. The key is the accession, not the archive path: EDGAR lists a co-registered takedown under the issuer's CIK path AND the guarantor's.
filenametext · not nullThe ISSUER's SEC EDGAR Archives path for this supplement (`edgar/data/{issuer_cik}/{accession}.txt`), derived from the payload's own registrant blocks 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_datedatePublic availability date: the EDGAR DISSEMINATION day, recovered from the bronze object's day partition. The point-in-time anchor and the only date a backtest may key on. It is NOT the document's own "Dated …" line, which on a priced supplement is up to two days earlier.
occurred_ondateThe note's PRICING DATE (the `Pricing date:` / `Trade date:` term), when its economic terms are struck against the underlier's close. On a PRELIMINARY supplement this is a planned FUTURE date and `occurred_is_forecast` is set. NULL when the supplement states no pricing date at all - which is correct and common on a preliminary that leaves the date blank, and far better than a guess. Parsed prose, so evidence class C by construction.
occurred_is_forecastboolean · not nullTRUE when `occurred_on` is a PLANNED date rather than a settled one, so monotonicity checks skip the row. Set when the supplement is preliminary, or when the stated pricing date is later than the dissemination day. The migration CHECKs exactly this biconditional rather than trusting the writer.
accepted_attimestamp with time zoneWhen SEC ACCEPTED the submission (`<ACCEPTANCE-DATETIME>`), US-Eastern wall clock stored under a UTC type. Provenance, never an availability date: an after-hours acceptance is disseminated the next morning. NULL on a row ingested from the dissemination feed - the PDS envelope does not carry this stamp, so a NULL is a fact about the envelope and not a decoder gap.
filed_as_ofdateSEC's LEGAL filing date (`FILED AS OF DATE`). Kept for parity with `edgar_filings`; NEVER an availability date - SEC both back-dates it and rolls it forward past an after-hours acceptance.
issue_datedateSettlement date (`Original issue date:` / `Issue date:` / `Settlement date:`), typically pricing plus three business days. NULL when the supplement leaves it blank, which preliminaries routinely do.
maturity_datedateScheduled maturity (`Maturity date:` / `Stated maturity date:`). Stored as the date alone: on a callable note the document prefixes it "Unless earlier redeemed", and the qualifier belongs to the payoff, not to the date.
form_typetext · not nullThe submission's form type - one of `424B2`, `424B3`, `424B5`, `FWP`. All four publish the SAME economic object (a note offering off a shelf) but with different certainty and different admission rules: a `424B2` is admitted on the form, because Rule 424(b)(2) exists only to complete a takedown priced on a delayed basis, so the filing IS the offering event. The other three carry note offerings among a majority of other things and are admitted only where the document identifies the security - measured note share over 554 accessions on six dissemination days spanning 2016-2025: `FWP` 80%, `424B3` 36%, `424B5` 9%. An `FWP` row is a Rule 433 free writing prospectus, i.e. a term sheet bracketing the `424B2` for the same note; filter on this column to separate the marketing document from the prospectus supplement.
issuer_cikbigintCentral Index Key of the note's ISSUER - typically a finance subsidiary (`Morgan Stanley Finance LLC`, `Citigroup Global Markets Holdings Inc.`, `GS Finance Corp.`). Identified STRUCTURALLY as the registrant whose SEC file number carries a co-registrant suffix (`333-275587-01`), because on every co-registered supplement measured the header writes the guaranteeing PARENT first and a positional read would record the guarantor as the issuer. On a single-registrant supplement (UBS AG, Barclays Bank PLC) it is that registrant.
issuer_nametextIssuer name as EDGAR conforms it.
issuer_file_numbertextThe issuer's own SEC file number on this supplement - the suffixed co-registrant number (`333-275587-01`) when there is a guarantor, else the bare shelf number.
guarantor_cikbigintCentral Index Key of the GUARANTOR - the parent bank whose credit the note actually carries (`Morgan Stanley`, `Citigroup Inc.`, `The Goldman Sachs Group, Inc.`). The registrant holding the BARE shelf file number when the supplement has two or more registrants. NULL when the bank issues directly and there is no guarantee, which is the norm for UBS AG, Barclays Bank PLC and the Canadian banks.
guarantor_nametextGuarantor name as EDGAR conforms it.
file_numbertextThe `333-` SHELF the takedown comes off, without a co-registrant suffix (`333-275587`). Joins to `edgar_effectiveness_notices` (the EFFECT that made the shelf usable) and to `edgar_dilution_events`.
registrant_countinteger · not nullNumber of registrant blocks in the submission header - 1 for a direct issuer, 2 for the ordinary issuer + guarantor pair. Also the fan-out of this accession across the daily index, which is why the row is keyed on the accession.
is_preliminaryboolean · not nullTRUE when the supplement is PRELIMINARY and its terms are indicative - from the document's own banner (`SUBJECT TO COMPLETION`, `preliminary pricing supplement`, `Preliminary Terms Supplement`, `Indicative Terms`). Distinct from `occurred_is_forecast`: that flags the DATE, this flags the TERMS. A preliminary's coupon reads "(to be determined on the pricing date)" and its CUSIP is often a literal `[ ]` placeholder - measured on three UBS supplements - which is stored as NULL, never as the placeholder.
cusiptextThe note's 9-character CUSIP, e.g. `61776LNV5`. Accepted only when the token's CUSIP CHECK DIGIT verifies, which is what makes it safe to recover from a transposed terms table where the label and the value are in different rows. Sources, in order: a `US`-prefixed ISIN in the document (positions 3..11 ARE the CUSIP), then a check-valid token near a `CUSIP` mention, then the filer's `<DESCRIPTION>` label. NULL on a preliminary that prints a `[ ]` placeholder and on a non-note takedown.
isintextThe note's ISIN, e.g. `US61776LNV52`, when the document prints one.
aggregate_principal_amountdouble precisionSize of the offering in `currency` units, e.g. `950000`. Read ONLY from an auditable source - see `aggregate_amount_source`. The fee exhibit's Rule 457 TABLE is deliberately not read: it is a transposed grid whose value row cannot be aligned to its header without a real table parser, and on a multi-tranche exhibit (Diamondback, three tranches) any single number picked out of it would be wrong.
aggregate_amount_sourcetextWHICH source supplied `aggregate_principal_amount`: `filing_fees_ixbrl` (an `ffd:NrrtvMaxAggtOfferingPric` inline-XBRL fact), `filing_fees_prose` (the Exhibit 107 sentence "The maximum aggregate offering price of that offering is $X"), or `terms_block` (an explicitly AGGREGATE-qualified label in the supplement's own terms table). Recorded because the sources do not always agree and a silent precedence rule is unauditable. NULL exactly when the amount is NULL - the migration CHECKs the biconditional.
currencytextISO-4217 code of the currency the parsed amounts are stated in, from the currency SYMBOL the document prints (`$`→USD, `€`→EUR, `£`→GBP, `¥`→JPY, `C$`→CAD, `A$`→AUD). NULL when no amount was parsed. Recorded rather than assumed: a supplement stating a non-USD size must not be silently recorded as dollars.
denominationdouble precisionPer-security face amount (`Stated principal amount:` / `Principal Amount:`), essentially always `1000`, but `10` on the UBS retail shape - which is exactly why it is stored rather than assumed, since every per-security figure below is quoted against it.
issue_pricedouble precisionPrice to public per security (`Issue price:` / `Original issue price:`).
estimated_valuedouble precisionThe ISSUER'S OWN MODEL VALUE per security on the pricing date (`961.20` against a `1000` issue price) - the embedded-fee measure, and the single most analytically valuable number in the document. Populated only when the supplement states a POINT value; a preliminary states a RANGE instead, which lands in `estimated_value_low`/`estimated_value_high`. The migration refuses a row that sets both.
estimated_value_lowdouble precisionLow end of the issuer's estimated-value RANGE when the supplement gives one ("expected to be between $885 and $925 per $1,000 face amount") - the normal shape on a preliminary, where the value cannot be known until pricing. Paired with `estimated_value_high`; the migration CHECKs that they are both present or both absent and correctly ordered.
estimated_value_highdouble precisionHigh end of the issuer's estimated-value range. See `estimated_value_low`.
document_countintegerNumber of documents in the submission (`PUBLIC DOCUMENT COUNT:`). A size proxy: most of it is `GRAPHIC` payoff diagrams, 576 KB to 3 MB per filing, which are read past and never stored.
exhibit_typesjsonb · not nullOrdered JSON array of the submission's document types, e.g. `["424B2","EX-FILING FEES","GRAPHIC","GRAPHIC"]`. The manifest is kept; the bodies are not.
has_filing_fee_exhibitboolean · not nullTRUE when an `EX-FILING FEES` (Exhibit 107) member rides on the submission - the fee exhibit that carries the offering size. Measured present on 10 of 49 probe filings, all of them 2024: the exhibit is a post-2021 requirement, so this is also a vintage marker.
primary_descriptiontextThe filer's own `<DESCRIPTION>` label for the primary document - `PRICING SUPPLEMENT NO. 1,667`, `PRELIMINARY PRICING SUPPLEMENT`, `PSARC 405`, or an internal desk code that sometimes carries the CUSIP or ISIN outright. Free text and NOT a controlled vocabulary; kept because it corroborates `is_preliminary` and is a third identifier source.
document_truncatedboolean · not nullTRUE when only the leading 4 MiB of the primary document was read, because the whole of it would have stalled the walk. On such a row a NULL term means "not in the part that was read", NOT "not stated" - which is why this is a column and not a silent behaviour. It exists for the `424B3` tail: p99 submission is 30.5 MB and the sizing pass's largest sample was a single 67 MB HTML file (a unit investment trust's whole portfolio, `up_20170916-095205-0.htm`). Everything this parser reads is on the cover page, so 4 MiB is 27x the p90 `424B2` payload and 1.4x the largest primary document in the 554-filing probe corpus; expect this to be TRUE on well under 1% of rows and effectively never outside `424B3`.

Access edgar_structured_notes

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_structured_notes",
    symbols=["NVDA", "AAPL"],
    start="2024-01-01",
)

Create a free account Browse all 122 datasets

Frequently asked questions

What is in the edgar_structured_notes dataset?

Bank structured-note offerings as published in their pricing supplements: issuer and guarantor, the underlying asset or assets, CUSIP and ISIN, principal amount, coupon, the barrier and call thresholds, the pricing, issue and maturity dates, the dealer's commission and the issuer's own estimated value of the note. One **note offering document** - the paper an issuer files to take a tranche of notes down off its shelf registration, on any of the four forms it may appear under: `424B2`, `424B3`, `424B5` and `FWP`. 1,357,653 filings since 2015 - `424B2` alone is 35 % of the EDGAR backlog by count - and the only place a US structured note's issuer, guarantor, CUSIP, offering size, denomination, issuer-modelled value and pricing / issue / maturity dates are all stated in one public document. The prose is NOT stored: 540 MB of parsed fields against 78 GB of text for `424B2`, plus a further 28-58 GB of text for `424B3` against 64 MB parsed, which is far past the exporter's practical ceiling. The bronze tarball retains every byte, so a later parser change is a replay rather than a re-scrape. # What a row IS, precisely One row per FILING - not per note. A single note produces several rows over its life: one or more `FWP` term sheets, one or more preliminary supplements (`is_preliminary = true`, terms indicative, pricing date in the FUTURE), then the final. They are separate submissions with separate accessions, and they are separate, genuinely-dated public documents. **Measured on one note** - Citigroup CUSIP `17331A5K3`, "Pricing Supplement No. 1,796"-style lifecycle: `424B2` `0000950103-24-005133` (preliminary, 2024-04-10), `FWP` `0000950103-24-005134` and `0000950103-24-005135` (term sheets, 2024-04-11, filed once per registrant), `424B2` `0000950103-24-005600` (final, 2024-04-23). Four accessions, four rows, one CUSIP - which is exactly why the key is the ACCESSION and never the CUSIP. Consumers who want priced deals filter `is_preliminary = false AND form_type = '424B2'`; consumers who want the marketing window need the `FWP` rows. # The two admission rules, and why they differ Rule 424(b)(2) also covers ordinary debt and equity takedowns - measured at roughly 5 % of a dissemination day's 424B2 population (ConocoPhillips notes, a Diamondback Energy senior-notes tranche, a Province of Ontario bond). Those rows exist with NULL note terms rather than being classified out by a prose heuristic: every discriminator tried on the 49-filing probe corpus produced both false positives and false negatives, and a wrong classification is worse than a NULL. That holds because the FILING IS THE OFFERING EVENT under 424(b)(2). It does not hold for the other three. A Rule 433 `FWP` is a marketing communication that may accompany ANY offering (ABS collateral summaries, commodity- and crypto-trust brochures, proprietary-index methodology decks); `424B5` is overwhelmingly follow-on equity and ATM programmes; `424B3` is overwhelmingly a microcap RESALE registration. Those are admitted only where the document identifies the security - a check-valid CUSIP/ISIN, a decoded issuer-estimated value, or a maturity date paired with a per-security price. A refused filing yields NO ROW, which is what keeps this table from filling with nulls. See `docs/datasets/edgar_structured_notes.md`.

How do I avoid look-ahead bias with edgar_structured_notes?

Filter on edgar_structured_notes.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 (SEC moves it in both directions). occurred_on is the note's PRICING DATE, which on a preliminary supplement is in the FUTURE - Citigroup 0001481057-24-004996 was disseminated 2024-04-11 and prices 2024-04-19 - so occurred_is_forecast is set and the usual occurred_on <= available_date monotonicity does not apply to those rows. Measured publication lag on a priced supplement: Morgan Stanley 0001839882-24-011104 is dated and prices 2024-04-08, was accepted 2024-04-10 10:34:12 and appears in the 2024-04-10 daily index - a genuine two-day lag, which is the rule working. 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_structured_notes?

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_structured_notes". The column schema is public at https://api.obscura.trade/v1/catalog/edgar_structured_notes.

Can I filter edgar_structured_notes by company or symbol?

Yes. edgar_structured_notes carries issuer_cik, the column the API's symbols filter resolves against.

How often is edgar_structured_notes updated?

Obscura refreshes edgar_structured_notes 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.

Related datasets

CFTC Commitments of Traders (COT)The CFTC's weekly Commitments of Traders report: how commercial, non-commercial and small traders are positioned in each… EPA Environmental Enforcement ActionsEnvironmental enforcement actions and penalties from the EPA's ECHO database. One row per case, with the facility, the s… EPA Regulated Facilities and ComplianceEPA-regulated facilities and their compliance history, from ECHO: one row per facility, with location, industry, permit … 13F Filing MetadataMetadata for every 13F report, the quarterly filing where large institutional managers list their U.S. equity holdings. … 13F Institutional HoldingsThe line-item positions inside each 13F: which manager held which security, and how much, each quarter. Deep history is … 13F Other Included ManagersWhich other manager reports a fund's 13F holdings, from the 13F-NT notices managers file when their positions appear on … SEC 8-K Item Codes and Material EventsThe item numbers reported on each 8-K (5.02 officer changes, 2.01 acquisitions, 1.01 material agreements, and so on), so… Asset-Backed Securities Distributions (Form 10-D)Form 10-D distribution reports for asset-backed securities: which trust paid out, for which distribution period, its dep…