Realtap Data
The tables behind this site, for programs: every swap, candle, pool, NFT sale and stake pool as a cursor you walk, 10,000 rows a page, instead of one page load per wallet. It is cheaper than scraping and kinder to us both, and the page-rendering path stays for people.
Three ways to get the data
Cursor exports
nowWalk a whole table with after, or poll it with since. JSON, ndjson or CSV.
Batch lookups
nowUp to 100 wallets in one request: value, tokens and profit and loss.
Nightly files and firehose
comingParquet and CSV files per dataset every night, and a live stream of trades with a resume cursor.
Plans
| Free sample | Data | Data Pro | |
|---|---|---|---|
| Price | $0 | $49 / month, $490 / year | $199 / month, $1,990 / year |
| Market datasets | last 24 h or first 1,000 rows | full history | full history |
| Rows a page | 1,000 | 10,000 | 10,000 |
| Derived datasets (leaderboard, hot wallets, address labels) | top 100 | top 100 | full |
| Batch wallet lookup | 5 wallets | 100 wallets | 100 wallets |
| API key, per minute | 120 | 3,000 | 6,000 |
| API key, per day | 10,000 | 5,000,000 | 20,000,000 |
| Site plan included | Free | Pro | Pro |
Prices are in US dollars; paying in ADA is quoted at the rate of the moment you create the payment. A free caller is never refused: it gets the sample and a note saying what was left out. The plans for people (alerts, tax exports, the boards) are on Plans & pricing.
How to buy
- Get a key: send
/apikeyto the Realtap Telegram bot, or create one under Account. No wallet is needed for the Telegram key. - Pay in ADA: create a payment intent. You get the exact amount and the treasury address; send exactly that and the plan is active once the payment is confirmed, usually within a minute.
- Or pay by card: ask for a Stripe Checkout link and open the
urlit returns. You come back to this page when it is done.
ADA
curl -X POST -H "x-api-key: $KEY" -H "content-type: application/json" \
-d '{"plan":"data","period":"month","currency":"ada"}' \
https://realtap.app/api/billing/intentsThen look for the payment with the id the first call returned (it also confirms by itself):
curl -H "x-api-key: $KEY" https://realtap.app/api/billing/intents/<id>
Card
curl -X POST -H "x-api-key: $KEY" -H "content-type: application/json" \
-d '{"plan":"data","period":"month"}' \
https://realtap.app/api/billing/stripe/checkoutUse "plan": "datapro" for Data Pro and "period": "year" for the yearly price. The key you paid with is raised to the new limits as soon as the plan is active.
The datasets (15)
GET https://realtap.app/api/v1/export/{dataset} with after, limit, since, until, format (json, ndjson, csv) and the filters below. append tables only grow: walk once, then poll with since.snapshot tables change in place: read them again when you need them fresh.
SwapsswapsappendData
Every DEX swap order the indexer has seen, with its settlement: what went in, what came out, the price after execution, the wallet behind it.
- Order
- slot, then id
- Free sample
- the last 24 hours, 1,000 rows a page
- Updated
- within a block of the chain tip
- Filters
pool: one pool id (e.g. 1234)dex: one DEX name as the site shows it (e.g. minswap_v2)unit: swaps in or out of one token (policy id + asset name, hex)status: pending, settled or cancelled; default settled
| Column | Type | Meaning |
|---|---|---|
| id | integer | Swap id: with slot, the cursor order |
| slot | integer | Slot of the order transaction (mainnet: unix time = slot + 1591566291) |
| time | timestamp | Time of the order transaction |
| tx_hash | string | The order transaction |
| output_index | integer | Output of the order in that transaction |
| pool_id | integer, may be null | The pool (pools.id); null when the order named none we know |
| dex | string | DEX as stored: Minswap, MinswapV2, SundaeSwapV3, Splash, WingRiders, … |
| status | string | pending, settled or cancelled |
| side | string, may be null | buy or sell of the pool's token B (the token of an ADA pool); null when not known |
| in_unit | string | Token sent in: policy id + asset name (hex), lovelace for ADA |
| out_unit | string | Token asked for, as in_unit |
| in_amount | number | Amount sent in, in whole tokens (raw units divided by the token's decimals; ADA in ADA) |
| min_receive | number, may be null | Least amount of out_unit the order accepts, whole tokens |
| out_amount | number, may be null | Amount of out_unit received, whole tokens; null until settled or when not read |
| price | number, may be null | Pool price after execution: token A per token B, decimal-adjusted (ADA per token on ADA pools) |
| volume_ada | number, may be null | ADA value of the swap; null when not known |
| dex_fees_ada | number, may be null | Batcher and DEX fee the order paid, ADA |
| sender_skh | string, may be null | Stake key hash (hex) of the wallet; its stake1… address is the bech32 of e1 + this |
| sender_pkh | string, may be null | Payment key hash (hex) of the wallet |
| settled_slot | integer, may be null | Slot of the transaction that executed or cancelled the order |
| settled_time | timestamp, may be null | Time of that transaction |
| settled_tx_hash | string, may be null | That transaction |
CandlescandlesappendData
One-minute OHLCV candles per pool: open, high, low, close, volume in ADA and in the base token, trade counts, TVL. Roll them up yourself to any interval.
- Order
- pool id, then time
- Free sample
- the last 24 hours, 1,000 rows a page
- Updated
- every minute
- Filters
pool: one pool id (recommended: a walk of every pool is millions of rows) (e.g. 1234)
| Column | Type | Meaning |
|---|---|---|
| pool_id | integer | The pool (pools.id): with time, the cursor order |
| time | timestamp | Start of the minute |
| open | number | Pool price at the first trade or state of the minute: token A per token B, decimal-adjusted (ADA per token on ADA pools) |
| high | number | Highest pool price in the minute |
| low | number | Lowest pool price in the minute |
| close | number | Pool price at the end of the minute |
| volume_ada | number | ADA value traded in the minute |
| volume_base | number | Token B traded in the minute, whole tokens |
| trades | integer | Settled swaps in the minute |
| buys | integer | Of them, buys of token B |
| sells | integer | Of them, sells of token B |
| tvl_ada | number, may be null | Pool TVL at the minute, ADA |
PoolspoolssnapshotData
Every liquidity pool: DEX, the two tokens, LP token, reserves, fee, TVL and price now, when it was created.
- Order
- id
- Free sample
- the first 1,000 pools by id
- Updated
- reserves within a block of the chain tip
- Filters
dex: one DEX name (e.g. minswap_v2)unit: pools of one token
| Column | Type | Meaning |
|---|---|---|
| id | integer | Pool id (the id other datasets use): the cursor order |
| dex | string | DEX as stored: Minswap, MinswapV2, SundaeSwapV3, Splash, SnekFun, … |
| kind | string | amm, stable, cl (concentrated liquidity), curve (launchpad bonding curve) or orderbook |
| identifier | string | The DEX's own identifier of the pool |
| address | string | Address of the pool |
| order_address | string, may be null | Address orders for the pool are sent to, where it differs |
| token_a_unit | string | Token A: policy id + asset name (hex), lovelace for ADA |
| token_b_unit | string | Token B, as token_a_unit |
| lp_unit | string, may be null | The pool's LP token, when it has one |
| reserve_a | number, may be null | Reserve of token A now, whole tokens |
| reserve_b | number, may be null | Reserve of token B now, whole tokens |
| lp_tokens | number, may be null | LP tokens in circulation, whole tokens |
| fee_percent | number, may be null | Swap fee in percent (0.3 = 0.3%) |
| tvl_ada | number, may be null | Total value locked now, ADA |
| price | number, may be null | Pool price now: token A per token B, decimal-adjusted |
| created_slot | integer | Slot the pool was created, or first seen when created_exact is false |
| created_time | timestamp | Time of created_slot |
| created_exact | boolean | true: the creation was seen; false: the pool is older than created_slot |
| last_state_slot | integer, may be null | Slot of the latest pool state |
| last_state_time | timestamp, may be null | Time of the latest pool state |
| updated_at | timestamp | When the row last changed (since / until apply to this) |
Pool statespool_statesappendData
Each change of a pool's reserves, one row per on-chain state: reserves, LP supply, TVL and price at that slot. The raw material for any liquidity history.
- Order
- slot, then id
- Free sample
- the last 24 hours, 1,000 rows a page
- Updated
- within a block of the chain tip
- Filters
pool: one pool id (e.g. 1234)
| Column | Type | Meaning |
|---|---|---|
| id | integer | State id: with slot, the cursor order |
| pool_id | integer | The pool (pools.id) |
| slot | integer | Slot of the transaction that produced the state |
| time | timestamp | Time of that transaction |
| tx_hash | string | That transaction |
| reserve_a | number | Reserve of token A, whole tokens |
| reserve_b | number | Reserve of token B, whole tokens |
| lp_tokens | number, may be null | LP tokens in circulation, whole tokens |
| fee_percent | number, may be null | Swap fee in percent |
| tvl_ada | number, may be null | Total value locked, ADA |
| price | number, may be null | Pool price: token A per token B, decimal-adjusted |
Liquidity operationsliquidity_opsappendData
Deposits into and withdrawals from pools: amounts of both tokens, LP tokens minted or burned, the wallet, settlement.
- Order
- slot, then id
- Free sample
- the last 24 hours, 1,000 rows a page
- Updated
- within a block of the chain tip
- Filters
pool: one pool idtype: deposit, withdraw or zap (a one-sided deposit)
| Column | Type | Meaning |
|---|---|---|
| id | integer | Operation id: with slot, the cursor order |
| slot | integer | Slot of the order transaction |
| time | timestamp | Time of the order transaction |
| tx_hash | string | The order transaction |
| output_index | integer | Output of the order in that transaction |
| pool_id | integer, may be null | The pool (pools.id) |
| dex | string | DEX as stored |
| type | string | deposit, withdraw or zap (a one-sided deposit) |
| status | string | pending, settled or cancelled |
| unit_a | string, may be null | Token of amount_a (lovelace for ADA); null when the order records no amount_a |
| unit_b | string, may be null | Token of amount_b, as unit_a |
| amount_a | number, may be null | Amount of unit_a deposited, whole tokens |
| amount_b | number, may be null | Amount of unit_b deposited, whole tokens |
| lp_amount | number, may be null | LP tokens burned by a withdrawal (all a withdrawal records), whole tokens |
| sender_skh | string, may be null | Stake key hash (hex) of the wallet |
| sender_pkh | string, may be null | Payment key hash (hex) of the wallet |
| settled_slot | integer, may be null | Slot of the transaction that executed or cancelled the order |
TokenstokenssnapshotData
Every traded token: policy id, asset name, ticker, decimals, metadata, total and circulating supply, holder count, first seen.
- Order
- id
- Free sample
- the first 1,000 tokens by id
- Updated
- supply and holders daily, metadata when it changes
- Filters
- none
| Column | Type | Meaning |
|---|---|---|
| id | integer | Token id (asset_id elsewhere): the cursor order |
| unit | string | Policy id + asset name (hex) |
| policy_id | string | Policy id (hex) |
| name_hex | string | Asset name (hex) |
| name | string, may be null | Name from the token registry or CIP-68 metadata |
| ticker | string, may be null | Ticker |
| decimals | integer, may be null | Decimals: every amount in these datasets is already divided by 10^decimals |
| is_lp_token | boolean | true for a DEX LP token |
| description | string, may be null | Description from metadata (first 2,000 characters) |
| url | string, may be null | Project URL from metadata |
| logo_url | string, may be null | Logo image: an external URL, or GET /api/v1/assets/{unit}/logo |
| total_supply | number, may be null | Minted supply, whole tokens |
| circulating_supply | number, may be null | Supply in circulation, whole tokens, where known |
| circulating_source | string, may be null | Where circulating_supply comes from: team, registry or reserve |
| holders | integer, may be null | Holder count |
| holders_partial | boolean | true when holders is a lower bound |
| holders_source | string, may be null | Where the holder count comes from |
| first_seen_slot | integer, may be null | Slot the token was first seen in a pool or swap |
| first_seen_time | timestamp, may be null | Time of first_seen_slot |
| created_at | timestamp | When Realtap first stored the token |
| updated_at | timestamp | Latest refresh of metadata, supply or holders (since / until apply to this) |
Token statstoken_statssnapshotData
The numbers behind the token table: price in ADA and USD, liquidity, volume and change over 5m to 30d, transaction and maker counts, market cap, FDV.
- Order
- token id
- Free sample
- the 1,000 tokens with the most 24-hour volume
- Updated
- every minute
- Filters
- none
| Column | Type | Meaning |
|---|---|---|
| asset_id | integer | Token id (tokens.id): the cursor order |
| unit | string | Policy id + asset name (hex) |
| primary_pool_id | integer, may be null | The pool the price comes from |
| price_ada | number, may be null | Price of one whole token in ADA |
| price_usd | number, may be null | Price of one whole token in USD |
| liquidity_ada | number, may be null | ADA held by the token's ADA pools |
| volume_5m_ada | number, may be null | ADA value of settled swaps over 5m |
| volume_1h_ada | number, may be null | ADA value of settled swaps over 1h |
| volume_6h_ada | number, may be null | ADA value of settled swaps over 6h |
| volume_24h_ada | number, may be null | ADA value of settled swaps over 24h |
| volume_7d_ada | number, may be null | ADA value of settled swaps over 7d |
| change_5m | number, may be null | Change of the ADA price over 5m, a fraction (0.05 = +5%) |
| change_1h | number, may be null | Change of the ADA price over 1h, a fraction (0.05 = +5%) |
| change_6h | number, may be null | Change of the ADA price over 6h, a fraction (0.05 = +5%) |
| change_24h | number, may be null | Change of the ADA price over 24h, a fraction (0.05 = +5%) |
| change_7d | number, may be null | Change of the ADA price over 7d, a fraction (0.05 = +5%) |
| change_30d | number, may be null | Change of the ADA price over 30d, a fraction (0.05 = +5%) |
| change_5m_usd | number, may be null | Change of the USD price over 5m, a fraction |
| change_1h_usd | number, may be null | Change of the USD price over 1h, a fraction |
| change_6h_usd | number, may be null | Change of the USD price over 6h, a fraction |
| change_24h_usd | number, may be null | Change of the USD price over 24h, a fraction |
| change_7d_usd | number, may be null | Change of the USD price over 7d, a fraction |
| change_30d_usd | number, may be null | Change of the USD price over 30d, a fraction |
| txns_5m | integer, may be null | Settled swaps over 5m |
| txns_1h | integer, may be null | Settled swaps over 1h |
| txns_6h | integer, may be null | Settled swaps over 6h |
| txns_24h | integer, may be null | Settled swaps over 24h |
| buys_24h | integer, may be null | Buys over 24h |
| sells_24h | integer, may be null | Sells over 24h |
| makers_24h | integer, may be null | Distinct wallets trading over 24h |
| mcap_ada | number, may be null | Market cap in ADA: price x circulating supply where known, else x minted supply |
| mcap_usd | number, may be null | Market cap in USD, as mcap_ada |
| fdv_usd | number, may be null | Fully diluted value in USD: price x minted supply |
| pools | integer, may be null | Pools the token trades in |
| first_pool_slot | integer, may be null | Slot its first pool was created (or first seen when first_pool_exact is false) |
| first_pool_exact | boolean | true when first_pool_slot is the creation itself |
| updated_at | timestamp | When the figures were computed (since / until apply to this) |
NFT salesnft_salesappendData
Every NFT sale on the indexed marketplaces: asset, price, buyer, seller, fees and royalty, the listing it closed.
- Order
- slot, then id
- Free sample
- the last 24 hours, 1,000 rows a page
- Updated
- within a block of the chain tip
- Filters
policy: one collection (policy id)marketplace: one marketplace name
| Column | Type | Meaning |
|---|---|---|
| id | integer | Sale id: with slot, the cursor order |
| slot | integer | Slot of the sale transaction |
| time | timestamp | Time of the sale transaction |
| tx_hash | string | The sale transaction |
| policy_id | string | Collection (policy id, hex) |
| name_hex | string | Asset name (hex) |
| marketplace | string | jpgstore_v2, jpgstore_v3 or wayup |
| price_ada | number | Price paid, ADA |
| royalty_ada | number, may be null | Royalty paid out of it, ADA |
| market_fee_ada | number, may be null | Marketplace fee, ADA |
| service_fee_ada | number, may be null | Service fee, ADA |
| buyer_address | string, may be null | Address the asset went to |
| buyer_skh | string, may be null | Stake key hash (hex) of the buyer |
| seller_address | string, may be null | Address of the seller |
| seller_pkh | string, may be null | Payment key hash (hex) of the seller |
| listing_tx_hash | string, may be null | Transaction of the listing the sale closed (nft_listings.tx_hash) |
| listing_output_index | integer, may be null | Output of that listing |
NFT listingsnft_listingsappendData
Every listing with its lifecycle: price, seller, when it was listed, whether and when it closed, payouts and royalty.
- Order
- listed slot, then id
- Free sample
- the last 24 hours of new listings, 1,000 rows a page
- Updated
- within a block of the chain tip
- Filters
policy: one collection (policy id)marketplace: one marketplace namestatus: open or closed; default all
| Column | Type | Meaning |
|---|---|---|
| id | integer | Listing id: with listed_slot, the cursor order |
| listed_slot | integer | Slot of the listing transaction |
| listed_time | timestamp | Time of the listing transaction |
| listed_exact | boolean | false when the listing was first seen later than it was made |
| tx_hash | string | The listing transaction |
| output_index | integer | Output of the listing in that transaction |
| policy_id | string | Collection (policy id, hex) |
| name_hex | string | Asset name (hex) of the first asset listed |
| marketplace | string | jpgstore_v2, jpgstore_v3 or wayup |
| price_ada | number | Asking price, ADA |
| bundle_size | integer | Assets in the listing (1 unless a bundle) |
| seller_address | string, may be null | Address of the seller |
| seller_pkh | string, may be null | Payment key hash (hex) of the seller |
| status | string | open, sold or delisted (a price change delists and lists again) |
| closed_slot | integer, may be null | Slot the listing was sold or delisted |
| closed_time | timestamp, may be null | Time it was sold or delisted |
| closed_tx_hash | string, may be null | The transaction that closed it |
| payouts_ada | number, may be null | What the listing pays out on a sale (seller, royalty, fees), ADA |
| royalty_ada | number, may be null | Royalty part of the payouts, ADA |
| royalty_address | string, may be null | Address the royalty goes to |
NFT collectionsnft_collectionssnapshotData
Every collection: name, supply, holders, floor, listings, volume and sales over 24h, 7d, 30d and all time, royalty.
- Order
- policy id
- Free sample
- the 1,000 collections with the most 24-hour volume
- Updated
- floor and listings within minutes, counts daily
- Filters
- none
| Column | Type | Meaning |
|---|---|---|
| policy_id | string | Policy id (hex): the cursor order |
| name | string, may be null | Collection name |
| image | string, may be null | Image URL (ipfs:// or https://) |
| supply | integer, may be null | Assets minted |
| holders | integer, may be null | Holder count |
| holders_partial | boolean | true when holders is a lower bound |
| floor_ada | number, may be null | Lowest open listing, ADA |
| floor_change_24h | number, may be null | Change of the floor over 24h, a fraction |
| floor_since | timestamp, may be null | Since when the floor has been at this price |
| listings | integer | Open listings |
| offers | integer | Open collection offers |
| best_offer_ada | number, may be null | Best open offer, ADA |
| volume_24h_ada | number | Sales volume over 24h, ADA |
| volume_7d_ada | number | Sales volume over 7 days, ADA |
| volume_30d_ada | number | Sales volume over 30 days, ADA |
| volume_all_ada | number | Sales volume over everything indexed, ADA |
| sales_24h | integer | Sales over 24h |
| sales_7d | integer | Sales over 7 days |
| sales_all | integer | Sales over everything indexed |
| royalty_rate | number, may be null | Royalty as a fraction of the price (0.05 = 5%) |
| royalty_address | string, may be null | Address royalties are paid to |
| first_seen_slot | integer, may be null | Slot the collection was first seen |
| last_sale_time | timestamp, may be null | Time of the latest sale |
| updated_at | timestamp | When the row last changed (since / until apply to this) |
Stake poolsstake_poolssnapshotData
Every stake pool: ticker, name, metadata, status, margin, cost, pledge, live and active stake, saturation, delegators, blocks, voting power, DRep.
- Order
- pool id
- Free sample
- the 1,000 pools with the most live stake
- Updated
- each epoch, live figures daily
- Filters
- none
| Column | Type | Meaning |
|---|---|---|
| pool_id | string | Pool id (pool1…): the cursor order |
| pool_hex | string | Pool id (hex) |
| ticker | string, may be null | Ticker from the pool metadata |
| name | string, may be null | Name from the pool metadata |
| homepage | string, may be null | Homepage from the pool metadata |
| description | string, may be null | Description from the pool metadata (first 1,000 characters) |
| meta_url | string, may be null | Metadata URL registered on chain |
| meta_hash | string, may be null | Metadata hash registered on chain |
| status | string | registered, retiring or retired |
| retiring_epoch | integer, may be null | Epoch the pool retires (or retired) in |
| active_epoch | integer, may be null | Epoch the current registration took effect |
| margin | number, may be null | Margin, a fraction (0.01 = 1%) |
| fixed_cost_ada | number, may be null | Fixed cost per epoch, ADA |
| pledge_ada | number, may be null | Declared pledge, ADA |
| live_pledge_ada | number, may be null | What the owners hold now, ADA |
| reward_addr | string, may be null | Reward address (stake1…) |
| owners | json | Owner stake addresses (array) |
| relays | json | Relays as registered (array of { ipv4, ipv6, dns, srv, port }) |
| pool_group | string, may be null | Operator group when several pools belong together |
| active_stake_ada | number, may be null | Active stake (the snapshot of the current epoch), ADA |
| live_stake_ada | number, may be null | Live stake, ADA |
| live_saturation | number, may be null | Live stake / saturation point (1 = saturated) |
| live_delegators | integer, may be null | Delegators now |
| block_count | integer, may be null | Blocks made over the pool's life |
| voting_power_ada | number, may be null | Governance voting power, ADA |
| drep | string, may be null | The DRep the pool's reward account delegates to |
| roa_estimate | number, may be null | Estimated annual return for delegators, a fraction |
| first_seen_at | timestamp | When Realtap first stored the pool |
| updated_at | timestamp | When the row last changed (since / until apply to this) |
Stake pool epochsstake_pool_epochsappendData
Per pool and epoch: active stake and share, delegators, blocks made, fees and pledge, member rewards.
- Order
- epoch, then pool id
- Free sample
- the last 2 epochs, 1,000 rows a page
- Updated
- each epoch; rewards two epochs later
- Filters
pool: one pool (pool1… id)
| Column | Type | Meaning |
|---|---|---|
| epoch | integer | Epoch: with pool_id, the cursor order |
| epoch_start | timestamp | Start of the epoch (since / until apply to this) |
| pool_id | string | Pool id (pool1…) |
| active_stake_ada | number, may be null | Active stake in the epoch, ADA |
| active_share | number, may be null | Share of all active stake, a fraction |
| stake_exact | boolean | false when the stake is an estimate |
| delegators | integer, may be null | Delegators in the stake snapshot |
| blocks | integer, may be null | Blocks made in the epoch |
| blocks_final | boolean | true once the epoch is over and the count cannot change |
| margin | number, may be null | Margin in force, a fraction |
| fixed_cost_ada | number, may be null | Fixed cost in force, ADA |
| pledge_ada | number, may be null | Pledge in force, ADA |
| pledge_met | boolean, may be null | Whether the owners held the pledge |
| member_rewards_ada | number, may be null | Rewards paid to delegators for the epoch, ADA (known two epochs later) |
| pool_fees_ada | number, may be null | Fixed cost and margin the operator took, ADA |
| updated_at | timestamp | When the row last changed |
Address labelsaddress_labelssnapshotData Pro
Named credentials: exchanges, DEX contracts, protocols, known wallets, with category, source, confidence and licence.
- Order
- credential
- Free sample
- the first 100 labels
- Updated
- when a source changes
- Filters
category: one category
| Column | Type | Meaning |
|---|---|---|
| credential | string | Payment or stake credential (key or script hash, hex): with cred_type, the cursor order |
| cred_type | string | payment or stake |
| label | string | The name |
| category | string | dex, protocol, lending, marketplace, bridge, stake_pool, burn, … |
| protocol | string, may be null | Protocol the credential belongs to |
| role | string, may be null | What it does in that protocol (orders, pool, treasury, …) |
| is_script | boolean | true for a script credential |
| source | string | code (from our decoders), curated (a public registry) or stake_pools |
| source_url | string, may be null | Where the label can be checked |
| licence | string, may be null | Licence of the source |
| confidence | number | Confidence, 0 to 1 |
| verified_at | string, may be null | Day the label was last checked (YYYY-MM-DD) |
| updated_at | timestamp | When the row last changed (since / until apply to this) |
Profit leaderboardleaderboardsnapshotData Pro
Every trading wallet ranked by realised profit over the window: profit, volume, trades, win rate, best and worst token. The site's /pro/profit-leaderboard as a table.
- Order
- rank
- Free sample
- the top 100 over 7 days
- Updated
- hourly
- Filters
window: 7d, 30d or 90d; default 7d. 7d and 30d rank every eligible wallet; 90d is the top 100 the indexer stores
| Column | Type | Meaning |
|---|---|---|
| window | string | 7d, 30d or 90d |
| rank | integer | Rank by realised profit over the window: the cursor order |
| stake_key_hash | string | Stake key hash (hex) of the wallet |
| stake_address | string, may be null | Its stake1… address |
| realized_ada | number | Realised profit over the window, ADA (FIFO: a sale of units bought before the window adds nothing) |
| realized_usd | number, may be null | Realised profit at the ADA/USD rate of each trade, USD |
| unrealized_ada | number, may be null | Open positions at today's pool price (capped at pool depth) minus their cost, ADA; null when a price is unknown |
| volume_ada | number | ADA traded over the window |
| trades | integer | Settled swaps over the window |
| tokens | integer | Tokens traded |
| wins | integer | Closed lots sold at a profit |
| losses | integer | Closed lots sold at a loss |
| win_rate | number, may be null | wins / (wins + losses) |
| best_token_unit | string, may be null | Token with the largest realised profit |
| best_token_realized_ada | number, may be null | Its realised profit, ADA |
| worst_token_unit | string, may be null | Token with the largest realised loss (null without a loss) |
| worst_token_realized_ada | number, may be null | Its realised loss, ADA |
| trades_per_day | number | Settled swaps per day over the wallet's active span in the window |
| median_hold_seconds | integer, may be null | Median time between buying a lot and selling it |
| computed_at | timestamp | When the board was computed |
Hot walletshot_walletssnapshotData Pro
The most active wallets and the biggest net buyers and sellers over the window, overall or for one token. The site's /pro/hot-wallets as a table.
- Order
- rank
- Free sample
- the top 100 over 7 days
- Updated
- hourly
- Filters
window: 7d, 30d or 90d; default 7d. 7d and 30d rank every wallet; 90d over all tokens is the top 100 per list the indexer storesunit: one token
| Column | Type | Meaning |
|---|---|---|
| window | string | 7d, 30d or 90d |
| unit | string, may be null | The token the board is for (unit filter); null for all tokens |
| list | string | most_active, net_buyers or net_sellers: with rank, the cursor order |
| rank | integer | Rank in the list |
| stake_key_hash | string | Stake key hash (hex) of the wallet |
| stake_address | string, may be null | Its stake1… address |
| trades | integer | Settled swaps over the window |
| volume_ada | number | ADA traded over the window |
| buy_ada | number | ADA spent buying tokens |
| sell_ada | number | ADA received selling tokens |
| net_ada | number | buy_ada - sell_ada (positive: a net buyer) |
| tokens | integer | Tokens traded |
| last_trade | timestamp, may be null | Time of the latest swap |
| top_token_unit | string, may be null | Token with the most volume |
| bot | boolean | High-frequency account by the leaderboard's rule (always false on a one-token board) |
| computed_at | timestamp | When the board was computed |
Try it
The first page, the next page, a stream, a file and a batch. Without a key these return the free sample.
export KEY=otk_... curl -H "x-api-key: $KEY" "https://realtap.app/api/v1/export/swaps?limit=10000"
# the answer carries "next" in the body and in the X-Next-Cursor header; pass it back as after= curl -H "x-api-key: $KEY" "https://realtap.app/api/v1/export/swaps?limit=10000&after=<next>"
# one row per line, easy to stream into a loader curl -H "x-api-key: $KEY" "https://realtap.app/api/v1/export/swaps?format=ndjson&since=2026-11-01T00:00:00Z"
curl -H "x-api-key: $KEY" "https://realtap.app/api/v1/export/candles?pool=1234&format=csv" -o candles.csv
# up to 100 wallets in one call (addresses or stake keys) curl -H "x-api-key: $KEY" "https://realtap.app/api/v1/export/wallets?refs=stake1u...,addr1q..."
Rules of the road: pages are keyset-paginated (never offsets), a page query is cut off after 20 seconds (503 with Retry-After, narrow the filters), and an account may run 2 export queries at once.
Reference
- /api/v1/openapi.json: the OpenAPI 3.1 document, with every dataset's columns.
- Developers: the whole public API, keys and usage.
- For AI agents: MCP server, Markdown views and limits.
Licence: chain data is public. The derived datasets (leaderboard, hot wallets, address labels) are Realtap's work and are licensed to you for your own use; a licence page follows.