# Crypto Sentiment Analyzer (`ntriqpro/crypto-sentiment-analyzer`) Actor

AI-powered cryptocurrency sentiment analysis using Fear & Greed Index and news headline sentiment scoring

- **URL**: https://apify.com/ntriqpro/crypto-sentiment-analyzer.md
- **Developed by:** [daehwan kim](https://apify.com/ntriqpro) (community)
- **Categories:** AI, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$50.00 / 1,000 sentiment analyzeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Crypto Sentiment Analyzer

AI-powered cryptocurrency sentiment analysis combining Fear & Greed Index with news headline sentiment scoring.

### Overview

This Actor analyzes cryptocurrency sentiment by:
1. Fetching the Fear & Greed Index from Alternative.me
2. Parsing recent cryptocurrency news from RSS feeds (CoinDesk, CoinTelegraph)
3. Filtering headlines related to the target cryptocurrency
4. Analyzing headline sentiment using local AI (Qwen3.5) with graceful fallback to keyword-based analysis
5. Computing overall sentiment score and classification

### Inputs

| Parameter | Type | Description | Example |
|-----------|------|-------------|---------|
| `coinId` | string | Lowercase cryptocurrency identifier | "bitcoin" |
| `coinName` | string | Full cryptocurrency name for news filtering | "Bitcoin" |

### Outputs

```json
{
  "coinId": "bitcoin",
  "coinName": "Bitcoin",
  "fearGreedIndex": {
    "value": 65,
    "classification": "Greed"
  },
  "overallSentiment": 0.35,
  "sentimentLabel": "positive",
  "newsAnalyzed": 8,
  "headlines": [
    {
      "headlineText": "Bitcoin Surges on Positive Market Sentiment",
      "source": "CoinDesk",
      "sentimentScore": 0.72,
      "sentimentLabel": "very_positive"
    }
  ],
  "processingTimeMs": 4250,
  "disclaimer": "..."
}
````

### Sentiment Labels

- `very_negative`: score ≤ -0.75
- `negative`: -0.75 < score ≤ -0.25
- `neutral`: -0.25 < score < 0.25
- `positive`: 0.25 ≤ score < 0.75
- `very_positive`: score ≥ 0.75

### Data Sources

- **Fear & Greed Index**: [Alternative.me](https://alternative.me/crypto/fear-and-greed-index/)
- **News Feeds**: CoinDesk RSS, CoinTelegraph RSS
- **Sentiment Analysis**: Local AI server (Qwen3.5, Apache 2.0 License)

### Pricing

**$0.05 per analysis** (sentiment-analyzed event)

Apify's revenue share: 20% platform fee, 80% to developers.

### Disclaimer

This Actor provides AI-powered sentiment analysis for **INFORMATIONAL AND EDUCATIONAL PURPOSES ONLY**.

#### Sentiment Analysis Disclosure

- Sentiment scores reflect analysis of publicly available news headlines, NOT market predictions
- **Positive sentiment does NOT guarantee price increases**
- **Negative sentiment does NOT guarantee price decreases**
- AI-generated sentiment scores have inherent limitations and may be inaccurate
- Headlines analyzed may not represent the complete market narrative
- Analysis is based on English-language news only

#### This is NOT

- Financial advice or investment advice
- Trading recommendations or buy/sell signals
- A guarantee of data accuracy
- An endorsement of any investment strategy

#### Risk Disclosure

- Cryptocurrency is highly volatile and involves substantial risk of total loss
- Past performance is NOT indicative of future results
- Always conduct your own research (DYOR)
- Consult a licensed financial advisor before making investment decisions

#### Data Attribution

- **Fear & Greed Index** by [Alternative.me](https://alternative.me/crypto/fear-and-greed-index/)
- **News Headlines** from public RSS feeds (CoinDesk, CoinTelegraph)
- **Sentiment Analysis** powered by Qwen3.5 (local AI, Apache 2.0 License)

#### Limitation of Liability

The creators assume no responsibility for:

- Financial losses or gains
- Investment decisions made based on this data
- Accuracy of sentiment scores
- API availability or data completeness

**By using this Actor, you acknowledge that you have read and agreed to this disclaimer.**

### Error Handling

- **Fear & Greed Index failures**: Attempts to fetch, marks as "unavailable" on error but continues
- **RSS feed failures**: Silently continues to next feed source
- **AI sentiment analysis failures**: Falls back to keyword-based sentiment analysis
- **Network timeout**: 30 seconds for API calls, 15 seconds for AI analysis
- **Graceful degradation**: Actor always completes with whatever data is available

### Sentiment Analysis Methods

#### Primary: AI-Powered (Qwen3.5)

- Requires connectivity to https://ai.ntriq.co.kr
- Returns confidence scores and detailed sentiment classification
- Timeout: 15 seconds per headline

#### Fallback: Keyword-Based

- Analyzes headlines for positive/negative keywords
- Works offline, no AI dependency
- Automatic activation if AI server unavailable or timeout
- Keywords include: surge, gains, profit, crash, plunge, loss, etc.

### Example Usage

```bash
## Run locally
npm install
npm start

## Deploy to Apify
apify push

## Call via API
curl -X POST https://api.apify.com/v2/acts/your-user~crypto-sentiment-analyzer/runs \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "coinId": "ethereum",
    "coinName": "Ethereum"
  }'
```

### Technical Stack

- **Runtime**: Node.js 18.0+
- **Core**: Apify SDK 3.5.2
- **AI Server**: https://ai.ntriq.co.kr/sentiment
- **RSS Parsing**: Native JavaScript (no external libraries)

### Performance

- Typical execution time: 30-60 seconds
- Average cost: $0.05 per analysis
- Rate limiting: Respects alternative.me and news feed rate limits

### Support

For issues or feature requests, contact: support@ntriq.co.kr

# Actor input Schema

## `coinId` (type: `string`):

Lowercase coin identifier (e.g., 'bitcoin', 'ethereum')

## `coinName` (type: `string`):

Full coin name for news filtering (e.g., 'Bitcoin', 'Ethereum')

## Actor input object example

```json
{
  "coinId": "bitcoin",
  "coinName": "Bitcoin"
}
```

# Actor output Schema

## `results` (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 = {
    "coinId": "bitcoin",
    "coinName": "Bitcoin"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ntriqpro/crypto-sentiment-analyzer").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 = {
    "coinId": "bitcoin",
    "coinName": "Bitcoin",
}

# Run the Actor and wait for it to finish
run = client.actor("ntriqpro/crypto-sentiment-analyzer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "coinId": "bitcoin",
  "coinName": "Bitcoin"
}' |
apify call ntriqpro/crypto-sentiment-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ntriqpro/crypto-sentiment-analyzer",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Crypto Sentiment Analyzer",
        "description": "AI-powered cryptocurrency sentiment analysis using Fear & Greed Index and news headline sentiment scoring",
        "version": "1.0",
        "x-build-id": "PnWY1OOrlBsPVNw9G"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ntriqpro~crypto-sentiment-analyzer/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ntriqpro-crypto-sentiment-analyzer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ntriqpro~crypto-sentiment-analyzer/runs": {
            "post": {
                "operationId": "runs-sync-ntriqpro-crypto-sentiment-analyzer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ntriqpro~crypto-sentiment-analyzer/run-sync": {
            "post": {
                "operationId": "run-sync-ntriqpro-crypto-sentiment-analyzer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "coinId",
                    "coinName"
                ],
                "properties": {
                    "coinId": {
                        "title": "Coin ID",
                        "type": "string",
                        "description": "Lowercase coin identifier (e.g., 'bitcoin', 'ethereum')"
                    },
                    "coinName": {
                        "title": "Coin Name",
                        "type": "string",
                        "description": "Full coin name for news filtering (e.g., 'Bitcoin', 'Ethereum')"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
