Binance Market Scraper: Tickers, Klines & Order Book avatar

Binance Market Scraper: Tickers, Klines & Order Book

Pricing

from $0.37 / 1,000 data scrapeds

Go to Apify Store
Binance Market Scraper: Tickers, Klines & Order Book

Binance Market Scraper: Tickers, Klines & Order Book

Scrape Binance public market endpoints: 24h tickers, OHLCV klines, order-book depth and recent trades across every listed pair. Exchange-grade data with no authentication.

Pricing

from $0.37 / 1,000 data scrapeds

Rating

0.0

(0)

Developer

Arman Hossain

Arman Hossain

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Binance Market Scraper: Tickers, candles, order-book depth and recent trades for any spot pair, one record per symbol

Binance Market Scraper pulls exchange-grade market data straight from Binance's public spot REST API: the 24-hour ticker rollup for any listed pair, OHLCV candles at any interval from 1 second to 1 month, live order-book depth, and the most recent public trades.

Give it a list of symbols and it returns one structured record per symbol. Every record always carries the 24h ticker, last price, change, high/low, base and quote volume, trade count, and the data type you pick is attached on top. No credentials to manage.

Agent skill: SKILL.md

https://api.apify.com/v2/key-value-stores/t7YoTxpZEJOWvw4Ug/records/binance-market-data-scraper.md

What you get

  • One record per symbol, with the 24-hour ticker always on it: last price, absolute and percentage change, weighted average, high and low, base and quote volume, trade count and the window's open and close times.
  • The data type you ask for, attached to that same record — OHLCV candles at any interval from one second to one month, live order-book depth, or the most recent public trades — so a multi-symbol run is one table rather than a join.
  • Numbers as numbers. Prices, volumes and percentages arrive parsed rather than as the strings the exchange sends, and every timestamp is ISO 8601 UTC.
  • A RUN_SUMMARY recording the symbols requested, what each returned, the request weight used against the exchange's budget, and any symbol that failed with its reason.
  • No credentials to manage — public spot market data only.

Input

FieldTypeDefaultNotes
symbolsarray["BTCUSDT","ETHUSDT"]Binance spot symbols. Separators are stripped, so BTC/USDT, btc-usdt and BTCUSDT are all the same input.
dataTypestringtickerticker, klines, depth or trades. Decides what gets attached to each record.
intervalstring1hCandle size: 1s, 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M. Only used by klines.
limitinteger100Rows per symbol. Capped at 1000 for klines and trades, 5000 for depth. Ignored by ticker.
startTimestring-Fetch candles from this point forward. ISO date (2026-01-01) or an epoch timestamp in seconds or milliseconds. Only applies to klines.

Which combinations make sense

  • dataType: "ticker" ignores interval, limit and startTime. It is one request per symbol and the cheapest sweep.
  • interval and startTime only mean anything with dataType: "klines". startTime is silently ignored (with a warning in the log) for the other types.
  • limit: 5000 is only accepted for depth; klines and trades cap at 1000 per request.
  • Order books and trades are point-in-time snapshots. For a time series, schedule the Actor rather than raising limit.
{
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"],
"dataType": "klines",
"interval": "1h",
"limit": 500,
"startTime": "2026-08-01"
}

Output

One dataset item per symbol. Prices, volumes and percentages are numbers, not the strings Binance sends; timestamps are ISO 8601.

{
"symbol": "BTCUSDT",
"lastPrice": 64584.01,
"priceChange": 501.09,
"priceChangePercent": 0.782,
"weightedAvgPrice": 64616.58408739,
"highPrice": 65025.22,
"lowPrice": 63880,
"volume": 12407.52427,
"quoteVolume": 801731835.3088007,
"openTime": "2026-08-05T11:29:41.001Z",
"closeTime": "2026-08-06T11:29:41.001Z",
"tradeCount": 2314415,
"bids": null,
"asks": null,
"klines": [
{
"openTime": "2026-08-01T00:00:00.000Z",
"open": 62887.88,
"high": 63024.04,
"low": 62887.87,
"close": 62938.01,
"volume": 517.26897,
"closeTime": "2026-08-01T00:59:59.999Z",
"quoteVolume": 32568037.4802799,
"tradeCount": 40193,
"takerBuyVolume": 232.52413,
"takerBuyQuoteVolume": 14639741.9602915
}
],
"trades": null,
"scrapedAt": "2026-08-06T11:29:41.480Z"
}
FieldMeaning
symbolBinance symbol as the exchange reports it
lastPriceMost recent trade price
priceChange, priceChangePercentAbsolute and percentage move over the rolling 24h window
weightedAvgPriceVolume-weighted average price for the window
highPrice, lowPrice24h high and low
volume, quoteVolumeBase-asset and quote-asset volume over the window
openTime, closeTimeStart and end of the rolling 24h window (ISO 8601)
tradeCountNumber of trades in the window
bids, asksOrder-book levels as { price, qty }, best first, populated when dataType: "depth", otherwise null
klinesOHLCV candles, oldest first, populated when dataType: "klines", otherwise null
tradesRecent public trades as { id, price, qty, quoteQty, time, isBuyerMaker }, populated when dataType: "trades", otherwise null
scrapedAtRun timestamp

A RUN_SUMMARY record in the key-value store holds the run's counts, the mirror used, the peak request weight and every symbol that failed:

{
"host": "https://api.binance.com",
"dataType": "klines",
"symbolsRequested": 4,
"symbolsFailed": 1,
"failures": [
{ "symbol": "NOPEUSDT", "error": "rejected by Binance: Invalid symbol. (code -1121)" }
],
"seriesSaved": 3,
"peakRequestWeight": 14,
"requestWeightLimit": 6000,
"filters": {
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT", "NOPEUSDT"],
"dataType": "klines",
"interval": "1h",
"limit": 5,
"startTime": "2026-08-01T00:00:00.000Z"
},
"finishedAt": "2026-08-06T11:29:43.255Z"
}

Use cases

Backtest strategies on free OHLCV history. Pull daily candles from a fixed start date across your universe, then diff on openTime for incremental updates.

{
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT", "BNBUSDT"],
"dataType": "klines",
"interval": "1d",
"limit": 1000,
"startTime": "2024-01-01"
}

Monitor spreads and liquidity. Snapshot the top of book on a schedule; the best bid/ask spread and the depth at each level fall straight out of bids[0] and asks[0].

{
"symbols": ["BTCUSDT", "ETHUSDT"],
"dataType": "depth",
"limit": 50
}

Feed a trading dashboard. The ticker sweep is one request per symbol and returns everything a price panel needs.

{
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT", "XRPUSDT", "ADAUSDT"],
"dataType": "ticker"
}

Limits and behaviour

  • Request weight is read, not guessed. Every response carries X-MBX-USED-WEIGHT-1M; the Actor tracks it, pauses 60 seconds if it climbs past 4800 of the 6000/minute budget, and reports the run's peak in RUN_SUMMARY.peakRequestWeight. In practice a 5-symbol kline run peaks around 20.
  • A bad symbol never aborts the run. Binance answers HTTP 400 with code -1121 for an unknown symbol; that symbol is recorded in RUN_SUMMARY.failures and the run continues. The Actor only throws when every symbol fails.
  • Transient errors are retried. 418, 429 and 5xx get three attempts with linear backoff, and each attempt walks the mirror list, so a single unhealthy host does not stall the run.
  • Host failover is automatic. HTTP 451 or 403 on one host moves to the next mirror without burning a retry.
  • Symbols are normalised, not validated locally. BTC/USDT becomes BTCUSDT; whether that pair exists is Binance's answer, not a guess.
  • Requests are paced at ~120 ms between symbols, which is polite and far below any published limit.
  • Public data only. No authentication, no personal data, no access-control bypass.

FAQ

Do I need a proxy? No. Proxy configuration is not required to run this Actor.

Do I need a Binance account or API key? No. You supply no credentials.

What happens if a source is unavailable? It is reported in RUN_SUMMARY.failures and the run continues with the remaining symbols.

Can I schedule it? Yes, that is the intended use. Sub-second endpoints and a small request-weight footprint make minute-level polling comfortable.

How far back does kline history go? To the pair's listing date. Set startTime and raise limit; each run returns up to 1000 candles per symbol, so walk forward across runs for deeper history.

Why is klines null in my records? Because dataType was not klines. Each record populates exactly one of klines, bids/asks or trades, the field for the type you asked for.

Is this spot or futures? Spot (/api/v3). Futures live on a different host and are not covered.

Can I integrate it with something else? Yes, Apify API, client libraries, webhooks, scheduled runs, dataset exports (JSON/CSV/Excel) or MCP. Output is structured JSON.