Binance Market Scraper: Tickers, Klines & Order Book
Pricing
from $0.37 / 1,000 data scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share

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_SUMMARYrecording 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
| Field | Type | Default | Notes |
|---|---|---|---|
symbols | array | ["BTCUSDT","ETHUSDT"] | Binance spot symbols. Separators are stripped, so BTC/USDT, btc-usdt and BTCUSDT are all the same input. |
dataType | string | ticker | ticker, klines, depth or trades. Decides what gets attached to each record. |
interval | string | 1h | Candle size: 1s, 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M. Only used by klines. |
limit | integer | 100 | Rows per symbol. Capped at 1000 for klines and trades, 5000 for depth. Ignored by ticker. |
startTime | string | - | 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"ignoresinterval,limitandstartTime. It is one request per symbol and the cheapest sweep.intervalandstartTimeonly mean anything withdataType: "klines".startTimeis silently ignored (with a warning in the log) for the other types.limit: 5000is only accepted fordepth; 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"}
| Field | Meaning |
|---|---|
symbol | Binance symbol as the exchange reports it |
lastPrice | Most recent trade price |
priceChange, priceChangePercent | Absolute and percentage move over the rolling 24h window |
weightedAvgPrice | Volume-weighted average price for the window |
highPrice, lowPrice | 24h high and low |
volume, quoteVolume | Base-asset and quote-asset volume over the window |
openTime, closeTime | Start and end of the rolling 24h window (ISO 8601) |
tradeCount | Number of trades in the window |
bids, asks | Order-book levels as { price, qty }, best first, populated when dataType: "depth", otherwise null |
klines | OHLCV candles, oldest first, populated when dataType: "klines", otherwise null |
trades | Recent public trades as { id, price, qty, quoteQty, time, isBuyerMaker }, populated when dataType: "trades", otherwise null |
scrapedAt | Run 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 inRUN_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 -1121for an unknown symbol; that symbol is recorded inRUN_SUMMARY.failuresand 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/USDTbecomesBTCUSDT; 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.