# CryptoPanic News Scraper API (`api_merge/cryptopanic-news-scraper-api`) Actor

CryptoPanic News Scraper API collects the latest cryptocurrency news, media posts and blog articles by feed category and community filter. Get title, summary, full content, source, related coins, community reactions, trend scores and sentiment for every item.

- **URL**: https://apify.com/api_merge/cryptopanic-news-scraper-api.md
- **Developed by:** [Api Merge](https://apify.com/api_merge) (community)
- **Categories:** News, Developer tools, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 news requests

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

### What does CryptoPanic News Scraper API do?

CryptoPanic News Scraper API fetches the **latest cryptocurrency news, media posts and blog articles from [CryptoPanic](https://cryptopanic.com)** as clean JSON. Use `list` mode to pick a feed category such as `Regulation` or `Price Analysis`, optionally narrow it with a community filter such as `Hot` or `Bullish`, and page through the results. Use `detail` mode with a post `id` from the list to fetch a single post together with its community comments. Every item includes the title, summary, full content, source, related coins, community reactions, trend scores and sentiment.

### Why use CryptoPanic News Scraper API?

Use this Actor when you need structured crypto news for dashboards, trading signals, sentiment analysis, newsletters, alerting or research.

- Fetch curated crypto news without parsing HTML
- Filter by category: news sites, media, blogs, regulation, price analysis, ICO news, events
- Filter by community signal: hot, rising, bullish, bearish, important, commented, saved
- Get related coins and reaction counts for every item
- Fetch a single post with its full comment thread
- Export results as JSON, CSV, Excel, HTML, or RSS

### How to use CryptoPanic News Scraper API

1. Open the Actor on Apify.
2. Select `list` to fetch the news list or `detail` to fetch a single post with comments.
3. For `list`: choose a `feed` category, optionally a `filter`, and set the `page` number (each page returns up to 50 items).
4. For `detail`: enter the `postId` taken from a list result's `id` field.
5. Click **Start**.
6. Read the output from the default dataset.

### List Input

| Field | Required | Default | Description |
| --- | --- | --- | --- |
| `mode` | Yes | `list` | Use `list` to fetch the news list. |
| `feed` | No | `Top News` | News category. See the feed options below. |
| `filter` | No | `Show All` | Community filter. See the filter options below. |
| `page` | No | `1` | Page number. Each page returns up to 50 items. |

Values are case-insensitive. `news sites`, `News Sites` and `news-sites` are all accepted.

### Detail Input

| Field | Required | Default | Description |
| --- | --- | --- | --- |
| `mode` | Yes | `detail` | Use `detail` to fetch a single post with its comments. |
| `postId` | Yes | empty | Post `id` from the list response. |

### Feed Options

| Feed | Description |
| --- | --- |
| `Top News` | Curated top stories across all sources. |
| `All News` | Everything, without curation. |
| `Media` | Social media posts and videos. |
| `Blogs` | Blog articles. |
| `News Sites` | Articles from news websites only. |
| `Price Analysis` | Technical and price analysis articles. |
| `Regulation` | Regulatory and legal news. |
| `ICO News` | Token sales, listings and launches. |
| `Events` | Conferences, launches and scheduled events. |

### Filter Options

| Filter | Description |
| --- | --- |
| `Show All` | No community filter. |
| `Commented` | Items with the most comments. |
| `Hot` | Items with the most community activity right now. |
| `Rising` | Items gaining attention quickly. |
| `Bullish` | Items the community marked as bullish. |
| `Bearish` | Items the community marked as bearish. |
| `Important` | Items the community marked as important. |
| `LOL` | Items the community marked as funny. |
| `Top Saved` | Items saved most often by the community. |

### List Input Examples

Top news, no filter:

```json
{
    "mode": "list",
    "feed": "Top News",
    "filter": "Show All",
    "page": 1
}
```

Hot regulation news:

```json
{
    "mode": "list",
    "feed": "Regulation",
    "filter": "Hot",
    "page": 1
}
```

Bullish price analysis, second page:

```json
{
    "mode": "list",
    "feed": "Price Analysis",
    "filter": "Bullish",
    "page": 2
}
```

Rising media posts:

```json
{
    "mode": "list",
    "feed": "Media",
    "filter": "Rising",
    "page": 1
}
```

Most commented blog articles:

```json
{
    "mode": "list",
    "feed": "Blogs",
    "filter": "Commented",
    "page": 1
}
```

Important news from news sites:

```json
{
    "mode": "list",
    "feed": "News Sites",
    "filter": "Important",
    "page": 1
}
```

Bearish ICO news:

```json
{
    "mode": "list",
    "feed": "ICO News",
    "filter": "Bearish",
    "page": 1
}
```

Top saved events:

```json
{
    "mode": "list",
    "feed": "Events",
    "filter": "Top Saved",
    "page": 1
}
```

Funny posts across all news:

```json
{
    "mode": "list",
    "feed": "All News",
    "filter": "LOL",
    "page": 1
}
```

### List Output Example

```json
{
    "success": true,
    "message": "CryptoPanic news fetched successfully.",
    "mode": "list",
    "feed": "Top News",
    "filter": "Rising",
    "page": 1,
    "count": 50,
    "hasMore": true,
    "list": [
        {
            "id": 33525284,
            "type": "link",
            "title": "Cardano Pushes .ada Internet Domain Ambitions as Whale Activity Hits 4-Month High",
            "slug": "Cardano-Pushes-ada-Internet-Domain-Ambitions-as-Whale-Activity-Hits-4-Month-High",
            "url": "https://zycrypto.com/cardano-pushes-ada-internet-domain-ambitions-as-whale-activity-hits-4-month-high/",
            "domain": "zycrypto.com",
            "publishedAt": "2026-10-10T13:09:31+00:00",
            "createdAt": null,
            "summary": "If given the green light, .ada would give Cardano a place in the global internet addressing system alongside notable extensions such as .com and .org.",
            "author": "Brian Njuguna",
            "image": "https://zycrypto.com/wp-content/uploads/2019/03/ZyCrypto.png",
            "coinCodes": ["ADA"],
            "score": null,
            "score1h": 16,
            "score24h": null,
            "sentiment": 1,
            "tags": [9],
            "contentHtml": "<p>Cardano is pushing ahead with its plan to register .ada as a top-level internet domain...</p>",
            "contentText": "Cardano is pushing ahead with its plan to register .ada as a top-level internet domain...",
            "source": {
                "name": "ZyCrypto",
                "domain": "zycrypto.com",
                "region": "en",
                "type": "feed"
            },
            "coins": [
                {
                    "code": "ADA",
                    "slug": "cardano",
                    "name": "Cardano"
                }
            ],
            "reactions": {
                "total": 3,
                "users": 2,
                "positive": 2,
                "important": 1,
                "liked": 1,
                "comments": 0
            }
        }
    ]
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Output Fields

| Field | Description |
| --- | --- |
| `id` | Unique item id. |
| `type` | `link` for articles, `media` for social posts and videos, `blog` for blog articles. |
| `title` | Headline. |
| `slug` | URL-friendly headline. |
| `url` | Link to the original article or post. |
| `domain` | Source domain or social handle. |
| `publishedAt` | Publication time (ISO 8601). |
| `createdAt` | Time the item was first indexed (ISO 8601) or `null`. |
| `summary` | Short summary text. |
| `author` | Author name when available. |
| `image` | Lead image URL when available. |
| `contentHtml` | Article content as HTML. May be a summary for some sources. |
| `contentText` | Article content as plain text. May be a summary for some sources. |
| `source` | `name`, `domain`, `region` (language code) and `type` (`feed`, `twitter`, `youtube`, ...). |
| `coins` | Related coins with `code`, `slug` and `name`. |
| `coinCodes` | Related coin codes only. |
| `reactions` | Community reaction counts: `total`, `users`, `positive`, `negative`, `important`, `liked`, `disliked`, `lol`, `toxic`, `saved`, `comments`. Only non-zero counts are present. |
| `score`, `score1h`, `score24h` | Trend scores overall, for the last hour and for the last 24 hours. |
| `sentiment` | Automated sentiment level (positive values are bullish, negative values are bearish). |
| `tags` | Topic tag ids. |

### Detail Input Example

```json
{
    "mode": "detail",
    "postId": 33525614
}
```

### Detail Output Example

```json
{
    "success": true,
    "message": "CryptoPanic post detail fetched successfully.",
    "mode": "detail",
    "postId": 33525614,
    "post": {
        "id": 33525614,
        "type": "link",
        "title": "BlackRock offloaded almost $500 million of this crypto in a single day",
        "url": "https://example-news-site.com/blackrock-offloaded/",
        "domain": "example-news-site.com",
        "publishedAt": "2026-10-10T15:40:00+00:00",
        "summary": "BlackRock sold a large position in a single session...",
        "contentText": "BlackRock sold a large position in a single session...",
        "source": { "name": "Example News", "domain": "example-news-site.com", "region": "en", "type": "feed" },
        "coins": [{ "code": "ETH", "slug": "ethereum", "name": "Ethereum" }],
        "coinCodes": ["ETH"],
        "reactions": { "total": 4, "users": 3, "negative": 2, "important": 1, "comments": 1 },
        "score24h": 31,
        "sentiment": -1
    },
    "commentCount": 1,
    "comments": [
        {
            "id": 366396,
            "text": "Dump.",
            "createdAt": "2026-10-10T16:17:31+00:00",
            "depth": 0,
            "author": { "id": 359667, "username": "kdk", "name": "kdk" },
            "likes": 0,
            "replies": [
                {
                    "id": 366401,
                    "text": "Or buy the dip?",
                    "createdAt": "2026-10-10T16:40:02+00:00",
                    "depth": 1,
                    "author": { "id": 105380, "username": "Insanity", "name": "Insanity" },
                    "likes": 2,
                    "replies": []
                }
            ]
        }
    ]
}
```

`post` has the same fields as a list item. Comments are nested: each comment carries its own `replies` array.

### Comment Fields

| Field | Description |
| --- | --- |
| `id` | Unique comment id. |
| `text` | Comment body. May contain HTML, for example `@mention` links. |
| `createdAt` | Comment time (ISO 8601). |
| `depth` | Nesting level, `0` for top-level comments. |
| `author` | `id`, `username` and display `name` of the commenter. |
| `likes` | Number of likes on the comment. |
| `replies` | Nested replies with the same structure. |

### Error Output

When a run cannot deliver data, the dataset contains a single item with `success: false` and an `errorCode`:

| Error code | Meaning |
| --- | --- |
| `INVALID_INPUT` | An unsupported `mode`, `feed`, `filter`, `page` or `postId` value was sent, or the post was not found. The message explains the problem. |
| `TEMPORARY_UNAVAILABLE` | The news feed did not return usable data or is rate limiting requests. Run the Actor again in a minute. |
| `CHARGE_LIMIT_REACHED` | The run budget was reached before the result could be charged. |
| `CHARGE_FAILED` | The usage event could not be charged. Try again later. |

### Notes

- Each page returns up to 50 items. When `hasMore` is `false`, the next page is empty.
- Sponsored items are removed from the list.
- `detail` mode only requests comments when the post has at least one comment; otherwise `comments` is an empty array.
- Free Apify plan users are limited to 5 runs per UTC day by this Actor. The limit is shared across list and detail runs.
- `contentHtml` and `contentText` can be a summary rather than the full article for some sources.
- The collected data is stored in Apify's default dataset.

# Actor input Schema

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

Choose whether to fetch a news list or a single post with its comments.

## `feed` (type: `string`):

Choose which news category to fetch.

## `filter` (type: `string`):

Narrow the feed by community activity or sentiment.

## `page` (type: `integer`):

Page number. Each page returns up to 50 items.

## `postId` (type: `integer`):

The id of a post from the list response. Required in detail mode.

## Actor input object example

```json
{
  "mode": "list",
  "feed": "Top News",
  "filter": "Show All",
  "page": 1
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset items with CryptoPanic news results or a warning.

# 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 = {
    "mode": "list",
    "feed": "Top News",
    "filter": "Show All",
    "page": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("api_merge/cryptopanic-news-scraper-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 = {
    "mode": "list",
    "feed": "Top News",
    "filter": "Show All",
    "page": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("api_merge/cryptopanic-news-scraper-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 '{
  "mode": "list",
  "feed": "Top News",
  "filter": "Show All",
  "page": 1
}' |
apify call api_merge/cryptopanic-news-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,api_merge/cryptopanic-news-scraper-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/TA4eBqIE8Uhzfy9CE/builds/GquFu6Dn60eMBfYnq/openapi.json
