# BitMart Spot Markets Scraper (`acquistion-automation/bitmart-markets-scraper`) Actor

Scrapes BitMart spot market pairs with last price, 24h volumes, 24h change, and quote currency. Filter by quote currency or symbol, sort by metric, and export to CSV, JSON, Excel, or XML.

- **URL**: https://apify.com/acquistion-automation/bitmart-markets-scraper.md
- **Developed by:** [Acquisition Automation Co.](https://apify.com/acquistion-automation) (community)
- **Categories:** Business, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.69 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![Acquisition Automation Co. Search less. Close more.](https://api.apify.com/v2/key-value-stores/AOdPHdOpeDpzEPS5f/records/banner.jpg)

## 💱 BitMart Spot Markets Scraper

> **Export BitMart's spot market board as rows: last price, 24 hour open, high, low, volume and change, plus the live bid and ask with their sizes.** 17 fields per trading pair. No API key, no registration, no login.

BitMart lists thousands of spot pairs. The exchange shows them in a web table you can sort but not export, and the public ticker endpoint returns a shape that needs work before a spreadsheet will take it. This Actor reads the board, filters it to the pairs you care about, and writes one flat row per pair with the price and the top of the book already parsed as numbers.

| Who uses it | What they use the board for |
|---|---|
| 📈 Traders and quant desks | Ranking pairs by 24 hour quote volume, watching spreads, spotting momentum |
| 🧾 Finance teams holding digital assets | Marking a token position at a dated price for a month end or a diligence file |
| 🔬 Market researchers | Tracking listing depth and liquidity on a second tier exchange over time |
| 🤖 Bot and dashboard builders | Feeding a scheduled price pull into a sheet, a database or an alert |

### 📋 What it does

> 💡 **Why it matters:** a token price is only useful with volume and spread next to it. A pair can print a price on almost no turnover, and this returns both numbers in the same row so you can tell the difference.

- 💹 **Returns the full ticker per pair:** last price, 24 hour open, high, low, base volume, quote volume and percent change.
- 📕 **Includes the top of the book:** best bid and best ask with the size at each, so the spread is visible.
- 🪙 **Filters by quote currency.** Set `quoteCurrency` to `USDT`, `BTC`, `ETH`, `USDC` or any other, or leave it empty for everything.
- 🔎 **Filters by symbol text.** `search` keeps only pairs whose symbol contains what you type, case insensitive.
- ↕️ **Sorts before it writes,** by quote volume, base volume, last price or percent change, highest first, so `maxItems` gives you the top of that ranking.
- 💾 **Exports to CSV, Excel, JSON or XML**, from the run page or the API.

### 📊 Output

Every trading pair is one flat row, with the same 17 fields on every run. Prices and volumes come back as numbers, not strings.

| Field | Type | Description |
|---|---|---|
| 🏷 `symbol` | string | Pair as BitMart writes it, for example `BTC_USDT` |
| 🪙 `baseCurrency` | string | The asset being bought or sold |
| 💵 `quoteCurrency` | string | The asset it is priced in |
| 💲 `lastPrice` | number | Most recent trade price |
| 📦 `baseVolume24h` | number | 24 hour volume in units of the base currency |
| 💰 `quoteVolume24h` | number | 24 hour volume in units of the quote currency, the usual liquidity ranking |
| 🌅 `open24h` | number | Price 24 hours ago |
| ⬆️ `high24h` | number | Highest price in the last 24 hours |
| ⬇️ `low24h` | number | Lowest price in the last 24 hours |
| 📉 `priceChangePercent` | number | Percent change over 24 hours |
| 🟢 `bidPrice` | number | Best bid |
| 📐 `bidSize` | number | Size resting at the best bid |
| 🔴 `askPrice` | number | Best ask |
| 📏 `askSize` | number | Size resting at the best ask |
| 🕰 `timestamp` | string | ISO timestamp BitMart reported for the ticker |
| 🕒 `scrapedAt` | string | ISO timestamp of collection |
| ⚠️ `error` | string | `null` on a normal row |

#### Example rows

```json
{
  "symbol": "BTC_USDT",
  "baseCurrency": "BTC",
  "quoteCurrency": "USDT",
  "lastPrice": 78536.56,
  "baseVolume24h": 2593.91248,
  "quoteVolume24h": 201010315.1,
  "open24h": 77068.38,
  "high24h": 78694.2,
  "low24h": 76388.72,
  "priceChangePercent": 1.905,
  "bidPrice": 78536.55,
  "bidSize": 1.99185,
  "askPrice": 78536.58,
  "askSize": 1.94786,
  "timestamp": "2026-09-14T15:17:54.584Z",
  "scrapedAt": "2026-09-14T15:17:56.344Z",
  "error": null
}
```

```json
{
  "symbol": "SOL_USDT",
  "baseCurrency": "SOL",
  "quoteCurrency": "USDT",
  "lastPrice": 101.8249,
  "baseVolume24h": 210587.78,
  "quoteVolume24h": 21272557.3345,
  "open24h": 100.3051,
  "high24h": 102.3351,
  "low24h": 99.0049,
  "priceChangePercent": 1.515,
  "bidPrice": 101.8199,
  "bidSize": 401.43,
  "askPrice": 101.8301,
  "askSize": 428.07,
  "timestamp": "2026-09-14T15:17:54.305Z",
  "scrapedAt": "2026-09-14T15:17:56.344Z",
  "error": null
}
```

### ✨ Why choose this Actor

| | What you get |
|---|---|
| **Price and liquidity together** | Volume, spread and change sit in the same row as the price, so a thin market is obvious. |
| **No credentials** | The spot board is public. No API key, no account, no signed request. |
| **Sorted before it is capped** | Sorting happens first, so `maxItems: 10` returns the top ten by your metric, not ten arbitrary pairs. |
| **Two timestamps** | `timestamp` is the exchange's, `scrapedAt` is ours. A dated mark holds up in a file. |
| **You pay per row** | No subscription. A filter that matches nothing costs nothing. |

### 🚀 How to use it

1. [Create a free Apify account](https://console.apify.com/sign-up). New accounts start with $5 of credit.
2. Open the Actor and select **Try for free**.
3. Set `quoteCurrency`, or clear it to cover every quote currency.
4. Pick a `sortBy` metric and set `maxItems` to cap the run.
5. Select **Start**, then export from the **Dataset** tab as CSV, Excel, JSON or XML.

The ten deepest USDT markets:

```json
{
  "quoteCurrency": "USDT",
  "sortBy": "quoteVolume24h",
  "maxItems": 10
}
```

Every pair with SOL in the symbol, biggest movers first:

```json
{
  "search": "SOL",
  "sortBy": "priceChangePercent",
  "maxItems": 50
}
```

### ⚙️ Input

| Field | Required | Description |
|---|---|---|
| `quoteCurrency` | No | Keep only pairs quoted in this currency, for example `USDT`, `BTC`, `ETH`, `USDC`. Empty means all |
| `search` | No | Keep only pairs whose symbol contains this text, case insensitive |
| `sortBy` | No | Order by `quoteVolume24h`, `baseVolume24h`, `lastPrice` or `priceChangePercent`, highest first |
| `maxItems` | No | Maximum markets to collect in a run. Defaults to 10 |

### 💰 Pricing

Pay per result. No subscription, and no Apify platform usage on top.

| Apify plan | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Per market row | $0.0085 | $0.00823 | $0.00796 | $0.00769 | $0.00769 | $0.00769 |

| Rows collected | Cost on the Free plan |
|---|---|
| 100 | $0.85 |
| 1,000 | $8.50 |
| 10,000 | $85.00 |

**Free plan runs** return up to 10 rows as a preview. Any paid Apify plan lifts that to 1,000,000 per run.

### 🔌 Integrate with any app

The dataset is available through the Apify API as soon as the run finishes. Use `run-sync-get-dataset-items` for a one-shot call, webhooks to trigger what happens next, or the Make, Zapier, Airbyte and LangChain integrations listed on the Actor page.

### 🤖 Use with an AI agent

Give an agent live access to the market board over the Model Context Protocol:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=acquistion-automation/bitmart-markets-scraper"
```

Then ask it in plain language for the deepest USDT pairs and have it read the prices back.

### ❓ Frequently asked questions

**Is this spot only, or does it include futures?**
Spot markets only. Every row is a spot trading pair from BitMart's public board.

**How fresh is the price?**
`timestamp` is the moment BitMart stamped the ticker and `scrapedAt` is when the row was written. Both are in the row, so you can measure the gap yourself.

**Why did I get fewer rows than `maxItems`?**
Your filters matched fewer pairs than the cap. `quoteCurrency` and `search` both narrow the board before the cap is applied.

**Does `sortBy` run before or after the limit?**
Before. Pairs are ranked by your metric first, then the top `maxItems` are written.

**Do I need a proxy?**
No. Requests and retries are handled inside the Actor and included in the price.

**What can I export?**
CSV, Excel, JSON and XML from the run page, or JSON straight from the API.

### 🔗 More from Acquisition Automation Co.

- [L2BEAT Rollup TVL Scraper](https://apify.com/acquistion-automation/l2beat-rollup-tvl-scraper)
- [DANE Colombia Statistics Scraper](https://apify.com/acquistion-automation/dane-colombia-statistics-scraper)
- [SEC Investor Alerts Scraper](https://apify.com/acquistion-automation/sec-investor-alerts-scraper)
- [FTC Actions Scraper](https://apify.com/acquistion-automation/ftc-actions-scraper)
- [BizBuySell Scraper](https://apify.com/acquistion-automation/bizbuysell-scraper)

### About Acquisition Automation Co.

We build automation for people buying businesses. The repetitive part of an acquisition search, checking listings, pulling public records, tracking owners and assets, is work a machine should do, so the buyer's time goes into judging deals instead of collecting them.

We add new Actors regularly. If there is a source you need and do not see here, tell us.

### 🆘 Support

Open an issue in the **Issues** tab of this Actor with your run ID, the input you used, and what you expected to get back.

### ⚠️ Disclaimer

This Actor is independent and is not affiliated with, endorsed by, or sponsored by BitMart. It collects only publicly available data, and nothing here is investment advice. You are responsible for using that data in compliance with the source's terms of service and applicable law.

# Actor input Schema

## `quoteCurrency` (type: `string`):

Optional. Only return pairs quoted in this currency, e.g. USDT, BTC, ETH, USDC. Leave empty for all quote currencies.

## `search` (type: `string`):

Optional. Only return pairs whose symbol contains this text (case-insensitive), e.g. BTC, SOL, DOGE.

## `sortBy` (type: `string`):

Order pairs by this metric, highest first.

## `maxItems` (type: `integer`):

How many markets to collect per run.

## Actor input object example

```json
{
  "quoteCurrency": "USDT",
  "sortBy": "quoteVolume24h",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "quoteCurrency": "USDT",
    "search": "",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("acquistion-automation/bitmart-markets-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "quoteCurrency": "USDT",
    "search": "",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("acquistion-automation/bitmart-markets-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "quoteCurrency": "USDT",
  "search": "",
  "maxItems": 10
}' |
apify call acquistion-automation/bitmart-markets-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,acquistion-automation/bitmart-markets-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JfMM6QlPgAQSQD9od/builds/EirgslBpodHPytE4v/openapi.json
