Aperiodic
DataFactors
Catalog
Pricing
Get Started

Atlas · Open source · MIT

One name for every crypto instrument

Atlas is a free crypto security master. It maps every spot, perpetual and futures contract on Binance, Bybit, OKX and Hyperliquid to one normalized ID, keeps the ones that were delisted, and refreshes itself every day.
instruments
17,000+
delisted, with end dates
11,000+
history from
2019
refresh, committed to git
Daily

Same market, different names

Crypto has no CUSIP, no ISIN in practice and no central body handing out tickers. Every venue invented its own scheme, so the BTC/USDT linear perpetual has a different name on each of them, and the same string can mean two different instruments on a single venue: on Bybit, BTCUSDT is both a spot pair and a perpetual.

Binance USDⓈ-Mbtcusdt
BybitBTCUSDT
OKXBTC-USDT-SWAP
Atlasperpetual-BTC-USDT:USDT

Join the three by hand and the code works until it silently doesn't: a spot pair merged into a perp, an inverse contract read as linear, a listing that disappears from a backtest because it was renamed. Atlas does the mapping once, in the open, for everyone.

Why it matters

Backtests that remember the dead

Exchange APIs only list what trades today. A 2022 study of 3,904 cryptocurrencies found 39.5% were eventually delisted, and that dropping them biased equal-weighted portfolio returns by 62% a year and overstated the size premium by half (Ammann et al.). Atlas keeps every delisted instrument with the day it stopped trading, so you can rebuild the universe as it was on any date.

Tickers are not identities

Different tokens share tickers, and tickers get renamed and reused (CoinDesk on USDP, BCH and BSV). Atlas keys every instrument on the venue and its native ID, and tags Binance assets with a CoinMarketCap ID, so 1000PEPE on one venue and PEPE on another resolve to the same asset.

Contract specs, not just names

One OKX PEPE-USDT-SWAP contract is 10,000,000 PEPE. Bybit's BTCUSD is margined in BTC, not dollars. Get either wrong and position sizes and PnL are off by orders of magnitude. Atlas records contract size, margin asset and delivery date next to the ID.

Cross-venue in one call

Funding arbitrage, basis, lead-lag and liquidity routing all start with the same question: where else does this contract trade? With a shared ID it is a lookup, not a weekend of regular expressions.

Reference data should be a commons

Every quant team, data vendor and exchange aggregator rebuilds this map, usually privately and usually with the same bugs. A shared, reviewable one means fixes land once and help everyone, and research written against it is reproducible by anyone.

An audit trail for free

The snapshots are plain JSON in git. Every listing, delisting and correction is a commit you can diff, blame and pin, so a backtest can name the exact version of the universe it ran on.

The symbology

<type>-<symbol>-<denominator>[:<margin>][-<delivery_yyyymmdd>]
type
spot, perpetual or future.
symbol
The base asset, as the venue lists it (1000PEPE stays 1000PEPE).
denominator
The quote currency the price is in.
:margin
The collateral and settlement asset. Derivatives only; this is what tells a linear contract from an inverse one.
-yyyymmdd
The delivery date. Dated futures only.
VenueNative IDAtlas ID
Binance spotBTCUSDTspot-BTC-USDT
Bybit inverseBTCUSDperpetual-BTC-USD:BTC
Bybit futuresBTCUSDT-27MAR26future-BTC-USDT:USDT-20260327
Binance COIN-MBTCUSD_PERPperpetual-BTC-USD:BTC
Hyperliquid HIP-3flx:TSLAperpetual-FLX:TSLA-USDH:USDH

What each record holds

The native ID, the normalized parts, contract size, underlying (crypto, equity, index, commodity or pre-market for tokenized and HIP-3 markets), CoinMarketCap ID and category where known, and the listing window: first_capture and, once it stops trading, end_date.

{
  "id": "btcusdt",
  "type": "perpetual",
  "internal_id": "perpetual-BTC-USDT:USDT",
  "symbol": "BTC",
  "denominator": "USDT",
  "margin": "USDT",
  "contract_size": 1.0,
  "underlying": "crypto",
  "cmc_id": 1,
  "category": ["Layer 1"],
  "first_capture": "2019-11-17T00:00:00.000Z"
}

Quick start

Python 3.12 or later. The snapshots are bundled, so lookups are local dictionary reads with no network calls and no key.

pip install git+https://github.com/aperiodic-io/atlas
github ↗
example.py
from datetime import datetime
from atlas import SecurityMaster

sm = SecurityMaster.load()  # ships with the snapshots, no network needed

# Three venues, three names, one contract
sm.by_exchange_and_original_id("binance-futures", "btcusdt")
sm.by_exchange_and_original_id("bybit-perps", "BTCUSDT")
sm.by_exchange_and_original_id("okx-perps", "BTC-USDT-SWAP")
# -> 'perpetual-BTC-USDT:USDT' each time

# Every perpetual that traded at any point in 2022,
# including the ones delisted since
universe = sm.symbol_ids(
    exchange="binance-futures",
    first_capture=datetime(2022, 1, 1),
    end_date=datetime(2022, 12, 31),
)

# The full record: contract size, margin asset, CMC ID, listing window
sm.instrument_metadata("okx-perps", "PEPE-USDT-SWAP")

Kept up to date, in public

  1. 01Fetch

    Every day at 02:00 UTC, a GitHub Action pulls instrument lists from the Binance and OKX APIs directly and from Tardis for the rest.

  2. 02Merge

    New listings are parsed into Atlas IDs, delistings get an end date, and fields a source stops sending are kept rather than wiped.

  3. 03Enrich

    New Binance listings are matched to CoinMarketCap IDs. Only matches with name evidence are written; ambiguous ones open a pull request for review.

  4. 04Commit

    The updated snapshots are committed to the repository, with tests guarding every parser.

Coverage

Binance

  • Spotsince 2019
    binance-spot
  • USDⓈ-M futuressince 2019
    binance-futures
  • COIN-M futuressince 2020
    binance-futures-cm

Bybit

  • Spotsince 2021
    bybit-spot
  • Perpetualssince 2019
    bybit-perps
  • Dated futuressince 2021
    bybit-futures

OKX

  • Spotsince 2019
    okx-spot
  • Perpetualssince 2019
    okx-perps
  • Dated futuressince 2019
    okx-futures

Hyperliquid

  • Spotsince 2024
    hyperliquid-spot
  • Perpetuals, HIP-3 includedsince 2024
    hyperliquid-perps

Spot, perpetuals and dated futures. Beta parsers for 20+ more venues are in the repository and join the daily refresh once they are stable.

The symbology behind Aperiodic

Every Aperiodic metric and raw file is keyed by an Atlas ID, so symbol="perpetual-BTC-USDT:USDT" means the same thing in our API as it does in your own data. Use Atlas to line up your fills, positions and other vendors' data with ours, or with nothing of ours at all.

FAQ

Star it, fork it, fix it

Atlas gets better every time someone adds a venue, corrects a contract size or flags a mapping. Issues and pull requests are welcome.

Aperiodic

Crypto microstructure, liquidity & flow metrics — built from hundreds of terabytes of raw data, distilled into point-in-time metrics you can pull as parquet files. Plus the raw trades, quotes and derivatives data behind them.

Registered office
Aperiodic Limited
136 Capel StreetDublin, D01 T2C9Ireland
Registered in Ireland · Company No. 815273

© Copyright 2026 Aperiodic. All Rights Reserved.

Product
  • Data Catalog
  • Pricing
  • API Docs
  • Notebooks
  • Find new alpha
  • Roadmap
  • Changelog
  • FAQ
  • For AI Agents
  • Atlas Security Master
Metrics
  • Order Flow
  • L1 — Top of Book
  • L2 — Order Book
  • Market Data
  • Derivatives
  • Raw Data
Channels
  • Blog: Research Insights
  • Microstructure Guide
  • Data vendors compared
  • Aperiodic vs. Tardis
  • Aperiodic vs. CoinGlass
  • Aperiodic vs. Kaiko
  • Aperiodic vs. Amberdata
  • LinkedIn
Company
  • Contact
  • Book a call
  • Terms of Service
  • Privacy Policy
  • LLM? Read this.

Provided for informational purposes only; not investment advice, a recommendation, or an offer to transact. Past performance is not indicative of future results.