# Crypto Price API - CoinDesk Data OHLCV, CADLI Index and News (`nabeelbaghoor/crypto-price-index-news-api`) Actor

Crypto price API for CoinDesk Data (CryptoCompare): live spot ticks and OHLCV candles by day, hour or minute for 180 exchanges, CADLI and other CoinDesk index values, asset metadata and market cap top list, and crypto news with sentiment. Bring your own API key.

- **URL**: https://apify.com/nabeelbaghoor/crypto-price-index-news-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Developer tools, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 latest spot tick or index value returneds

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

## Crypto Price API - CoinDesk Data OHLCV, CADLI Index and News

Export crypto prices, OHLCV candles, CoinDesk index values, asset metadata and crypto news from the CoinDesk Data API into an Apify dataset, with your own API key.

Works with the CoinDesk Data API (formerly CCData and CryptoCompare). The actor turns a list of exchange instruments, index instruments or assets into clean, deduplicated rows you can download as JSON, CSV or Excel, schedule on a timer, or feed into research notebooks, dashboards, spreadsheets and data warehouses.

### What it does

- **Spot latest tick**: the live price of an instrument on one of about 180 exchanges (coinbase, binance, kraken, bitstamp, okex, bybit and more), with best bid and ask and their sizes, the last trade, and current and rolling hour, day, week, month and year OHLC, volumes, buy and sell split and trade counts. Up to 50 instruments a request.
- **Spot OHLCV candles**: daily, hourly or minute candles per exchange instrument, with open, high, low, close, base and quote volume, buy and sell volume and trade counts. Aggregate 1 to 30 points per candle for 5-minute, 4-hour or weekly bars. The run pages back through the whole history on its own.
- **Index latest value**: the latest CoinDesk index value, such as CADLI (CoinDesk Adaptive Diversified Liquidity Index) for BTC-USD or ETH-USD, with rolling statistics.
- **Index OHLC history**: daily, hourly or minute index candles with volume, top-tier volume and update counts.
- **Asset metadata**: price, supply (max, circulating, total, burnt, staked), circulating and total market cap, rolling volumes and changes, ranks, description, website, white paper, explorers, supported platforms and contract addresses, industries and consensus mechanism, per asset symbol.
- **Asset top list**: assets ranked by market cap, volume, price or change, filtered by asset type (blockchain, token and more) and industry (stablecoin, DeFi, meme, AI, real world assets and more).
- **News articles**: the latest crypto news from CoinDesk and dozens of other publishers, with title, subtitle, link, source, authors, keywords, categories and sentiment, filtered by language, source and category.
- **News sources**: every publisher the news feed covers, with its key for the news source filter.
- **Pay only for results**: a request the provider has nothing for (an unknown instrument, asset or source) becomes a free row that names it and says why.

### How to get an API key

Every CoinDesk Data API route needs a key, including the free tier. Sign up at developers.coindesk.com, open the API keys page in your account settings and create a key. The free key covers the routes and history its plan includes; paid plans raise the call limits and unlock more history and index families. Paste the key into the API key field, or set it as the `DATA_API_KEY` environment secret. A run without a key ends cleanly with a message before any request is sent, and nothing is charged.

### Input

| Field | Used by | What it does |
| --- | --- | --- |
| `mode` | all | `spotLatestTick` (default), `spotHistory`, `indexLatestTick`, `indexHistory`, `assetMetadata`, `assetTopList`, `newsArticles` or `newsSources` |
| `market` | spot modes | Exchange, such as `coinbase` (default), `binance`, `kraken` |
| `indexMarket` | index modes | Index family, such as `cadli` (default) or `ccix` |
| `instruments` | spot and index modes | `BTC-USD`, `ETH-USD`, `SOL-USDT`; case sensitive |
| `timeframe` | candle modes | `days` (default), `hours` or `minutes` |
| `aggregate` | candle modes | Points per candle, 1 to 30 |
| `fill` | candle modes | Return candles for periods with no trading (default on) |
| `startTime`, `endTime` | candle and news modes | `YYYY-MM-DD`, a UTC time, or Unix seconds; both ends inclusive |
| `assets` | asset metadata | `BTC`, `ETH`, `SOL`, or CoinDesk asset IDs |
| `assetLookupPriority` | asset metadata | Match entries as symbol (default), ID or URI |
| `quoteAsset` | asset modes | Conversion asset, `USD` by default |
| `assetLanguage` | asset metadata | Language for descriptions, `en-US` by default |
| `sortBy`, `sortDirection` | asset top list | Ranking field and direction |
| `assetType`, `assetIndustry` | asset top list | Filters |
| `newsLanguage` | news modes | `EN` (default), `ES`, `TR`, `FR`, `JP`, `PT` |
| `newsSources`, `newsCategories`, `newsExcludeCategories` | news articles | Source keys and categories |
| `includeArticleBody` | news articles | Add the full article text (off by default) |
| `sourceType`, `sourceStatus` | news sources | RSS, API or Twitter; active, inactive or both |
| `maxResults` | all | Row cap for the whole run (default 100) |
| `requestsPerMinute` | all | Pacing (default 120) |
| `apiKey` | all | Your CoinDesk Data API key, stored as a secret |

### Example output

A daily spot candle (`spotHistory`, coinbase, BTC-USD). The upper case columns are the provider's own fields, passed through unchanged; the lower case columns are the common ones this actor fills.

```json
{
  "mode": "spotHistory",
  "modeLabel": "Spot OHLCV candles",
  "recordType": "spotCandle",
  "identifier": "coinbase BTC-USD days",
  "found": true,
  "id": "coinbase|BTC-USD|DAY|1791504000",
  "market": "coinbase",
  "instrument": "BTC-USD",
  "timeframe": "days",
  "symbol": null,
  "name": null,
  "date": "2026-10-09T00:00:00.000Z",
  "timestamp": 1791504000,
  "open": 81692.79,
  "high": 83452.99,
  "low": 81534.02,
  "close": 82544.71,
  "value": 82544.71,
  "volume": 4468.95567151,
  "quoteVolume": 368912373.945589,
  "title": null,
  "url": null,
  "retrievedAt": "2026-10-11T09:00:00.000Z",
  "note": null,
  "UNIT": "DAY",
  "TIMESTAMP": 1791504000,
  "TYPE": "954",
  "MARKET": "coinbase",
  "INSTRUMENT": "BTC-USD",
  "MAPPED_INSTRUMENT": "BTC-USD",
  "BASE": "BTC",
  "QUOTE": "USD",
  "BASE_ID": 1,
  "QUOTE_ID": 5,
  "TRANSFORM_FUNCTION": "",
  "OPEN": 81692.79,
  "HIGH": 83452.99,
  "LOW": 81534.02,
  "CLOSE": 82544.71,
  "FIRST_TRADE_TIMESTAMP": 1791504000,
  "LAST_TRADE_TIMESTAMP": 1791590399,
  "FIRST_TRADE_PRICE": 81692.79,
  "HIGH_TRADE_PRICE": 83452.99,
  "HIGH_TRADE_TIMESTAMP": 1791546420,
  "LOW_TRADE_PRICE": 81534.02,
  "LOW_TRADE_TIMESTAMP": 1791508885,
  "LAST_TRADE_PRICE": 82544.71,
  "TOTAL_TRADES": 396556,
  "TOTAL_TRADES_BUY": 144537,
  "TOTAL_TRADES_SELL": 252019,
  "TOTAL_TRADES_UNKNOWN": 0,
  "VOLUME": 4468.95567151,
  "QUOTE_VOLUME": 368912373.945589,
  "VOLUME_BUY": 1980.81074513,
  "QUOTE_VOLUME_BUY": 163525531.761511,
  "VOLUME_SELL": 2488.14492638,
  "QUOTE_VOLUME_SELL": 205386842.18406,
  "VOLUME_UNKNOWN": 0,
  "QUOTE_VOLUME_UNKNOWN": 0
}
```

Other modes keep the same common columns. A news article row fills `title`, `url`, `name` (the publisher) and `date`, and carries `SUBTITLE`, `AUTHORS`, `KEYWORDS`, `SENTIMENT`, `SOURCE_DATA` and `CATEGORY_DATA`. An asset row fills `symbol`, `name`, `value` (USD price) and `volume` (24 hour USD volume), and carries `SUPPLY_CIRCULATING`, `CIRCULATING_MKT_CAP_USD`, `TOPLIST_BASE_RANK` and the rest.

### FAQ

#### What is the CoinDesk Data API?

CoinDesk Data, formerly CCData and before that CryptoCompare, is the market data arm of CoinDesk. Its Data API at data-api.coindesk.com serves exchange spot, futures and options data, CoinDesk indices such as CADLI, asset reference data, on-chain data and an aggregated crypto news feed. It is documented at developers.coindesk.com, and the provider publishes its full OpenAPI document. This actor wraps its most used read routes; the document and the live host were checked on 2026-10-11.

#### Can I use it without an API key?

No. Every CoinDesk Data API data route answers HTTP 401 "API key required" without a key, including the legacy min-api.cryptocompare.com host. A free key from developers.coindesk.com is enough to start. Without a key the run ends cleanly and nothing is charged.

#### How do I download Bitcoin price history as OHLCV candles?

Pick spot OHLCV candles, choose the exchange (for example coinbase), list `BTC-USD` in instruments, pick days, hours or minutes, and set a start time. The run walks back from the end time (or now) to the start time, newest first. For a cross-exchange reference price, use index OHLC history with the `cadli` family instead.

#### What is CADLI?

CADLI is the CoinDesk Adaptive Diversified Liquidity Index, a 24 hour volume-weighted average price across exchanges with a time penalty and outlier adjustment. It is the default index family in this actor. Other families, such as `ccix`, are listed in the index family dropdown; some need a key with that family's entitlement.

#### How do I find the right instrument names?

Instruments are case sensitive and read `BASE-QUOTE`, such as `BTC-USD` or `ETH-USDT`. An exchange's own code (for example `XXBTZUSD` on kraken) works too. An instrument the exchange does not carry comes back as a free row naming it.

#### How do I get crypto news for one coin or one publisher?

Pick news articles and set categories (for example `BTC` or `ETH`) and sources (for example `coindesk`). The news sources mode lists every source key. Articles come back newest first with sentiment, keywords and categories.

#### What do I pay?

0.01 USD per latest spot tick, index value or asset record, 0.008 USD per news article, and 0.005 USD per candle or news source. Rows for requests that found nothing are free. Your CoinDesk Data plan applies separately.

#### What happens if my key is wrong or out of calls?

The provider answers HTTP 401 or 429 and the run ends cleanly with a status message, before anything is charged for that request.

### Keyword map

crypto price API, CoinDesk Data API, CryptoCompare API, CCData API, Bitcoin price history API, crypto OHLCV API, crypto candles API, crypto historical data, CADLI index, CoinDesk index, crypto market cap API, crypto top list, crypto asset metadata, crypto supply data, crypto news API, crypto news sentiment, exchange ticker API, best bid and ask, Coinbase BTC-USD price, Binance price data.

### Terms and data use

CoinDesk Data licenses API data for the key holder's own internal use only. Its API licence agreement says the data must not be shared with anyone else, must not be used for display purposes (on a website or in an application), must not be used to build or distribute products to customers, and must not be used to create or in connection with any index or financial product, unless CoinDesk Data agrees in writing. Licensed data must be deleted when the licence ends. Paid plans and enterprise agreements can grant wider rights. This actor does not change your licence: keep the run's dataset private, and check your plan before sharing or publishing it. News articles belong to their publishers; the article body is left out unless you turn it on.

Which routes were checked live: without a key, and with a short bogus key, the host answers HTTP 401 on every route. With a key of realistic length it answers an invented path with HTTP 404 "Path does not exist", so every wired route was confirmed to exist.

# Actor input Schema

## `mode` (type: `string`):

Every mode needs your own CoinDesk Data API key (the free key works for the routes its plan covers). Spot latest tick and OHLCV candles read exchange markets; index modes read CoinDesk index families such as CADLI; asset modes read metadata and the top list; news modes read articles and sources.

## `market` (type: `string`):

Spot modes. The exchange to read, such as coinbase, binance, kraken or bitstamp.

## `indexMarket` (type: `string`):

Index modes. The CoinDesk index family. cadli is the 24-hour volume-weighted average with time penalty and outlier adjustment; some families need a key with that family's entitlement.

## `instruments` (type: `array`):

Spot and index modes. Instruments, one per line, case sensitive: BTC-USD, ETH-USD, SOL-USDT on an exchange (the exchange's own code such as XXBTZUSD on kraken works too), or BTC-USD, ETH-USD on cadli. Latest tick reads up to 50 a call; candles read one instrument at a time.

## `timeframe` (type: `string`):

Candle modes. Days (up to 5,000 a call), hours or minutes (up to 2,000 a call). The run pages further back on its own.

## `aggregate` (type: `integer`):

Candle modes. Points merged into each candle, 1 to 30: 5 on minutes gives 5-minute candles, 7 on days weekly candles.

## `fill` (type: `boolean`):

Candle modes. On (the provider default) returns a candle for periods with no trading; off leaves them out.

## `startTime` (type: `string`):

Candle and news modes. Oldest point to return, as YYYY-MM-DD, a UTC time such as 2026-01-31T12:00:00Z, or Unix seconds. Left empty, the run reads back until the maximum results cap.

## `endTime` (type: `string`):

Candle and news modes. Newest point to return (the documented to_ts), same formats. Left empty, the run starts from now.

## `assets` (type: `array`):

Asset metadata. Asset symbols, CoinDesk asset IDs or URIs, one per line: BTC, ETH, SOL, USDC. Up to 50 a call.

## `assetLookupPriority` (type: `string`):

Asset metadata. Whether each asset entry is matched first as a symbol, a CoinDesk asset ID or a URI.

## `quoteAsset` (type: `string`):

Asset metadata and top list. The asset prices and market caps are converted into, such as USD (default), EUR or BTC.

## `assetLanguage` (type: `string`):

Asset metadata. Language for asset descriptions and other translated fields.

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

Asset top list. The ranking field.

## `sortDirection` (type: `string`):

Asset top list. Highest first or lowest first.

## `assetType` (type: `string`):

Asset top list. Only assets of this type.

## `assetIndustry` (type: `string`):

Asset top list. Only assets in this industry, such as stablecoins, DeFi protocols or meme coins.

## `newsLanguage` (type: `string`):

News modes. Articles or sources in this language.

## `newsSources` (type: `array`):

News articles. Source keys, one per line, such as coindesk or cointelegraph. The news sources mode lists every key. Left empty, all active sources for the language.

## `newsCategories` (type: `array`):

News articles. Only articles in any of these categories, one per line, such as BTC, ETH, REGULATION or MARKET.

## `newsExcludeCategories` (type: `array`):

News articles. Leave out articles in any of these categories, one per line, such as SPONSORED.

## `includeArticleBody` (type: `boolean`):

News articles. Off by default: rows carry the title, subtitle, link, source, keywords, categories and sentiment. On adds the full BODY text the provider returns. Article text belongs to its publisher.

## `sourceType` (type: `string`):

News sources. Integration type of the source.

## `sourceStatus` (type: `string`):

News sources. Active sources (default), inactive ones, or both.

## `maxResults` (type: `integer`):

The most rows this run returns and charges for.

## `requestsPerMinute` (type: `integer`):

Pacing. Keep it under your key's per-minute call limit; the actor also waits and retries when the provider answers 429.

## `apiKey` (type: `string`):

Your own CoinDesk Data API key, from developers.coindesk.com. Sent in the Authorization header and never logged. You can instead set the DATA_API_KEY environment secret. Without a key the run ends with a message and nothing is charged.

## Actor input object example

```json
{
  "mode": "spotLatestTick",
  "market": "coinbase",
  "indexMarket": "cadli",
  "instruments": [
    "BTC-USD",
    "ETH-USD"
  ],
  "timeframe": "days",
  "aggregate": 1,
  "fill": true,
  "assets": [
    "BTC",
    "ETH"
  ],
  "assetLookupPriority": "SYMBOL",
  "quoteAsset": "USD",
  "assetLanguage": "en-US",
  "sortBy": "CIRCULATING_MKT_CAP_USD",
  "sortDirection": "DESC",
  "assetType": "any",
  "assetIndustry": "any",
  "newsLanguage": "EN",
  "newsSources": [
    "coindesk"
  ],
  "newsCategories": [
    "BTC"
  ],
  "newsExcludeCategories": [
    "SPONSORED"
  ],
  "includeArticleBody": false,
  "sourceType": "RSS",
  "sourceStatus": "ACTIVE",
  "maxResults": 100,
  "requestsPerMinute": 120
}
```

# Actor output Schema

## `records` (type: `string`):

One row per tick, candle, index value, asset, news article or news source.

# 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 = {
    "instruments": [
        "BTC-USD",
        "ETH-USD"
    ],
    "assets": [
        "BTC",
        "ETH"
    ],
    "newsSources": [
        "coindesk"
    ],
    "newsCategories": [
        "BTC"
    ],
    "newsExcludeCategories": [
        "SPONSORED"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/crypto-price-index-news-api").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 = {
    "instruments": [
        "BTC-USD",
        "ETH-USD",
    ],
    "assets": [
        "BTC",
        "ETH",
    ],
    "newsSources": ["coindesk"],
    "newsCategories": ["BTC"],
    "newsExcludeCategories": ["SPONSORED"],
}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/crypto-price-index-news-api").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 '{
  "instruments": [
    "BTC-USD",
    "ETH-USD"
  ],
  "assets": [
    "BTC",
    "ETH"
  ],
  "newsSources": [
    "coindesk"
  ],
  "newsCategories": [
    "BTC"
  ],
  "newsExcludeCategories": [
    "SPONSORED"
  ]
}' |
apify call nabeelbaghoor/crypto-price-index-news-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/crypto-price-index-news-api"
        }
    }
}
```

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/T3JU8xl50f0vn7688/builds/ajFYqlDCoyIdwyBwt/openapi.json
