# Data: what is published and how to fetch it

Canonical: https://halfonadouble.com/data
Data through: 2026-10-02 close
Publisher: Half on a Double

Everything shown on the ticker pages, screens and chart comes from one
public series of derived aggregates, published after every trading day.

## What is in the series

One CSV per ticker, one row per trading day, columns:

| Column                      | Meaning                                                |
| --------------------------- | ------------------------------------------------------ |
| `date`                      | trading day, `YYYYMMDD`                                |
| `close`                     | underlying close                                       |
| `delta_neutral`             | [delta neutral price](/learn/delta-neutral-level)      |
| `gamma_neutral`             | price where summed gamma is zero                       |
| `gamma_max`                 | [gamma max price](/learn/gamma-max)                    |
| `gamma_max_value`           | summed gamma at gamma max                              |
| `n_contracts`               | listed contracts on the ticker                         |
| `total_calls`, `total_puts` | listed call and put contracts                          |
| `total_open_interest`       | [open interest](/learn/open-interest) across the chain |
| `oi_calls`, `oi_puts`       | open interest split by option side                     |
| `max_pain_near`             | max pain for the nearest listed expiration             |
| `max_pain_near_expiry`      | expiration used by `max_pain_near`                     |
| `max_pain_all`              | max pain with all listed expirations pooled            |
| `gex_total`                 | signed whole-chain gamma exposure at the close         |
| `gex_flip`                  | confirmed price where signed GEX crosses zero          |
| `call_wall`, `put_wall`     | strikes carrying the largest call/put GEX magnitude    |

History begins 2020-12-01. Roughly 5,600 tickers have a row on a given day;
about 8,700 have appeared at some point.

## How to fetch it

Fetch `https://halfonadouble.com/api/v1/history/<SYMBOL>.csv`, replacing
`<SYMBOL>` with an uppercase symbol from the [ticker inventory](/api/v1/tickers.json).
This same-origin endpoint follows the active publication atomically and is the
supported route for browsers, crawlers and agents. It supports `GET`, `HEAD`,
range requests and conditional requests. Ticker files may be cached for up to
four hours. Data lands after each close, typically before 05:00 UTC the next
day.

The separate data host is an upstream storage implementation detail. Its
blanket robots policy remains in place because the bucket also contains
objects outside this public derived series; automated readers should use the
same-origin endpoint above.

## JSON API

The read-only [OpenAPI description](/openapi.json) documents stable JSON
representations for exact numeric retrieval:

- [Publication metadata](/api/v1/series.json) states the active methodology,
  data-through date and URL templates.
- [Ticker inventory](/api/v1/tickers.json) lists canonical page symbols and
  which ones have Markdown snapshots.
- `/api/v1/tickers/<SYMBOL>.json` returns one current snapshot and its displayed
  historical summaries.
- `/api/v1/analysis/<SYMBOL>.json` returns the complete same-date derived
  advanced-options analysis when that symbol is covered by the analytics feed.
- `/api/v1/screens/<SCREEN>.json` and
  [level-distance rankings](/api/v1/rankings/level-distance.json) return the
  same ordered results shown on their canonical pages.

Ticker JSON history summaries include the latest daily open-interest change in
contracts, its z-score against the preceding 252 valid changes, and the actual
comparison-session count. The `unusual-open-interest-accumulation` screen
selects positive changes at or above `+2σ`.

Every response includes a schema version, data-through date, methodology,
units or field-specific unit names, canonical links and explicit nulls.

## Advanced options analytics

The site joins a separate versioned end-of-day feed only when its trading date
exactly matches the core Half on a Double publication. A compact feature table
drives the screens and catalyst ranking; complete per-ticker JSON carries every
derived analysis displayed by the options analytics service: gamma walls, max
pain by strike, volatility surface and smile, term structure, expected move,
put/call skew, modeled dealer positioning, Greeks heatmap, risk reversal,
vanna, charm, net delta, straddle pricing, volume profile, IV contours,
butterfly spread and IV history.

The raw contract-level chain is not copied into this feed. It is licensed source
data, not an analysis, and is unnecessary for the published rankings. Feed
coverage is every ticker with an option chain in the producer's dated snapshot;
the exact count is published
in the feed manifest and reflected by which ticker snapshots have an
`advanced_options` object.

`methodology` in the publication metadata is part of the data contract. The September 2026
`market-implied-carry-v1` generation recomputes the full history and replaces
the former fixed-0.25% series. Do not concatenate rows cached from the legacy
path with rows from the active generation.

## Licence

The published levels are derived aggregates and are yours to use for
personal, non-commercial research with a link back to the page or this
site. Bulk republication, resale, or use in a product needs permission
first; ask through the [contact page](/contact). Full terms are in the
[terms of use](/terms).

## What is not published

The underlying per-contract data (quotes, implied volatilities, greeks per
strike) is licensed end-of-day options data and is not redistributed. Only
quantities that cannot be converted back into that data are public.

## Related

[Methodology](/methodology) · [Learn](/learn) · [Disclaimer](/disclaimer)
