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

now

Walk a whole table with after, or poll it with since. JSON, ndjson or CSV.

Batch lookups

now

Up to 100 wallets in one request: value, tokens and profit and loss.

Nightly files and firehose

coming

Parquet and CSV files per dataset every night, and a live stream of trades with a resume cursor.

Plans

Free sampleDataData Pro
Price$0$49 / month, $490 / year$199 / month, $1,990 / year
Market datasetslast 24 h or first 1,000 rowsfull historyfull history
Rows a page1,00010,00010,000
Derived datasets (leaderboard, hot wallets, address labels)top 100top 100full
Batch wallet lookup5 wallets100 wallets100 wallets
API key, per minute1203,0006,000
API key, per day10,0005,000,00020,000,000
Site plan includedFreeProPro

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

  1. Get a key: send /apikey to the Realtap Telegram bot, or create one under Account. No wallet is needed for the Telegram key.
  2. 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.
  3. Or pay by card: ask for a Stripe Checkout link and open the url it 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/intents

Then 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/checkout

Use "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
ColumnTypeMeaning
idintegerSwap id: with slot, the cursor order
slotintegerSlot of the order transaction (mainnet: unix time = slot + 1591566291)
timetimestampTime of the order transaction
tx_hashstringThe order transaction
output_indexintegerOutput of the order in that transaction
pool_idinteger, may be nullThe pool (pools.id); null when the order named none we know
dexstringDEX as stored: Minswap, MinswapV2, SundaeSwapV3, Splash, WingRiders, …
statusstringpending, settled or cancelled
sidestring, may be nullbuy or sell of the pool's token B (the token of an ADA pool); null when not known
in_unitstringToken sent in: policy id + asset name (hex), lovelace for ADA
out_unitstringToken asked for, as in_unit
in_amountnumberAmount sent in, in whole tokens (raw units divided by the token's decimals; ADA in ADA)
min_receivenumber, may be nullLeast amount of out_unit the order accepts, whole tokens
out_amountnumber, may be nullAmount of out_unit received, whole tokens; null until settled or when not read
pricenumber, may be nullPool price after execution: token A per token B, decimal-adjusted (ADA per token on ADA pools)
volume_adanumber, may be nullADA value of the swap; null when not known
dex_fees_adanumber, may be nullBatcher and DEX fee the order paid, ADA
sender_skhstring, may be nullStake key hash (hex) of the wallet; its stake1… address is the bech32 of e1 + this
sender_pkhstring, may be nullPayment key hash (hex) of the wallet
settled_slotinteger, may be nullSlot of the transaction that executed or cancelled the order
settled_timetimestamp, may be nullTime of that transaction
settled_tx_hashstring, may be nullThat 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)
ColumnTypeMeaning
pool_idintegerThe pool (pools.id): with time, the cursor order
timetimestampStart of the minute
opennumberPool price at the first trade or state of the minute: token A per token B, decimal-adjusted (ADA per token on ADA pools)
highnumberHighest pool price in the minute
lownumberLowest pool price in the minute
closenumberPool price at the end of the minute
volume_adanumberADA value traded in the minute
volume_basenumberToken B traded in the minute, whole tokens
tradesintegerSettled swaps in the minute
buysintegerOf them, buys of token B
sellsintegerOf them, sells of token B
tvl_adanumber, may be nullPool 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
ColumnTypeMeaning
idintegerPool id (the id other datasets use): the cursor order
dexstringDEX as stored: Minswap, MinswapV2, SundaeSwapV3, Splash, SnekFun, …
kindstringamm, stable, cl (concentrated liquidity), curve (launchpad bonding curve) or orderbook
identifierstringThe DEX's own identifier of the pool
addressstringAddress of the pool
order_addressstring, may be nullAddress orders for the pool are sent to, where it differs
token_a_unitstringToken A: policy id + asset name (hex), lovelace for ADA
token_b_unitstringToken B, as token_a_unit
lp_unitstring, may be nullThe pool's LP token, when it has one
reserve_anumber, may be nullReserve of token A now, whole tokens
reserve_bnumber, may be nullReserve of token B now, whole tokens
lp_tokensnumber, may be nullLP tokens in circulation, whole tokens
fee_percentnumber, may be nullSwap fee in percent (0.3 = 0.3%)
tvl_adanumber, may be nullTotal value locked now, ADA
pricenumber, may be nullPool price now: token A per token B, decimal-adjusted
created_slotintegerSlot the pool was created, or first seen when created_exact is false
created_timetimestampTime of created_slot
created_exactbooleantrue: the creation was seen; false: the pool is older than created_slot
last_state_slotinteger, may be nullSlot of the latest pool state
last_state_timetimestamp, may be nullTime of the latest pool state
updated_attimestampWhen 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)
ColumnTypeMeaning
idintegerState id: with slot, the cursor order
pool_idintegerThe pool (pools.id)
slotintegerSlot of the transaction that produced the state
timetimestampTime of that transaction
tx_hashstringThat transaction
reserve_anumberReserve of token A, whole tokens
reserve_bnumberReserve of token B, whole tokens
lp_tokensnumber, may be nullLP tokens in circulation, whole tokens
fee_percentnumber, may be nullSwap fee in percent
tvl_adanumber, may be nullTotal value locked, ADA
pricenumber, may be nullPool 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)
ColumnTypeMeaning
idintegerOperation id: with slot, the cursor order
slotintegerSlot of the order transaction
timetimestampTime of the order transaction
tx_hashstringThe order transaction
output_indexintegerOutput of the order in that transaction
pool_idinteger, may be nullThe pool (pools.id)
dexstringDEX as stored
typestringdeposit, withdraw or zap (a one-sided deposit)
statusstringpending, settled or cancelled
unit_astring, may be nullToken of amount_a (lovelace for ADA); null when the order records no amount_a
unit_bstring, may be nullToken of amount_b, as unit_a
amount_anumber, may be nullAmount of unit_a deposited, whole tokens
amount_bnumber, may be nullAmount of unit_b deposited, whole tokens
lp_amountnumber, may be nullLP tokens burned by a withdrawal (all a withdrawal records), whole tokens
sender_skhstring, may be nullStake key hash (hex) of the wallet
sender_pkhstring, may be nullPayment key hash (hex) of the wallet
settled_slotinteger, may be nullSlot 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
ColumnTypeMeaning
idintegerToken id (asset_id elsewhere): the cursor order
unitstringPolicy id + asset name (hex)
policy_idstringPolicy id (hex)
name_hexstringAsset name (hex)
namestring, may be nullName from the token registry or CIP-68 metadata
tickerstring, may be nullTicker
decimalsinteger, may be nullDecimals: every amount in these datasets is already divided by 10^decimals
is_lp_tokenbooleantrue for a DEX LP token
descriptionstring, may be nullDescription from metadata (first 2,000 characters)
urlstring, may be nullProject URL from metadata
logo_urlstring, may be nullLogo image: an external URL, or GET /api/v1/assets/{unit}/logo
total_supplynumber, may be nullMinted supply, whole tokens
circulating_supplynumber, may be nullSupply in circulation, whole tokens, where known
circulating_sourcestring, may be nullWhere circulating_supply comes from: team, registry or reserve
holdersinteger, may be nullHolder count
holders_partialbooleantrue when holders is a lower bound
holders_sourcestring, may be nullWhere the holder count comes from
first_seen_slotinteger, may be nullSlot the token was first seen in a pool or swap
first_seen_timetimestamp, may be nullTime of first_seen_slot
created_attimestampWhen Realtap first stored the token
updated_attimestampLatest 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
ColumnTypeMeaning
asset_idintegerToken id (tokens.id): the cursor order
unitstringPolicy id + asset name (hex)
primary_pool_idinteger, may be nullThe pool the price comes from
price_adanumber, may be nullPrice of one whole token in ADA
price_usdnumber, may be nullPrice of one whole token in USD
liquidity_adanumber, may be nullADA held by the token's ADA pools
volume_5m_adanumber, may be nullADA value of settled swaps over 5m
volume_1h_adanumber, may be nullADA value of settled swaps over 1h
volume_6h_adanumber, may be nullADA value of settled swaps over 6h
volume_24h_adanumber, may be nullADA value of settled swaps over 24h
volume_7d_adanumber, may be nullADA value of settled swaps over 7d
change_5mnumber, may be nullChange of the ADA price over 5m, a fraction (0.05 = +5%)
change_1hnumber, may be nullChange of the ADA price over 1h, a fraction (0.05 = +5%)
change_6hnumber, may be nullChange of the ADA price over 6h, a fraction (0.05 = +5%)
change_24hnumber, may be nullChange of the ADA price over 24h, a fraction (0.05 = +5%)
change_7dnumber, may be nullChange of the ADA price over 7d, a fraction (0.05 = +5%)
change_30dnumber, may be nullChange of the ADA price over 30d, a fraction (0.05 = +5%)
change_5m_usdnumber, may be nullChange of the USD price over 5m, a fraction
change_1h_usdnumber, may be nullChange of the USD price over 1h, a fraction
change_6h_usdnumber, may be nullChange of the USD price over 6h, a fraction
change_24h_usdnumber, may be nullChange of the USD price over 24h, a fraction
change_7d_usdnumber, may be nullChange of the USD price over 7d, a fraction
change_30d_usdnumber, may be nullChange of the USD price over 30d, a fraction
txns_5minteger, may be nullSettled swaps over 5m
txns_1hinteger, may be nullSettled swaps over 1h
txns_6hinteger, may be nullSettled swaps over 6h
txns_24hinteger, may be nullSettled swaps over 24h
buys_24hinteger, may be nullBuys over 24h
sells_24hinteger, may be nullSells over 24h
makers_24hinteger, may be nullDistinct wallets trading over 24h
mcap_adanumber, may be nullMarket cap in ADA: price x circulating supply where known, else x minted supply
mcap_usdnumber, may be nullMarket cap in USD, as mcap_ada
fdv_usdnumber, may be nullFully diluted value in USD: price x minted supply
poolsinteger, may be nullPools the token trades in
first_pool_slotinteger, may be nullSlot its first pool was created (or first seen when first_pool_exact is false)
first_pool_exactbooleantrue when first_pool_slot is the creation itself
updated_attimestampWhen 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
ColumnTypeMeaning
idintegerSale id: with slot, the cursor order
slotintegerSlot of the sale transaction
timetimestampTime of the sale transaction
tx_hashstringThe sale transaction
policy_idstringCollection (policy id, hex)
name_hexstringAsset name (hex)
marketplacestringjpgstore_v2, jpgstore_v3 or wayup
price_adanumberPrice paid, ADA
royalty_adanumber, may be nullRoyalty paid out of it, ADA
market_fee_adanumber, may be nullMarketplace fee, ADA
service_fee_adanumber, may be nullService fee, ADA
buyer_addressstring, may be nullAddress the asset went to
buyer_skhstring, may be nullStake key hash (hex) of the buyer
seller_addressstring, may be nullAddress of the seller
seller_pkhstring, may be nullPayment key hash (hex) of the seller
listing_tx_hashstring, may be nullTransaction of the listing the sale closed (nft_listings.tx_hash)
listing_output_indexinteger, may be nullOutput 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
ColumnTypeMeaning
idintegerListing id: with listed_slot, the cursor order
listed_slotintegerSlot of the listing transaction
listed_timetimestampTime of the listing transaction
listed_exactbooleanfalse when the listing was first seen later than it was made
tx_hashstringThe listing transaction
output_indexintegerOutput of the listing in that transaction
policy_idstringCollection (policy id, hex)
name_hexstringAsset name (hex) of the first asset listed
marketplacestringjpgstore_v2, jpgstore_v3 or wayup
price_adanumberAsking price, ADA
bundle_sizeintegerAssets in the listing (1 unless a bundle)
seller_addressstring, may be nullAddress of the seller
seller_pkhstring, may be nullPayment key hash (hex) of the seller
statusstringopen, sold or delisted (a price change delists and lists again)
closed_slotinteger, may be nullSlot the listing was sold or delisted
closed_timetimestamp, may be nullTime it was sold or delisted
closed_tx_hashstring, may be nullThe transaction that closed it
payouts_adanumber, may be nullWhat the listing pays out on a sale (seller, royalty, fees), ADA
royalty_adanumber, may be nullRoyalty part of the payouts, ADA
royalty_addressstring, may be nullAddress 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
ColumnTypeMeaning
policy_idstringPolicy id (hex): the cursor order
namestring, may be nullCollection name
imagestring, may be nullImage URL (ipfs:// or https://)
supplyinteger, may be nullAssets minted
holdersinteger, may be nullHolder count
holders_partialbooleantrue when holders is a lower bound
floor_adanumber, may be nullLowest open listing, ADA
floor_change_24hnumber, may be nullChange of the floor over 24h, a fraction
floor_sincetimestamp, may be nullSince when the floor has been at this price
listingsintegerOpen listings
offersintegerOpen collection offers
best_offer_adanumber, may be nullBest open offer, ADA
volume_24h_adanumberSales volume over 24h, ADA
volume_7d_adanumberSales volume over 7 days, ADA
volume_30d_adanumberSales volume over 30 days, ADA
volume_all_adanumberSales volume over everything indexed, ADA
sales_24hintegerSales over 24h
sales_7dintegerSales over 7 days
sales_allintegerSales over everything indexed
royalty_ratenumber, may be nullRoyalty as a fraction of the price (0.05 = 5%)
royalty_addressstring, may be nullAddress royalties are paid to
first_seen_slotinteger, may be nullSlot the collection was first seen
last_sale_timetimestamp, may be nullTime of the latest sale
updated_attimestampWhen 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
ColumnTypeMeaning
pool_idstringPool id (pool1…): the cursor order
pool_hexstringPool id (hex)
tickerstring, may be nullTicker from the pool metadata
namestring, may be nullName from the pool metadata
homepagestring, may be nullHomepage from the pool metadata
descriptionstring, may be nullDescription from the pool metadata (first 1,000 characters)
meta_urlstring, may be nullMetadata URL registered on chain
meta_hashstring, may be nullMetadata hash registered on chain
statusstringregistered, retiring or retired
retiring_epochinteger, may be nullEpoch the pool retires (or retired) in
active_epochinteger, may be nullEpoch the current registration took effect
marginnumber, may be nullMargin, a fraction (0.01 = 1%)
fixed_cost_adanumber, may be nullFixed cost per epoch, ADA
pledge_adanumber, may be nullDeclared pledge, ADA
live_pledge_adanumber, may be nullWhat the owners hold now, ADA
reward_addrstring, may be nullReward address (stake1…)
ownersjsonOwner stake addresses (array)
relaysjsonRelays as registered (array of { ipv4, ipv6, dns, srv, port })
pool_groupstring, may be nullOperator group when several pools belong together
active_stake_adanumber, may be nullActive stake (the snapshot of the current epoch), ADA
live_stake_adanumber, may be nullLive stake, ADA
live_saturationnumber, may be nullLive stake / saturation point (1 = saturated)
live_delegatorsinteger, may be nullDelegators now
block_countinteger, may be nullBlocks made over the pool's life
voting_power_adanumber, may be nullGovernance voting power, ADA
drepstring, may be nullThe DRep the pool's reward account delegates to
roa_estimatenumber, may be nullEstimated annual return for delegators, a fraction
first_seen_attimestampWhen Realtap first stored the pool
updated_attimestampWhen 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)
ColumnTypeMeaning
epochintegerEpoch: with pool_id, the cursor order
epoch_starttimestampStart of the epoch (since / until apply to this)
pool_idstringPool id (pool1…)
active_stake_adanumber, may be nullActive stake in the epoch, ADA
active_sharenumber, may be nullShare of all active stake, a fraction
stake_exactbooleanfalse when the stake is an estimate
delegatorsinteger, may be nullDelegators in the stake snapshot
blocksinteger, may be nullBlocks made in the epoch
blocks_finalbooleantrue once the epoch is over and the count cannot change
marginnumber, may be nullMargin in force, a fraction
fixed_cost_adanumber, may be nullFixed cost in force, ADA
pledge_adanumber, may be nullPledge in force, ADA
pledge_metboolean, may be nullWhether the owners held the pledge
member_rewards_adanumber, may be nullRewards paid to delegators for the epoch, ADA (known two epochs later)
pool_fees_adanumber, may be nullFixed cost and margin the operator took, ADA
updated_attimestampWhen 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
ColumnTypeMeaning
credentialstringPayment or stake credential (key or script hash, hex): with cred_type, the cursor order
cred_typestringpayment or stake
labelstringThe name
categorystringdex, protocol, lending, marketplace, bridge, stake_pool, burn, …
protocolstring, may be nullProtocol the credential belongs to
rolestring, may be nullWhat it does in that protocol (orders, pool, treasury, …)
is_scriptbooleantrue for a script credential
sourcestringcode (from our decoders), curated (a public registry) or stake_pools
source_urlstring, may be nullWhere the label can be checked
licencestring, may be nullLicence of the source
confidencenumberConfidence, 0 to 1
verified_atstring, may be nullDay the label was last checked (YYYY-MM-DD)
updated_attimestampWhen 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
ColumnTypeMeaning
windowstring7d, 30d or 90d
rankintegerRank by realised profit over the window: the cursor order
stake_key_hashstringStake key hash (hex) of the wallet
stake_addressstring, may be nullIts stake1… address
realized_adanumberRealised profit over the window, ADA (FIFO: a sale of units bought before the window adds nothing)
realized_usdnumber, may be nullRealised profit at the ADA/USD rate of each trade, USD
unrealized_adanumber, may be nullOpen positions at today's pool price (capped at pool depth) minus their cost, ADA; null when a price is unknown
volume_adanumberADA traded over the window
tradesintegerSettled swaps over the window
tokensintegerTokens traded
winsintegerClosed lots sold at a profit
lossesintegerClosed lots sold at a loss
win_ratenumber, may be nullwins / (wins + losses)
best_token_unitstring, may be nullToken with the largest realised profit
best_token_realized_adanumber, may be nullIts realised profit, ADA
worst_token_unitstring, may be nullToken with the largest realised loss (null without a loss)
worst_token_realized_adanumber, may be nullIts realised loss, ADA
trades_per_daynumberSettled swaps per day over the wallet's active span in the window
median_hold_secondsinteger, may be nullMedian time between buying a lot and selling it
computed_attimestampWhen 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
ColumnTypeMeaning
windowstring7d, 30d or 90d
unitstring, may be nullThe token the board is for (unit filter); null for all tokens
liststringmost_active, net_buyers or net_sellers: with rank, the cursor order
rankintegerRank in the list
stake_key_hashstringStake key hash (hex) of the wallet
stake_addressstring, may be nullIts stake1… address
tradesintegerSettled swaps over the window
volume_adanumberADA traded over the window
buy_adanumberADA spent buying tokens
sell_adanumberADA received selling tokens
net_adanumberbuy_ada - sell_ada (positive: a net buyer)
tokensintegerTokens traded
last_tradetimestamp, may be nullTime of the latest swap
top_token_unitstring, may be nullToken with the most volume
botbooleanHigh-frequency account by the leaderboard's rule (always false on a one-token board)
computed_attimestampWhen 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..."
GET /api/v1/export/swaps?limit=5, no key (the free sample)

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.

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.