# CryptoPanic News Scraper: No Login, No API Key, Monitor Ready (`getascraper/cryptopanic-news-scraper`) Actor

Collect crypto news from CryptoPanic by coin, with headline, summary, source, publish time, coin tags, community sentiment, and panic score. No account or API key needed. Track several coins in one run, or turn on monitor mode for a news velocity signal and scheduled only-new delivery.

- **URL**: https://apify.com/getascraper/cryptopanic-news-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** News, Automation
- **Features:** Limited permissions
- **Stats:** 9 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.52 / 1,000 news stories

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

## 📰 CryptoPanic News Scraper: No Login, No API Key, Monitor Ready

<table width="100%" cellpadding="0" cellspacing="0" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#F5F1FE;border:1px solid #DDD0FB;border-top:4px solid #7C3AED;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Full CryptoPanic news and sentiment data, built to monitor</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Headlines, panic scores, and community sentiment for any coin you track, with no CryptoPanic account needed. Turn on monitor mode and it also flags when coverage on a coin suddenly speeds up.</span>
</td>
</tr>
</table>
<table width="100%" cellpadding="0" cellspacing="0" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #DDD0FB;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 0 10px">
<span style="font-size:15px;font-weight:800;color:#5B21B6">⚡ Zero setup</span><br>
<span style="font-size:12px;color:#57534E">No CryptoPanic account, no API key, nothing to configure. Hit Start.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #DDD0FB;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#5B21B6">📄 Full article text</span><br>
<span style="font-size:12px;color:#57534E">Sentiment, panic score, and the complete article body where the publisher shares it.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #DDD0FB;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#5B21B6">🪙 Track many coins</span><br>
<span style="font-size:12px;color:#57534E">List as many tickers as you want. Coverage stays balanced and duplicates are removed.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #DDD0FB;border-left:none;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 10px 0">
<span style="font-size:15px;font-weight:800;color:#5B21B6">📡 Built-in monitoring</span><br>
<span style="font-size:12px;color:#57534E">Only-new mode skips stories you already have. A signal flag catches sudden jumps in coverage.</span>
</td>
</tr>
</table>

**Get CryptoPanic's crypto news as structured data, with zero setup.** Point it at [CryptoPanic](https://cryptopanic.com), pick your coins, and get a clean dataset with every story's headline, summary, source, exact publish time, tagged coins, and how the community voted on it. Turn on monitor mode and it also tracks whether coverage on a coin is speeding up or slowing down, run after run. There is no account to create and no key to lose.

### 🔍 What does this CryptoPanic scraper do?

It collects CryptoPanic's news for each coin you list and merges everything into one de-duplicated dataset. Each story arrives with its headline, a short summary, the publishing source and author, an exact publish timestamp, the coins it was tagged with, and CryptoPanic's own sentiment and panic score where the community has voted. Around half of all stories also carry the full article text.

You can read the plain latest feed or switch to one of CryptoPanic's ranked views such as Rising, Hot, Bullish, or Bearish, and narrow any of them with a keyword.

Turn on monitor mode and every run also returns a signal summary for each coin: how many stories landed, how fast they are arriving compared to that coin's own recent pace, a flag when coverage suddenly doubles, the net bullish versus bearish mood, and which sources are covering it right now.

### 🎯 Why use it?

**You want sentiment data without paying for a second subscription.** Vote counts, panic scores, and coin tags normally sit behind a CryptoPanic account. This Actor collects them without one, so there is no key to request and no separate rate limit to manage.

**You're tracking news across several coins at once.** List BTC, ETH, SOL, or any tickers you follow and get one merged feed. Coverage is spread evenly across your coins, so one busy coin cannot crowd out the rest.

**You want to know when something changes, not just get another dump of rows.** Turn on monitor mode and schedule the run. Only new stories come back each time, and a signal summary flags the moment news on a coin picks up speed.

### 🚀 How to use it

<table width="100%" cellpadding="0" cellspacing="0" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#F5F1FE;border:1px solid #DDD0FB;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#7C3AED;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">List your coins</span><br>
<span style="font-size:12px;color:#57534E">Add tickers like BTC, ETH, SOL, or leave it empty for the general feed.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F5F1FE;border:1px solid #DDD0FB;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#7C3AED;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a feed</span><br>
<span style="font-size:12px;color:#57534E">Stay on Latest, or choose Rising, Hot, Bullish, Bearish, or Important.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F5F1FE;border:1px solid #DDD0FB;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#7C3AED;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export, or turn on monitoring</span><br>
<span style="font-size:12px;color:#57534E">Download as JSON, CSV, or Excel, or turn on Only new mode and a schedule to track coverage over time.</span>
</td>
</tr>
</table>

### ⚙️ Input

| Field | Type | Required | Description |
|---|---|---|---|
| `currencies` | array of strings | No | Coin tickers to collect news for, for example BTC, ETH, SOL. Leave empty for the general feed. |
| `newsFilter` | enum | No | Which feed to read: Latest, Rising, Hot, Bullish, Bearish, Important, or LOL. |
| `searchQuery` | string | No | Optional keyword filter, for example ETF or halving. |
| `maxItems` | integer | No | Maximum number of unique stories to collect across all coins in this run. |
| `onlyNew` | boolean | No | Monitor mode. Skip stories already collected in an earlier run under the same watchlist name, so a schedule never re-delivers or re-bills the same story. |
| `stateName` | string | No | Watchlist name that "Only new stories" tracks against. Use a different name for each independent schedule, for example one per coin. |
| `requestDelayMs` | integer | No | Pause between requests, in milliseconds. |
| `proxyConfiguration` | object | No | Proxy settings. Datacenter is used by default and works reliably. |

### 📦 Output

```json
{
  "id": 33289687,
  "title": "Bitcoin Just Got Its First Quantum-Safe Transaction Without a Soft Fork",
  "url": "https://coinpaprika.com/news/bitcoin-just-got-first-quantum-safe",
  "domain": "coinpaprika.com",
  "publishedAt": "2026-08-28T07:00:00+00:00",
  "cryptopanicUrl": "https://cryptopanic.com/news/33289687/Bitcoin-Just-Got-Its-First-Quantum-Safe-Transaction",
  "description": "StarkWare mined the first quantum-safe Bitcoin transaction on the network's mainnet on 26 August 2026.",
  "content": "StarkWare mined the first quantum-safe Bitcoin transaction on the network's mainnet on 26 August 2026. The method, built by researcher Avihu Levy, protects holdings from future quantum computers without any change to Bitcoin's protocol...",
  "sourceName": "coinpaprika",
  "sourceKind": "feed",
  "author": "coinpaprika",
  "kind": "link",
  "panicScore1h": 3,
  "sentimentLevel": 1,
  "votes": { "total_count": 4, "positive_count": 3, "like_count": 1 },
  "currencies": ["BTC"],
  "imageUrl": "https://content.coinpaprika.com/api/files/news/cover.jpg",
  "matchedQuery": "bitcoin",
  "scrapedAt": "2026-08-28T07:32:32.279Z"
}
```

#### Signal summary example (monitor mode)

Turn on monitor mode and each run adds one extra record per coin, alongside the story rows above:

```json
{
  "recordType": "coinSignal",
  "coin": "BTC",
  "postCount": 42,
  "windowStart": "2026-09-30T14:02:00+00:00",
  "windowEnd": "2026-09-30T18:47:00+00:00",
  "postsPerHour": 8.85,
  "baselinePostsPerHour": 4.1,
  "velocityRatio": 2.16,
  "newsVelocitySpike": true,
  "bullishVotes": 61,
  "bearishVotes": 19,
  "importantVotes": 14,
  "netVoteRatio": 0.53,
  "meanPanicScore1h": 3.2,
  "maxPanicScore1h": 9,
  "topDomains": ["coindesk.com", "cointelegraph.com", "decrypt.co"],
  "scrapedAt": "2026-09-30T18:47:32.279Z"
}
```

`baselinePostsPerHour` and `velocityRatio` are set to `null` until a watchlist has a prior run to compare against, so the first run under a new watchlist name reports them as null rather than guessing.

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

### 📋 Data table

#### Story fields

| Field | Type | Description |
|---|---|---|
| `id` | integer | CryptoPanic's own story ID, stable across runs. |
| `title` | string | The headline. |
| `url` | string | Direct link to the original article or post. |
| `domain` | string | Domain the story was published on. |
| `cryptopanicUrl` | string | Link to the story's CryptoPanic page, where its votes and discussion live. |
| `publishedAt` | string | Exact publish time in ISO 8601 format. |
| `description` | string | Short summary of the story, where one is published. |
| `content` | string | Full article text, for the roughly half of stories whose publisher shares it. |
| `contentHtml` | string | The same article with its original formatting and links kept. |
| `sourceName` / `sourceKind` | string | The publisher name, and whether it came from a news feed or a social account. |
| `author` | string | Byline, where one is published. |
| `kind` | string | Story type, such as a linked article or a post. |
| `panicScore1h` | number | CryptoPanic's panic score over the last hour, where enough votes exist. |
| `sentimentLevel` | number | Community sentiment rating for the story. |
| `votes` | object | Breakdown of community votes, such as positive and like counts. |
| `currencies` | array | Coin tickers this story was tagged with. |
| `imageUrl` | string | Cover image, where one is published. |
| `matchedQuery` | string | Which coin surfaced this story. Absent for the general feed. |
| `scrapedAt` | string | When this Actor collected it, in ISO 8601 format. |

#### Signal summary fields (monitor mode)

One extra record per coin per run, marked `"recordType": "coinSignal"` so it is easy to filter apart from the story rows.

| Field | Type | Description |
|---|---|---|
| `recordType` | string | Always `coinSignal`. Lets you filter these summaries apart from the story rows in the same dataset. |
| `coin` | string | Which coin, or feed scope, this signal summarizes. |
| `postCount` | integer | Stories collected for this coin in this run. |
| `windowStart` / `windowEnd` | string | Earliest and latest publish time among this run's stories for the coin. |
| `postsPerHour` | number | This run's posting rate for the coin. |
| `baselinePostsPerHour` | number | The coin's rolling posting rate from earlier monitor runs. Null until a prior run exists. |
| `velocityRatio` | number | This run's rate divided by the baseline. Null until a baseline exists. |
| `newsVelocitySpike` | boolean | True once coverage on the coin is running at least twice its usual pace. |
| `bullishVotes` / `bearishVotes` / `importantVotes` | integer | Community vote totals across the coin's stories this run. |
| `netVoteRatio` | number | Bullish versus bearish balance, from -1 to 1. Null when no directional votes exist yet. |
| `meanPanicScore1h` / `maxPanicScore1h` | number | Average and peak panic score across the coin's stories this run. |
| `topDomains` | array | Sources covering the coin most often this run. |
| `scrapedAt` | string | When this Actor built the summary, in ISO 8601 format. |

### 💰 Pricing

This Actor is pay per result. You only pay for the stories you actually collect, an empty run costs nothing, and there is no subscription to manage.

### ⭐ Enjoying CryptoPanic News Scraper?

<table width="100%" cellpadding="0" cellspacing="0" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#F5F1FE;border:1px solid #DDD0FB;border-left:5px solid #7C3AED;border-radius:10px 10px 0 0;color:#1C1917">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Got sentiment data and a working monitor, without any setup?</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other traders and builders find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#7C3AED;border:1px solid #7C3AED;border-left:5px solid #7C3AED;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#FFFFFF">
<a href="https://apify.com/getascraper/cryptopanic-news-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 💡 Tips

- Leave "Coins" empty for the broadest sweep of everything CryptoPanic is publishing right now.
- Use the Bullish and Bearish feeds together to see both sides of the same story cycle for a coin.
- If you want sentiment data, pick a ranked feed. On Rising, nearly every story arrives with vote counts and a panic score, because that feed is ordered by how people voted. On Latest you get the freshest stories, but many are too new for anyone to have voted on yet.
- Ranked feeds also carry full article text more often, so choose Rising or Hot if the article body matters to you.
- Schedule an hourly run and keep only new story IDs if you are building an alert feed.
- Give each coin its own watchlist name in monitor mode if you run them on separate schedules, so their new-story tracking and velocity baselines never mix.

### ❓ FAQ

**Do I need a CryptoPanic account or API key?**
No. This Actor reads CryptoPanic's public news feed, so there is no account, no key, and no sign-up.

**Can I get vote counts and sentiment scores?**
Yes. Community sentiment, panic score, vote breakdowns, and coin tags are all included, with no API key needed.

**Why do some stories have no full article text?**
CryptoPanic only holds the full body for publishers that share it, which is roughly half of all stories. The rest are link posts where only a headline and summary were published. Requesting those stories individually does not add the text, so this is a limit of what CryptoPanic has rather than of this Actor.

**Why do some stories have no panic score or votes?**
Those values only exist once enough people have voted on a story, so very recent items often have none. This Actor never fills in placeholder values, so the field is simply left out when CryptoPanic has not published it.

**Will I get duplicate articles if I list overlapping coins?**
No. Stories are de-duplicated across every coin in the run, so an article tagged with both BTC and ETH is stored once.

**How far back can it go?**
Each coin feed goes back several hundred stories. Raise "Max items" to collect more, or schedule regular runs to build history over time.

**Can I use this to monitor coins over time, instead of pulling data once?**
Yes. Turn on "Only new stories since last run," give it a watchlist name, and schedule the run. Each run returns just the new stories, plus a signal summary showing whether coverage on that coin is speeding up, slowing down, or holding steady.

**What is the signal summary record?**
One extra row per coin on every run, separate from the story rows and marked accordingly. It reports how many stories came in, how that compares to the coin's own recent pace, a flag when coverage more than doubles, and the overall bullish versus bearish mood.

### 🔗 Other actors

- [SEC Form 4 Insider Monitor: Filing Changes](https://apify.com/getascraper/sec-form4-insider-monitor) ↗ - Track insider trading filings as a market signal.
- [Threads Monitor: Public Post Changes](https://apify.com/getascraper/threads-mention-delta-monitor) ↗ - Track public Threads posts and mentions over time.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/cryptopanic-news-scraper/changelog.md

# Actor input Schema

## `currencies` (type: `array`):

Coin tickers to collect news for, for example BTC, ETH, SOL. Each coin is collected separately and the results are merged and de-duplicated. Leave empty for the general news feed.

## `newsFilter` (type: `string`):

Latest is the plain chronological feed with no ranking. The rest are CryptoPanic's own community-driven categories: Rising and Hot rank by recent voting activity, while Bullish, Bearish, Important, and LOL rank by which reaction got the most votes on each post.

## `searchQuery` (type: `string`):

Optional keyword filter on top of the selected feed, for example "ETF" or "halving". Leave empty to collect everything in that feed.

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

Maximum number of unique stories to collect across all coins in this run.

## `onlyNew` (type: `boolean`):

Skip stories already collected in a previous run under the same watchlist name. Use this for a recurring schedule so you never pay for or receive the same story twice.

## `stateName` (type: `string`):

Only used with "Only new stories since last run". Runs sharing the same name track new-story state together; use different names for independent schedules (for example separate watchlists per coin).

## `requestDelayMs` (type: `integer`):

Pause between requests. Raise this if a very large run starts getting rate limited.

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

Datacenter proxies (the default) are cheap and work for CryptoPanic. Switch to Residential only if a very large run starts getting blocked.

## Actor input object example

```json
{
  "currencies": [
    "BTC",
    "ETH"
  ],
  "newsFilter": "",
  "searchQuery": "",
  "maxItems": 100,
  "onlyNew": false,
  "stateName": "default",
  "requestDelayMs": 700,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `newsFeed` (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 = {
    "currencies": [
        "BTC",
        "ETH"
    ],
    "newsFilter": "",
    "searchQuery": "",
    "maxItems": 100,
    "onlyNew": false,
    "stateName": "default",
    "requestDelayMs": 700,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/cryptopanic-news-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 = {
    "currencies": [
        "BTC",
        "ETH",
    ],
    "newsFilter": "",
    "searchQuery": "",
    "maxItems": 100,
    "onlyNew": False,
    "stateName": "default",
    "requestDelayMs": 700,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/cryptopanic-news-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 '{
  "currencies": [
    "BTC",
    "ETH"
  ],
  "newsFilter": "",
  "searchQuery": "",
  "maxItems": 100,
  "onlyNew": false,
  "stateName": "default",
  "requestDelayMs": 700,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/cryptopanic-news-scraper --silent --output-dataset

```

## MCP server setup

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