Builder Methods Reference
:::note[Range Limits]
The API enforces range limits. JSON and CSV: max 10,000 blocks or 1 day. Parquet: max 100,000 blocks or 7 days (1,000,000 for ARB). Exceeding these limits returns a 400 error.
:::
Common Methods (all protocols)
| Method | Description |
|---|
.network(net) | Set network (ETH, ARB, BASE, OP, POLYGON, etc.) |
.start_block(n) | Set starting block number |
.end_block(n) | Set ending block number |
.block_range(start, end) | Set both start and end blocks |
.start_time(ts) | Set starting time (ISO format or Unix timestamp) |
.end_time(ts) | Set ending time (ISO format or Unix timestamp) |
.time_range(start, end) | Set both start and end times |
.verbose() | Include all metadata fields |
.with_value() | Enrich events with USD value data (value_usd column) |
.my_wallets() | Filter events involving your saved wallet addresses |
Wallet Label Management
Manage wallet labels via client.wallets. The upsert endpoint accepts Parquet only (the client auto-converts DataFrames). Labels and categories are list columns (arrays of strings).
| Method | Description |
|---|
client.wallets.upsert(df) | Bulk upsert labels from a DataFrame. labels and categories must be list columns (e.g., ["exchange", "cex"]). Auto-serialized to Parquet. Max 1M rows. |
client.wallets.list() | List all labels in your namespace |
client.wallets.get(address) | Look up a single address label |
client.wallets.delete(address) | Delete a label by address |
Protocol-Specific Parameters
| Method | Protocols | Description |
|---|
.token(*symbols) | ERC20 | Token symbol(s) (USDT, USDC) or contract address. Accepts multiple known symbols for multi-token queries (multi-value). |
.sender(*addrs) | ERC20, Native | Filter by sender address (multi-value) |
.receiver(*addrs) | ERC20, Native | Filter by receiver address (multi-value) |
.involving(*addrs) | All | Filter by any involved address (multi-value) |
.from_address(*addrs) | ERC20, Native | Alias for .sender() |
.to_address(*addrs) | ERC20, Native | Alias for .receiver() |
.min_amount(amt) | ERC20, Native | Minimum transfer amount |
.max_amount(amt) | ERC20, Native | Maximum transfer amount |
.eth_market_type(type) | AAVE | Market type for ETH: ‘Core’, ‘Prime’, ‘EtherFi’ |
.symbol0(sym) | Uniswap | First token symbol (required) |
.symbol1(sym) | Uniswap | Second token symbol (required) |
.fee(tier) | Uniswap | Fee tier: 100, 500, 3000, 10000 (required) |
Tron Methods
| Method | Description |
|---|
client.tron.trc20.transfers(*tokens) | Start a TRC20 transfer query. Chain .aggregate(group_by, period) for bucketed sums. |
client.tron.native.transfers() | Start a native TRX transfer query. Chain .aggregate(group_by, period) for bucketed sums. |
Tron transfer builders support .aggregate() — see the Aggregate Methods section. Aggregate responses return rows of {time | block_number, token, agg_amount, count} under the events key.
Bitcoin Methods
| Method | Description |
|---|
client.bitcoin.native.transfers() | Start a native BTC transfer query. Chain .aggregate(group_by, period) for bucketed sums. |
Bitcoin transfer builders also support .aggregate() — see the Aggregate Methods section. For Bitcoin the time column is returned as epoch seconds when grouping by time.
Binance Methods
| Method | Builder | Description |
|---|
client.exchange.binance.trades(token) | Trade | Start a raw trades query |
client.exchange.binance.ohlcv(token) | Trade | Start an OHLCV candle query |
client.exchange.binance.book_depth() | ExchangeData | Start a book depth query (365-day max) |
client.exchange.binance.open_interest() | ExchangeData | Start an open interest query |
client.exchange.binance.funding_rate() | ExchangeData | Start a funding rate query |
client.exchange.binance.long_short_ratios() | ExchangeData | Start a long/short ratios query |
Hyperliquid Methods
| Method | Builder | Description |
|---|
client.exchange.hyperliquid.trades(token) | Trade | Start a raw trades query |
client.exchange.hyperliquid.ohlcv(token) | Trade | Start an OHLCV candle query |
client.exchange.hyperliquid.fills() | ExchangeData | Start a fills query |
client.exchange.hyperliquid.positions() | ExchangeData | Start a positions query |
client.exchange.hyperliquid.funding() | ExchangeData | Start a funding query |
Trade builder methods:
| Method | Description |
|---|
.token(symbol) | Set token symbol (e.g. “BTC”) |
.window(size) | Set OHLCV window: 1m, 5m, 15m, 30m, 1h, 4h, 1d |
.start_time(ts) | Set start time (ISO 8601 or Unix) |
.end_time(ts) | Set end time |
.time_range(start, end) | Set both start and end times |
Exchange data builder methods:
| Method | Description |
|---|
.token(symbol) | Set token symbol (e.g. “BTC”) |
.start_time(ts) | Set start time (ISO 8601 or Unix) |
.end_time(ts) | Set end time |
.time_range(start, end) | Set both start and end times |
Exchange data endpoints return CSV/Parquet only. Calling .as_dict() will raise an error.
Address Label & Category Filters
Filter events by entity names or categories using the labels database. Available on all protocols.
| Method | Protocols | Description |
|---|
.involving_label(label) | All | Filter where any involved address matches a label substring (e.g., “Binance”) |
.involving_category(cat) | All | Filter where any involved address matches a category (e.g., “exchange”) |
.sender_label(label) | ERC20, Native | Filter sender by label substring |
.sender_category(cat) | ERC20, Native | Filter sender by category |
.receiver_label(label) | ERC20, Native | Filter receiver by label substring |
.receiver_category(cat) | ERC20, Native | Filter receiver by category |
Multi-value support: Pass multiple values as separate arguments (e.g., .sender_label("Binance", "Coinbase")) or as a comma-separated string (e.g., .sender_label("Binance,Coinbase")). Both forms are equivalent.
Mutual exclusivity: Within each slot (involving/sender/receiver), only one of address/label/category can be set. involving* filters cannot be combined with sender*/receiver* filters.
Aggregate Methods
| Method | Description |
|---|
.aggregate(group_by, period) | Transition to aggregate query. group_by: "time" or "block"/"block_number". period: bucket size (e.g. "1h", "1d", "100b", or integer block count for Tron/BTC). Returns an AggregateQueryBuilder (EVM) or EventsAggregateQueryBuilder (Tron/BTC) that supports all the same terminal and filter methods. |
client.aggregate_schema(protocol) | Get available aggregate fields for a protocol (e.g. "erc20", "aave_v3", "tron/trc20", "btc/native"). |
Supported on EVM (all 23 protocols), Tron (trc20, native), and Bitcoin (native). Aggregate queries accept all filters from the raw endpoint and share the same range limits. Quota cost is halved (block_range × 0.5, min 100).
Terminal Methods
| Method | Description |
|---|
.as_df() | Execute and return pandas DataFrame |
.as_df("polars") | Execute and return polars DataFrame |
.as_file(path) | Execute and save to file (format from extension) |
.as_file(path, format="csv") | Execute and save with explicit format |
.as_dict() | Execute and return list of dicts (JSON, 10K block limit) |
.as_link() | Execute and return download link (CSV, 1hr expiry) |
.as_link(format="parquet") | Execute and return download link (Parquet) |
.calculate_cost() | Calculate query cost without executing (no quota deducted) |