Source: https://databento.com/docs/datasets/opra-pillar


# OPRA

**Dataset ID**: [OPRA.PILLAR]($PLATFORM_HOSTNAME/catalog/opra/OPRA.PILLAR)

OPRA disseminates top-of-book, last sale, and daily statistics data for all US equity options
exchanges through their Binary Output feed, which Databento receives over UDP multicast in our
NY4 data center.

The [OPRA Pillar Output Specification](https://cdn.opraplan.com/documents/OPRA_Pillar_Output_Specification.pdf) is available as a PDF from the OPRA website.

### Timestamps

OPRA messages received by Databento include at most one timestamp, which has nanosecond precision.
As with all of our datasets, we also collect a `ts_recv` timestamp when the packet was received by
our capture server. The unused `ts_in_delta` field is set to `0` for all messages.

| Databento Field | OPRA Field | Description |
| `ts_recv` | N/A | The capture-server-received timestamp. |
| `ts_event` | Block Timestamp | The consolidator-processed timestamp. |

More details about our timestamps are available in our [timestamping guide](https://databento.com/docs/architecture/timestamping-guide.md).

### Venues

OPRA includes consolidated data for 20 options venues (as of September 2026).
The `publisher_id` field on every record from Databento can be used to identify the venue
associated with a trade event.

| Value | MIC | Venue |
| 20 | AMXO | NYSE American |
| 21 | XBOX | BOX Options |
| 22 | XCBO | Cboe Options |
| 23 | EMLD | MIAX Emerald |
| 24 | EDGO | Cboe EDGX Options |
| 25 | GMNI | Nasdaq GEMX |
| 26 | XISX | Nasdaq ISE |
| 27 | MCRY | Nasdaq MRX |
| 28 | XMIO | MIAX Options |
| 29 | ARCO | NYSE Arca Options |
| 30 | OPRA | Options Price Reporting Authority |
| 31 | MPRL | MIAX Pearl |
| 32 | XNDQ | Nasdaq Options |
| 33 | XBXO | Nasdaq Texas Options |
| 34 | C2OX | Cboe C2 Options |
| 35 | XPHL | Nasdaq PHLX |
| 36 | BATO | Cboe BZX Options |
| 37 | MXOP | MEMX Options |
| 61 | SPHR | MIAX Sapphire |
| 108 | MXTO | MEMX MX2 Options |
| 109 | IEXO | IEX Options |

> **Info**
>
> These mappings are also available programmatically through the
> [metadata.list\_publishers](https://databento.com/docs/api-historical/metadata/metadata-list-publishers.md) endpoint.

### Trades

Trade records are published with the `publisher_id` corresponding to the venue where the trade occurred.
OPRA does not disseminate the side of a trade, so `side` will always be `N`.
The [TCBBO schema](https://databento.com/docs/schemas/tbbo.md#consolidated-bbo-on-trade-tcbbo) can be used to see the NBBO at the time of the trade.

### CMBP-1

Along with the 20 options venues, OPRA also publishes the OPRA consolidated BBO. This
consolidated BBO is available through Databento as the [CMBP-1 schema](https://databento.com/docs/schemas/mbp-1.md#consolidated-market-by-price-cmbp-1). OPRA
generates this consolidated BBO based on the following criteria in this order:

- **Price**: Venues with the highest bid and lowest offer have overall priority. Minimum
             price increments must be at least 1 cent higher or lower than the previous price.
- **Size**: Largest size takes precedence when multiple venues submit the same bid and/or
            offer price. There are no initial minimum size requirements. Size increments must be
            10 contracts or better than the previous size.
- **Time**: Earliest time takes precedence when multiple venues submit the same bid and/or
            offer price with the same size.

> **See also**
>
> More information on the OPRA consolidated BBO can be found in the [OPRA BBO
> Guidelines FAQ](https://cdn.opraplan.com/documents/OPRA_BBO_Guidelines.pdf)

OPRA consolidated BBO records are published with a `publisher_id` value of 30 (`OPRA_PILLAR_OPRA`).
These records indicate the venues containing the best bid and best offer by including their
respective `publisher_id` in the `bid_pb_00` and `ask_pb_00` fields.

Trade records are published with the `publisher_id` corresponding to the venue where the trade
happened.

Databento does not publish BBO records for regional quotes.

> **See also**
>
> [Examples - US equity options volume by venue](https://databento.com/docs/examples/options/options-venues.md)

### Historical CMBP-1 requests

Due to the large quantity of data for the CMBP-1 schema, we recommend users request a batch
download via [batch.submit_job](https://databento.com/docs/api-historical/batch.md) or the [User portal](https://databento.com/docs/portal/batch-download.md).

### Live CMBP-1 subscriptions

Due to the large quantity of data for the CMBP-1 schema, the [slow reader behavior](https://databento.com/docs/api-live/basics/slow-reader-behavior.md)
of CMBP-1 subscriptions will always be set to `skip` regardless of client settings.

### Symbology

OPRA Pillar raw symbols are based on OCC symbology, also known as Options Symbology Initiative
(OSI) symbology. These two terms are interchangeable.

In OCC symbology, every raw symbol has exactly 21 characters and is composed of four parts.
Using the SPY November 17, 2023 $486.00 put option (`SPY   231117P00486000`) as an example, these are:

| Component | Name | Description |
| `SPY ` | Parent symbol | The right space-padded six-character [parent symbol](https://databento.com/docs/conventions/symbology.md#parent). Often the symbol of the underlying, but not always such as with `SPXW` (SPX weekly options). |
| `211117` | Expiration date | The YYMMDD expiration date of the option. |
| `P` | Put or call | Whether the option is a `C`all or `P`ut. |
| `00486000` | Strike | The zero-padded eight-digit strike price with three decimal places. |

### Adjusted symbol conventions

Under OSI symbology, the parent symbol in most cases will be the same as the stock symbol. For example,
`MSFT` will be the parent symbol for the underlying security `MSFT`. However, the parent symbol
may change based on corporate actions.

If a parent symbol change is necessary in a contract adjustment (e.g. in a 3-for-2 split), the
symbol `MSFT` will change to `MSFT1`, with the numeric suffix identifying this option as an adjusted,
"non-standard" contract. If the standard 100 share contract (`MSFT`) is reintroduced after the adjustment
and another adjustment is subsequently necessary to this contract, then the adjusted symbol
would use the next numeric suffix not already in use. For example, if `MSFT` and `MSFT1` are active
contracts, `MSFT` could change to `MSFT2` if another adjustment is necessary.

Parent symbol changes are necessary if the adjusted contract becomes "non-standard", i.e.,
containing a deliverable different from the "standard" option contract originally listed by an
exchange. However, in some contract adjustments, the adjusted contracts remain identical to
standard contracts (e.g. in a 2-for-1 split where the resulting contracts remain 100 share options).
In these cases, the parent symbol would not change.

See [OCC's memo](https://infomemo.theocc.com/infomemos?number=26853) on contract adjustments for more details.
In addition, OCC provides a [searchable list of symbol adjustments](https://infomemo.theocc.com/infomemo/search-memo).

### Expirations

OPRA only provides date-granularity expiration data so the `expiration` field in the
[definition schema](https://databento.com/docs/schemas/instrument-definitions.md) will always be at UTC midnight even when the option expires during or
after the trading day.

### Differences between live and historical data

The `instrument_id` to `raw_symbol` mappings are not the same between live and historical data. The live
`instrument_id` mappings are stable within a week, while the historical mappings can change.

### Data prior to 2023-03-28

Data prior to 2023-03-28 was not generated from OPRA packet captures, but from subsampled data. This leads to the following differences on the data for those dates:
* The `cmbp-1`, `cbbo-1s` and `tcbbo` schemas are not available. The highest granularity available for BBO data is the `cbbo-1m` schema.
* Due to not being generated from packet captures, the `ts_recv` field has the event timestamp, and `F_BAD_TS_RECV` is always set.
* The `bid_pb_00` and `ask_pb_00` fields do not contain the venue which is showing the NBBO.
* The `statistics` schema only has information for Open Interest, which is published on an aggregated basis.

### Flags normalization

The `F_PUBLISHER_SPECIFIC` flag provides no additional meaning in this dataset and can be safely ignored.
