Historical Data
Historical market data exports for Pendle Boros on Arbitrum.
All data is stored as NDJSON (newline-delimited JSON) compressed with ZIP. Each file covers one calendar month per market.
Browse data: https://historical-data.boros.finance
Directory Structure
market-data/{market}/ Hourly market snapshots
settlement/{market}/ On-chain settlement rate updates
underlying-apr/ Historical underlying funding rates
market-trades/{market}/ Individual trades
ohlcv/{timeframe}/{market}/ OHLCV candles (5m, 1h, 1d)
order-book/{market}/raw/ Raw order book snapshots
order-book/{market}/combined_{tickSize}/ Order book aggregated by tick size
Market naming: {ID}-{EXCHANGE}-{PAIR}-{EXPIRY} (e.g. 2-BINANCE-BTCUSDT-26SEP2025)
File naming: YYYY-MM.ndjson.zip (e.g. 2025-08.ndjson.zip)
How to Decompress
Files are compressed with ZIP. Decompress with any standard unzip tool:
# Decompress a single file
unzip 2025-08.ndjson.zip
# Decompress all files in place
find . -name '*.ndjson.zip' -exec sh -c 'unzip -o -q "$1" -d "$(dirname "$1")"' _ {} \;
How to Read the Data
Each .ndjson file contains one JSON object per line. You can parse it with standard tools:
# Preview first 3 lines (pretty-printed)
unzip -p 2025-08.ndjson.zip | head -3 | jq .
# Count records
unzip -p 2025-08.ndjson.zip | wc -l
# Filter by timestamp range
unzip -p 2025-08.ndjson.zip | jq -c 'select(.timestamp >= 1754006400 and .timestamp < 1754092800)'
Python
import json
import zipfile
# Read compressed file directly
with zipfile.ZipFile('2025-08.ndjson.zip') as zf:
with zf.open(zf.namelist()[0]) as f:
records = [json.loads(line) for line in f]
JavaScript / TypeScript
import { execSync } from 'child_process';
const output = execSync('unzip -p 2025-08.ndjson.zip', { encoding: 'utf-8' });
const records = output.trim().split('\n').map(line => JSON.parse(line));
Data Schemas
Market Data (market-data/)
Hourly snapshots of market state.
| Field | Type | Description |
|---|---|---|
timestamp | number | Unix timestamp |
datetime | string | ISO 8601 datetime |
blockNumber | number | Arbitrum block number |
midApr | number | Mid APR (average of best bid and best ask) |
bestBid | number | null | Best bid rate (highest long order) |
bestAsk | number | null | Best ask rate (lowest short order) |
ammImpliedApr | number | null | AMM implied APR |
markApr | number | Mark APR (on-chain mark rate) |
notionalOI | number | null | Notional open interest |
lastTradedApr | number | null | Rate of the most recent trade |
latestSettlementApr | number | null | Latest on-chain settlement APR (0 from market creation until first settlement) |
{"timestamp":1754006400,"datetime":"2025-08-01T00:00:00.000Z","blockNumber":363657956,"midApr":0.07625,"bestBid":0.07605,"bestAsk":0.07637,"ammImpliedApr":0.07625,"markApr":0.07615,"notionalOI":51,"lastTradedApr":0.07615,"latestSettlementApr":0.07}