# Crypto Twitter Tracker (`maximedupre/crypto-twitter-tracker`) Actor

Monitor a curated set of 1,000+ public crypto Twitter/X accounts and collect near-real-time tweet events with author, text, time, links, media, and engagement data. Filter by usernames, cashtags, engagement, or verified authors, and add sentiment labels when needed.

- **URL**: https://apify.com/maximedupre/crypto-twitter-tracker.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.50 / 1,000 live events

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

### 🛰️ Track the crypto Twitter feed

Crypto traders, researchers, and data builders can follow a curated universe of 1,000+ public crypto Twitter/X accounts. Crypto Twitter Tracker saves near-real-time tweet events with account details, post text, publication time, links, media, engagement, and optional cashtags and sentiment, so you can study market conversations in structured rows.

- Follow tweets from the curated crypto account feed with **[Crypto Tweet Tracker](https://apify.com/maximedupre/crypto-twitter-tracker/examples/crypto-tweet-tracker)**.
- Watch tweet events from the monitored crypto account feed with **[Crypto Twitter Tracker](https://apify.com/maximedupre/crypto-twitter-tracker/examples/crypto-twitter-tracker)**.
- Open a ready-made task for this workflow with **[Crypto Twitter Tracker Free](https://apify.com/maximedupre/crypto-twitter-tracker/examples/crypto-twitter-tracker-free)**.
- Start a focused crypto monitoring run with **[Best Crypto Twitter Tracker](https://apify.com/maximedupre/crypto-twitter-tracker/examples/best-crypto-twitter-tracker)**.
- Use the compact task entry for this feed with **[Ct Tracker Crypto](https://apify.com/maximedupre/crypto-twitter-tracker/examples/ct-tracker-crypto)**.

#### 📡 Live crypto tweet rows

Each dataset row pairs one tracked account with one tweet. Optional fields are included when the source provides them. The row keeps account identity and profile facts next to the tweet text, publication time, links, media, engagement, quoted or replied-to context, cashtags, and sentiment.

#### ▶️ Run a curated crypto Twitter feed

This Actor follows the live monitored feed. Choose event categories and optional filters, run it on Apify, and open the dataset rows. It reads public Twitter/X data without requiring a Twitter/X login, source API key, or session.

**Run steps**

1. Choose **All events** for every currently supported event category, or **Tweet events** for tweet events.
2. Optionally add tracked usernames or cashtags.
3. Turn on sentiment, engagement, or verified-author filters when you need them.
4. Start the run and open the dataset output.

#### ⚙️ Input

Choose the event types and filters that should reach your feed. Leave usernames and cashtags empty and turn off optional filters to use the full curated feed.

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `eventTypes` | string | Chooses `all` for every currently supported event category or `tweet` for tweet events. |
| `usernames` | string\[] | Optionally limits the feed to one or more tracked Twitter/X usernames. Enter names without `@`. Leave empty to use the full curated account list. |
| `cashtags` | string\[] | Optionally keeps tweet events whose text contains a matching cashtag, such as `BTC` or `$ETH`. |
| `includeSentiment` | boolean | When enabled, adds a `bullish`, `bearish`, or `neutral` sentiment label to tweet events when available. It is off by default. |
| `minimumLikes` | integer | Keeps tweet events with at least this many likes. Leave empty to skip this filter. |
| `minimumReplies` | integer | Keeps tweet events with at least this many replies. Leave empty to skip this filter. |
| `minimumReposts` | integer | Keeps tweet events with at least this many reposts. Leave empty to skip this filter. |
| `verifiedAuthorsOnly` | boolean | When enabled, keeps events from verified authors only. It is off by default. |

**Example input**

This is the public input from a successful current-beta default run:

```json
{
  "eventTypes": "all",
  "usernames": [
    "binance"
  ],
  "includeSentiment": false,
  "verifiedAuthorsOnly": false
}
```

#### 🧾 Output

The run output links to the default dataset. Each dataset row has the nested `account` and `tweet` objects below. Optional fields are omitted when the source does not provide them.

**Run output**

| Field | Type | What it does |
|---|---|---|
| `datasetUrl` | string | Opens the default dataset view with the saved rows. |

**Dataset row**

| Field | Type | What it does |
|---|---|---|
| `account` | object | Contains the tracked account that published the tweet. |
| `account.id` | string (optional) | Gives the public account ID. |
| `account.username` | string | Gives the tracked account username without `@`. |
| `account.displayName` | string (optional) | Gives the name shown on the account profile. |
| `account.bio` | string (optional) | Gives the current public account bio. |
| `account.avatarUrl` | string (optional) | Gives the current public avatar image URL. |
| `account.isVerified` | boolean (optional) | Says whether the source marks the account as verified. |
| `account.followersCount` | integer (optional) | Gives the shown follower count. |
| `account.followingCount` | integer (optional) | Gives the shown following count. |
| `account.postCount` | integer (optional) | Gives the shown post count. |
| `account.trackingStatus` | string (optional) | Gives the current tracking status reported for the account. |
| `tweet` | object | Contains the tweet event data. |
| `tweet.id` | string | Gives the public tweet ID. |
| `tweet.text` | string | Gives the text published in the tweet. |
| `tweet.publishedAt` | string | Gives the time when the author published the tweet. |
| `tweet.links` | object\[] (optional) | Lists links included in the tweet text. |
| `tweet.links.url` | string | Gives the URL included in the tweet text. |
| `tweet.links.displayText` | string (optional) | Gives the text shown for the link. |
| `tweet.mentions` | object\[] (optional) | Lists accounts mentioned in the tweet text. |
| `tweet.mentions.id` | string (optional) | Gives the public ID of a mentioned account. |
| `tweet.mentions.username` | string | Gives the username mentioned in the tweet text. |
| `tweet.media` | object\[] (optional) | Lists images and videos attached to the tweet. |
| `tweet.media.type` | string | Gives `image` or `video`. |
| `tweet.media.url` | string | Gives the main source URL for the media. |
| `tweet.media.thumbnailUrl` | string (optional) | Gives a preview image URL for the media. |
| `tweet.quotedPost` | object (optional) | Contains the post quoted by this tweet when present. |
| `tweet.quotedPost.id` | string | Gives the quoted post ID. |
| `tweet.quotedPost.text` | string | Gives the quoted post text. |
| `tweet.quotedPost.publishedAt` | string | Gives the quoted post publication time. |
| `tweet.quotedPost.author` | object | Contains the quoted post author. |
| `tweet.quotedPost.author.id` | string (optional) | Gives the quoted post author's public ID. |
| `tweet.quotedPost.author.username` | string | Gives the quoted post author's username. |
| `tweet.quotedPost.author.displayName` | string (optional) | Gives the quoted post author's display name. |
| `tweet.repliedToPost` | object (optional) | Contains the post to which this tweet replies when present. |
| `tweet.repliedToPost.id` | string | Gives the replied-to post ID. |
| `tweet.repliedToPost.text` | string | Gives the replied-to post text. |
| `tweet.repliedToPost.publishedAt` | string | Gives the replied-to post publication time. |
| `tweet.repliedToPost.author` | object | Contains the replied-to post author. |
| `tweet.repliedToPost.author.id` | string (optional) | Gives the replied-to post author's public ID. |
| `tweet.repliedToPost.author.username` | string | Gives the replied-to post author's username. |
| `tweet.repliedToPost.author.displayName` | string (optional) | Gives the replied-to post author's display name. |
| `tweet.engagement` | object (optional) | Contains engagement totals reported for the tweet. |
| `tweet.engagement.likes` | integer (optional) | Gives the number of likes. |
| `tweet.engagement.replies` | integer (optional) | Gives the number of replies. |
| `tweet.engagement.reposts` | integer (optional) | Gives the number of reposts. |
| `tweet.cashtags` | string\[] (optional) | Lists crypto cashtags found in the tweet text. |
| `tweet.sentiment` | string (optional) | Gives the optional `bullish`, `bearish`, or `neutral` label assigned to the tweet text. |

**Example dataset row**

This complete row came from a successful current-beta run with a cashtag and sentiment filter:

```json
{
  "account": {
    "username": "glassnode",
    "trackingStatus": "active",
    "id": "1022821051187822593",
    "displayName": "glassnode",
    "bio": "Digital asset data, analytics, and research. \n\nhttps://t.co/VrKU3mBzsv\nhttps://t.co/oQcrlZNkPF",
    "avatarUrl": "https://pbs.twimg.com/profile_images/1587118531556130816/dLPGGpUC_normal.jpg",
    "isVerified": true,
    "followersCount": 606716,
    "followingCount": 56,
    "postCount": 5773
  },
  "tweet": {
    "id": "2100246720785650153",
    "text": "$BTC has slipped below the bottom of the range.\n\nThat floor aligned with the True Market Mean and price needs to reclaim it for conditions to remain bullish. \n\nIf it does not, the short-term holder cost basis near $70k becomes increasingly likely. \n\nRead more below 👇 https://t.co/Dx2yCl0Yt9",
    "publishedAt": "2026-09-16T15:33:33.000Z",
    "media": [
      {
        "type": "image",
        "url": "https://pbs.twimg.com/media/HSWSIv_bIAA4CGS.jpg",
        "thumbnailUrl": "https://pbs.twimg.com/media/HSWSIv_bIAA4CGS.jpg"
      }
    ],
    "quotedPost": {
      "id": "2100232147449811310",
      "text": "Bitcoin has slipped below its multi-week range just as the Fed decides on rates. \n\nSupport under price is thin, but the potential catalyst here is strong. \n\nOur latest Week On-Chain report covers what to watch for. https://t.co/av9yaWACcL",
      "publishedAt": "2026-09-16T14:35:39.000Z",
      "author": {
        "username": "glassnode",
        "id": "1022821051187822593",
        "displayName": "glassnode"
      }
    },
    "engagement": {
      "likes": 221,
      "replies": 59,
      "reposts": 22
    },
    "cashtags": [
      "BTC"
    ],
    "sentiment": "bullish"
  }
}
```

#### 💳 Pricing

**Charges**

This Actor uses pay-per-event pricing. A successfully delivered live tweet or account event is charged as one event. Check the pricing panel for the current rate.

#### 🔌 Integrations

**Ways to connect**

Use the Apify API, schedules, and webhooks to run the Actor and read its dataset.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Does it search historical Twitter/X posts?

No. It follows the live monitored feed. It is not a historical backfill or a general historical search.

##### Can I monitor any Twitter/X username?

No. Submitted usernames must be in the curated tracked universe. The Actor does not promise monitoring for arbitrary accounts outside that universe.

##### What happens when usernames and cashtags are empty?

The feed uses the full curated account list. Empty optional filters do not narrow the feed.

##### What is the difference between All events and Tweet events?

**All events** selects every event category currently supported by the feed. **Tweet events** selects tweet events only.

##### Do I need a Twitter/X login or source API key?

No. The Actor accesses public Twitter/X data without requiring a Twitter/X login, source API key, or session.

##### What does the sentiment option add?

When enabled, tweet rows can include a `bullish`, `bearish`, or `neutral` sentiment label.

##### Can I filter by engagement or verified authors?

Yes. Set minimum likes, replies, or reposts, or turn on **Verified authors only**. These filters apply to the events selected by the run.

##### Why is an optional field missing from a row?

The source did not provide that value for the event. Optional fields are omitted instead of being filled with made-up data.

### 📝 Changelog

**v0.0** (18-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~crypto-twitter-tracker/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Twitter Scraper](https://apify.com/maximedupre/twitter-scraper) collects public X posts, profiles, network members, and regional trends.
- [Twitter Media Scraper](https://apify.com/maximedupre/twitter-media-scraper) finds public images, videos, and GIFs with post and author context.
- [Stocktwits Scraper](https://apify.com/maximedupre/stocktwits-scraper) adds public ticker messages, user posts, and ranked symbols for market research.
- [Crypto Twitter Tracker](https://apify.com/muhammetakkurtt/crypto-twitter-tracker) offers another live feed of public crypto Twitter events.
- [Twitter/X Crypto & Stock Sentiment Scraper](https://apify.com/fastcrawler/twitter-x-crypto-stock-sentiment-scraper) focuses on crypto and stock posts with cashtag and sentiment data.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `eventTypes` (type: `string`):

Choose tweet events or all currently supported event categories. All returns every supported event from the monitored feed.

## `usernames` (type: `array`):

Optionally enter one or more monitored Twitter/X usernames. Use names without the @ sign. Leave this empty to use the full curated account list.

## `cashtags` (type: `array`):

Optionally enter one or more cashtags such as BTC or $ETH. The feed keeps tweet events whose text contains a matching cashtag.

## `includeSentiment` (type: `boolean`):

When enabled, add bullish, bearish, or neutral sentiment labels to tweet events. It is off by default.

## `minimumLikes` (type: `integer`):

Only include tweet events with at least this many likes. Leave empty to skip this filter.

## `minimumReplies` (type: `integer`):

Only include tweet events with at least this many replies. Leave empty to skip this filter.

## `minimumReposts` (type: `integer`):

Only include tweet events with at least this many reposts. Leave empty to skip this filter.

## `verifiedAuthorsOnly` (type: `boolean`):

When enabled, keep events from verified authors only. It is off by default.

## Actor input object example

```json
{
  "eventTypes": "all",
  "usernames": [
    "binance"
  ],
  "includeSentiment": false,
  "verifiedAuthorsOnly": false
}
```

# Actor output Schema

## `datasetUrl` (type: `string`):

Open the result rows in the default dataset view.

# 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 = {
    "eventTypes": "all",
    "usernames": [
        "binance"
    ],
    "includeSentiment": false,
    "verifiedAuthorsOnly": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/crypto-twitter-tracker").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 = {
    "eventTypes": "all",
    "usernames": ["binance"],
    "includeSentiment": False,
    "verifiedAuthorsOnly": False,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/crypto-twitter-tracker").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 '{
  "eventTypes": "all",
  "usernames": [
    "binance"
  ],
  "includeSentiment": false,
  "verifiedAuthorsOnly": false
}' |
apify call maximedupre/crypto-twitter-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/crypto-twitter-tracker"
        }
    }
}
```

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/BDV3YqqGUNvx13bk8/builds/Gcib5pILbHbfuQGrl/openapi.json
