# CoinMarketCap Scraper - Listings, Coin Details, OHLCV, Markets (`fabrikit/coinmarketcap-scraper`) Actor

CoinMarketCap scraper: ranked crypto listings with filters (market cap, volume, price, tags, coins vs tokens), full coin details, historical OHLCV candles and exchange rankings. No API key. From US$0.50 per 1,000 records.

- **URL**: https://apify.com/fabrikit/coinmarketcap-scraper.md
- **Developed by:** [Fabrikit](https://apify.com/fabrikit) (community)
- **Categories:** AI, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## CoinMarketCap Scraper - listings, coin details, OHLCV history and exchanges

Collect cryptocurrency market data from CoinMarketCap without an API key or account. Four selectable modes, one flat dataset. Pay only for what you save: **US$0.50 per 1,000 records**.

### Modes

| Mode | What you get | Records |
|---|---|---|
| `listings` | The ranked coin table: rank, price, market cap, 24h volume, 1h/24h/7d/30d/60d/90d change, supply, tags, date added. Filter by market cap, volume, price, tag/category, coins vs tokens; sort by any column; page with a start position | 1 per coin |
| `details` | Full profile of chosen coins: description, website/explorer/social links, tags, launch date and price, contract addresses per chain, statistics (ATH/ATL ranges, supply, FDV, dominance) | 1 per coin |
| `history` | OHLCV candles (15m, 1h, 4h, 1d, 1w, 1m) with market cap and circulating supply, in USD, EUR, GBP, JPY, BTC or ETH. Long ranges are split into several requests automatically | 1 per candle |
| `exchanges` | Exchange ranking: score, traffic, 24h/7d/30d volume, number of markets and coins, launch date, fees | 1 per exchange |

### Input examples

Top 200 DeFi tokens by 24h volume:

```json
{ "modes": ["listings"], "listingsLimit": 200, "tagSlugs": ["defi"], "cryptoType": "tokens", "sortBy": "volume_24h", "maxItems": 200 }
```

Small caps with real liquidity:

```json
{ "modes": ["listings"], "listingsLimit": 500, "marketCapMin": 1000000, "marketCapMax": 50000000, "volume24hMin": 250000 }
```

Daily candles for several coins since 2024:

```json
{ "modes": ["history"], "coins": ["bitcoin", "ethereum", "SOL"], "interval": "1d", "startDate": "2024-01-01", "maxItems": 5000 }
```

Coin profiles:

```json
{ "modes": ["details"], "coins": ["chainlink", "uniswap", "1027"] }
```

`coins` accepts a CoinMarketCap slug (`bitcoin`), a numeric id (`1027`) or an UPPERCASE symbol (`SOL`, resolved among the top 3000 coins).

### Output

```json
{
  "recordType": "listing",
  "id": 1,
  "name": "Bitcoin",
  "symbol": "BTC",
  "slug": "bitcoin",
  "rank": 1,
  "date": "2026-10-13T16:45:00.000Z",
  "price": 83370.15,
  "marketCap": 1675547244928.39,
  "volume24h": 31966332993.93,
  "percentChange24h": 0.8165,
  "data": {
    "circulatingSupply": 20097687, "maxSupply": 21000000, "marketPairCount": 12763,
    "dateAdded": "2010-07-13T00:00:00.000Z", "tags": ["mineable", "pow", "store-of-value"],
    "quote": { "price": 83370.15, "percentChange1h": 0.13, "percentChange7d": -2.7, "percentChange30d": 7.9, "dominance": 59.8, "currency": "USD" }
  },
  "scrapedAt": "2026-10-13T16:50:00.000Z"
}
```

`recordType` is `listing`, `detail`, `history` or `exchange`. For `history`, `price` is the candle close, `volume24h` is the candle volume and `data` has open/high/low/close and the candle times.

### Pricing

| Event | Price |
|---|---|
| Record saved (any mode) | US$0.50 per 1,000 (US$0.0005 each) |

Use **Max records in total** to cap the bill; the Actor stops exactly there.

### FAQ

**Do I need a CoinMarketCap API key?** No. The Actor reads the same public endpoints the website uses.

**How many coins can I get?** Everything CoinMarketCap lists (about 8,000 active coins at the time of writing); a full listing run takes a few seconds.

**Which currencies can prices be quoted in?** USD, EUR, GBP, JPY, BTC and ETH.

**Why are 5 and 30 minute candles missing?** The upstream service answers them unreliably, so only intervals that work consistently are offered: 15m, 1h, 4h, 1d, 7d, 30d.

**Proxies?** The Actor starts on Apify datacenter proxy and moves to a US residential proxy automatically if it is blocked; the choice is logged and stored in the `SUMMARY` record.

**Use cases:** market screeners, price databases and backtests, token research and due diligence, exchange comparisons, alerting dashboards, datasets for AI/ML.

### En español

Scraper de CoinMarketCap sin API key: listados con filtros (capitalización, volumen, precio, etiquetas), detalle de monedas, velas OHLCV históricas y ranking de exchanges. Elige los modos en `modes`, usa `coins` para detalle e histórico y `maxItems` para limitar el gasto. Precio: US$0.50 por cada 1.000 registros.

# Actor input Schema

## `modes` (type: `array`):

listings = ranked coin table with filters; details = full profile of specific coins (description, links, tags, contracts, statistics); history = OHLCV candles of specific coins; exchanges = exchange ranking with volumes.

## `listingsLimit` (type: `integer`):

How many coins to return in the listings mode (after filters and sorting).

## `startRank` (type: `integer`):

Position in the sorted list to start from (1 = first). Use it to page through the market.

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

Sort field of the listing.

## `sortType` (type: `string`):

Descending (biggest first) or ascending.

## `cryptoType` (type: `string`):

Coins have their own blockchain; tokens live on another chain.

## `tagSlugs` (type: `array`):

CoinMarketCap tag slugs, e.g. defi, memes, gaming, ai-big-data, layer-1, stablecoin, nft, solana-ecosystem. Coins matching the tag are returned.

## `marketCapMin` (type: `integer`):

Optional minimum market capitalization.

## `marketCapMax` (type: `integer`):

Optional maximum market capitalization.

## `volume24hMin` (type: `integer`):

Optional minimum 24h trading volume.

## `volume24hMax` (type: `integer`):

Optional maximum 24h trading volume.

## `priceMin` (type: `number`):

Optional minimum price.

## `priceMax` (type: `number`):

Optional maximum price.

## `convert` (type: `string`):

Currency prices are expressed in (listings and history).

## `coins` (type: `array`):

One per line: a CoinMarketCap slug (bitcoin, ethereum, solana), a numeric id (1, 1027) or an UPPERCASE symbol (BTC, ETH; resolved among the top 3000 coins).

## `interval` (type: `string`):

Size of each OHLCV candle.

## `startDate` (type: `string`):

Defaults to 30 days before the end date. Long ranges are fetched in several requests automatically.

## `endDate` (type: `string`):

Defaults to now.

## `exchangesLimit` (type: `integer`):

How many exchanges to return in the exchanges mode.

## `exchangeSortBy` (type: `string`):

Exchange ranking criterion.

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

Hard cap for the whole run across all modes. Each record is billed once.

## `proxyConfiguration` (type: `object`):

Datacenter proxy is tried first. If CoinMarketCap blocks it, the Actor automatically switches to a US residential proxy for the rest of the run.

## Actor input object example

```json
{
  "modes": [
    "listings"
  ],
  "listingsLimit": 50,
  "startRank": 1,
  "sortBy": "market_cap",
  "sortType": "desc",
  "cryptoType": "all",
  "tagSlugs": [],
  "convert": "USD",
  "coins": [
    "bitcoin",
    "ethereum"
  ],
  "interval": "1d",
  "exchangesLimit": 25,
  "exchangeSortBy": "score",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All records collected during the run

# 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 = {
    "modes": [
        "listings"
    ],
    "listingsLimit": 50,
    "coins": [
        "bitcoin",
        "ethereum"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fabrikit/coinmarketcap-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 = {
    "modes": ["listings"],
    "listingsLimit": 50,
    "coins": [
        "bitcoin",
        "ethereum",
    ],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("fabrikit/coinmarketcap-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 '{
  "modes": [
    "listings"
  ],
  "listingsLimit": 50,
  "coins": [
    "bitcoin",
    "ethereum"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call fabrikit/coinmarketcap-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fabrikit/coinmarketcap-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/NhyEkzsho7IqG5r2D/builds/nFRGRGNYNaw2ufmuX/openapi.json
