# Google News Scraper & AI Sentiment Analysis (Bolivia & LatAm) (`reymon/news-sentiment-ai`) Actor

Rastreo en tiempo real de más de 30 periódicos y cadenas de TV de Bolivia y LatAm. Extrae artículos completos, fotos de portada y audita reputación con IA Multi-Proveedor: Groq (Llama 3.3), OpenRouter, Gemini y GPT-4o mini.

- **URL**: https://apify.com/reymon/news-sentiment-ai.md
- **Developed by:** [reymon 7w7](https://apify.com/reymon) (community)
- **Categories:**
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## 🇧🇴 Bolivia & LatAm Media Monitoring & AI Sentiment Analysis

> **Rastreo en tiempo real de medios de prensa, extracción automática de portadas y auditoría de reputación con Inteligencia Artificial Multi-Proveedor (Groq, B.AI, OpenRouter, Gemini y OpenAI).**\
> Monitorea la presencia e impacto mediático de figuras públicas, autoridades, empresas y marcas en más de 30 periódicos, canales de TV, radios y portales de noticias de Bolivia y Latinoamérica.

***

### 🌟 Características Principales

- ⚡ **Cobertura Integral en Bolivia (93%+ de medios indexados):** Monitorea la prensa nacional y regional (*El Deber, Los Tiempos, La Razón, Visión 360, Correo del Sur, El País, El Potosí, La Patria, Opinion, eju.tv, Unitel, Red Uno, Erbol, ANF*, etc.).
- 🧠 **Arquitectura Multi-IA Universal:** Soporta **Groq Cloud (GPT-OSS 120B en LPUs ultra-rápidas)**, **B.AI (DeepSeek V3.2, Qwen 3.8, GLM, GPT-5 Mini)**, **OpenRouter (100+ modelos / DeepSeek)**, **Google Gemini** y **OpenAI (GPT-4o mini)**. ¡Sin bloqueos por cuotas reducidas!
- 🖼️ **Extracción de Portadas e Imágenes (`imageUrl`):** Extrae la fotografía principal en alta resolución de cada noticia desde metadatos OpenGraph, Twitter Cards y Schema.org.
- 🧹 **Limpieza Editorial Quirúrgica (Mozilla Readability):** Aísla el texto puro de la noticia eliminando barras laterales, anuncios, pop-ups y comentarios.
- 🛡️ **Filtro Anti-Ruido y Anti-Falsos Positivos (`filterIrrelevant`):** Descarta automáticamente noticias donde el personaje solo apareció en barras laterales o enlaces recomendados, entregando solo notas que traten genuinamente sobre el tema.
- 🎯 **Criterios de IA 100% Personalizables (`customPrompt`):** Adapta la evaluación del sentimiento a la sensibilidad de tu cliente (política, finanzas, medio ambiente o legal).
- 🔄 **Resiliencia Automática (Anti-503/429/404):** Sistema de reintentos con retroceso exponencial y modelos de respaldo automáticos para sortear picos de saturación o cambios de modelos sin fallar.
- 💰 **Cero Costo en Proxies:** Arquitectura ligera que no requiere proxies residenciales costosos ni navegadores pesados.

***

### 📥 Tabla Resumen de Parámetros (`INPUT.json`)

| Parámetro | Tipo | Requerido | Por Defecto | Descripción Breve |
| :--- | :--- | :---: | :---: | :--- |
| [`query`](#1-query-t%C3%A9rmino-de-b%C3%BAsqueda--persona-obligatorio) | String | **Sí** | - | Nombre de la figura pública, empresa o palabra clave a rastrear |
| [`aiProvider`](#2-aiprovider-proveedor-de-inteligencia-artificial-opcional) | String | No | `"groq"` | Proveedor de IA: `"groq"`, `"bai"`, `"openrouter"`, `"gemini"` o `"openai"` |
| [`apiKey`](#3-apikey-clave-api-de-la-ia-recomendado) | String | No | - | API Key de tu proveedor elegido (Groq, B.AI, OpenRouter, Gemini u OpenAI) |
| [`aiModel`](#4-aimodel-modelo-de-ia-espec%C3%ADfico-opcional) | String | No | `""` | Modelo específico opcional (ej. `openai/gpt-oss-120b`, `DeepSeek V3.2`, `gpt-4o-mini`) |
| [`additionalKeywords`](#5-additionalkeywords-palabras-clave-adicionales-opcional) | String | No | `""` | Palabras clave extra separadas por coma para afinar o ampliar la búsqueda |
| [`keywordMode`](#6-keywordmode-modo-de-combinaci%C3%B3n-de-palabras-clave-opcional) | String | No | `"AND"` | Modo de combinación: `"AND"` (específica) o `"OR"` (sinónimos / apodos) |
| [`excludeKeywords`](#7-excludekeywords-palabras-a-excluir-opcional) | String | No | `""` | Palabras que NO deben aparecer en las noticias (ej. deportes o farándula) |
| [`customPrompt`](#8-customprompt-instrucciones-personalizadas-para-la-ia-opcional) | String | No | `""` | Reglas y condiciones específicas para que la IA juzgue el sentimiento |
| [`filterIrrelevant`](#9-filterirrelevant-filtrar-noticias-irrelevantes-con-ia-recomendado) | Boolean | No | `true` | Descarta artículos donde el tema solo apareció en enlaces recomendados |
| [`country`](#10-country-pa%C3%ADs-objetivo-opcional) | String | No | `"BO"` | Código de país para filtrar la prensa (`BO`, `AR`, `PE`, `CL`, `CO`, `MX`, `ES`, `US`) |
| [`maxArticles`](#11-maxarticles-cantidad-m%C3%A1xima-de-noticias-opcional) | Integer | No | `10` | Cantidad máxima de artículos a rastrear y analizar (de 1 a 100) |
| [`dateRange`](#12-daterange-ventana-de-tiempo-opcional) | String | No | `"all"` | Filtro de tiempo (`all`, `1d`, `7d`, `30d`, `1y`) |

***

### 📖 Explicación Detallada de Cada Parámetro

A continuación se explica el funcionamiento, casos de uso y ejemplos de cada campo disponible en la pestaña **Input**:

#### 1. `query` (Término de búsqueda / Persona) · *Obligatorio*

- **Qué hace:** Es el núcleo de la búsqueda. Define a quién o qué quieres monitorear en los medios de comunicación.
- **Qué puedes poner:**
  - Nombre de una figura pública o político (ej. `"Rodrigo Paz"`, `"Evo Morales"`, `"Manfred Reyes Villa"`).
  - Nombre de una empresa o institución (ej. `"Banco Unión"`, `"YPFB"`, `"Cervecería Boliviana Nacional"`).
  - Un tema o crisis de coyuntura (ej. `"Escasez de combustible"`, `"Elecciones judiciales"`).
- **Consejo:** No necesitas poner comillas dobles en el formulario; el sistema las aplica internamente para garantizar una búsqueda exacta.

***

#### 2. `aiProvider` (Proveedor de Inteligencia Artificial) · *Opcional*

Selecciona qué motor de IA se encargará de leer y clasificar el sentimiento de las noticias:

- ⚡ **`groq` (Groq Cloud - Recomendado):** Ultra rápido (procesa cada noticia en menos de 1 segundo en chips LPU). Su plan gratuito ofrece hasta **30 solicitudes por minuto y 14.400 peticiones diarias**, sin límites asfixiantes. Modelo por defecto: **`openai/gpt-oss-120b`** (con fallbacks automáticos).
- 🚀 **`bai` (B.AI):** Servicio de inferencia de modelos líderes ([docs.b.ai](https://docs.b.ai/llmservice/api/)). Modelo por defecto: **`DeepSeek V3.2`** (con respaldo en `Qwen3.8-Flash`, `GLM-5.3-Flash` y `GPT-5 Mini`).
- 🌐 **`openrouter` (OpenRouter):** Plataforma unificada con más de 100 modelos. Permite usar modelos gratuitos (`:free`) como DeepSeek R1, Llama 3.3 o Mistral.
- 🤖 **`gemini` (Google Gemini):** Utiliza el modelo `gemini-3.6-flash`.
- 🧠 **`openai` (OpenAI):** Utiliza el modelo `gpt-4o-mini` (alta precisión corporativa).

***

#### 3. `apiKey` (Clave API de la IA) · *Recomendado*

Ingresa la clave correspondiente al proveedor que seleccionaste en `aiProvider`:

- **¿Cómo obtener una clave de Groq gratis en 10 segundos?**
  1. Entra a [console.groq.com](https://console.groq.com) e inicia sesión con Google o GitHub.
  2. Ve al menú **API Keys** y haz clic en **Create API Key**.
  3. Copia tu clave (empieza con `gsk_...`) y pégala aquí. ¡Es 100% gratuita y sin tarjeta de crédito!
- **¿Cómo obtener una clave de B.AI?**
  1. Ingresa a tu panel en [b.ai](https://docs.b.ai/llmservice/api/).
  2. Obtén tu API Key y pégala en `apiKey`.
- **¿Cómo obtener una clave de OpenRouter gratis?**
  1. Entra a [openrouter.ai](https://openrouter.ai) y regístrate.
  2. Ve a **Keys** y genera tu clave (empieza con `sk-or-...`).
- **Google Gemini:** Desde [aistudio.google.com](https://aistudio.google.com).
- **OpenAI:** Desde [platform.openai.com](https://platform.openai.com).

***

#### 4. `aiModel` (Modelo de IA específico) · *Opcional*

Permite sobreescribir el modelo por defecto si deseas experimentar con uno en particular:

- Para Groq: `openai/gpt-oss-120b`, `openai/gpt-oss-20b`, `qwen/qwen3.6-27b`.
- Para B.AI: `DeepSeek V3.2`, `Qwen3.8-Flash`, `GLM-5.3-Flash`, `GPT-5 Mini`, `Qwen3.6-27B`.
- Para OpenRouter: `meta-llama/llama-3.3-70b-instruct:free`, `deepseek/deepseek-chat`, `google/gemini-2.0-flash-exp:free`.
- Para OpenAI: `gpt-4o-mini`, `gpt-4o`.
- Para Gemini: `gemini-3.6-flash`.

***

#### 5. `additionalKeywords` (Palabras clave adicionales) · *Opcional*

- **Qué hace:** Permite agregar una o varias palabras adicionales separadas por comas para combinar con la búsqueda principal.
- **Casos de uso:**
  - **Filtrar por tema:** Si buscas `"Juan Pérez"` y solo te interesan temas de gestión, pones: `alcaldia, obras, salud`.
  - **Variantes ortográficas y apodos:** Si la prensa a veces escribe el apellido de forma diferente o usa apodos, pones: `Perez, el alcalde, lider civico`.

***

#### 6. `keywordMode` (Modo de combinación de palabras clave) · *Opcional*

Define cómo se conectan las `additionalKeywords` con la `query` principal en Google News:

- **Modo `AND` (Búsqueda Específica - Recomendado para filtrar temas):**
  - La noticia **DEBE** mencionar a la persona **Y ADEMÁS** al menos una de las palabras clave.
  - *Sintaxis generada:* `"Juan Pérez" AND (alcaldia OR obras)`
  - *Resultado:* Elimina todo el ruido y te entrega únicamente notas donde se hable de él en relación a esos temas específicos.
- **Modo `OR` (Búsqueda Amplia - Recomendado para sinónimos y apodos):**
  - La noticia puede mencionar a la persona **O** cualquiera de las variantes/apodos ingresados.
  - *Sintaxis generada:* `("Juan Pérez" OR "Perez" OR "el exalcalde")`
  - *Resultado:* Atrapa más noticias, evitando perder artículos donde el medio no usó el nombre completo.

***

#### 7. `excludeKeywords` (Palabras a excluir) · *Opcional*

- **Qué hace:** Permite especificar términos que **NO** deben aparecer en las noticias encontradas.
- **Cómo usarlo:** Escribe las palabras separadas por comas (ej. `futbol, farandula, concierto`).
- **Sintaxis generada:** `-futbol -farandula -concierto`
- **Beneficio:** Si la figura pública tiene homónimos en el deporte o quieres ignorar eventos de farándula, este parámetro limpia los resultados de raíz.

***

#### 8. `customPrompt` (Instrucciones personalizadas para la IA) · *Opcional*

- **Qué hace:** Permite moldear el criterio de evaluación de la IA. En el análisis de reputación, lo que es "bueno" para un político puede ser "malo" para un banco. Con este campo, le das **reglas prioritarias** a la IA.
- **Ejemplos prácticos:**
  - **Campaña Política:**
    > *"Considerar NEGATIVO cualquier vinculación con el partido X o denuncias judiciales, aunque el periodista intente ser neutral. Considerar POSITIVO cualquier anuncio de obras o alianzas sociales."*
  - **Auditoría Bancaria / Financiera:**
    > *"Evaluar con foco estricto en solvencia patrimonial, créditos, tasas de interés, multas de la ASFI y quejas de usuarios. Ignorar patrocinios de eventos y notas de farándula."*
  - **Industria, Minería y Energía (ESG):**
    > *"Analizar la reputación en función del impacto ecológico, gestión del agua y acuerdos con comunidades indígenas originarias."*

***

#### 9. `filterIrrelevant` (Filtrar noticias irrelevantes con IA) · *Recomendado (true)*

- **Qué hace:** Activa un filtro inteligente de dos capas para eliminar falsos positivos.
- **Por qué es necesario:** Muchas páginas web de periódicos colocan widgets de *"Noticias Relacionadas"* o enlaces en la barra lateral con nombres de otras figuras públicas. Google News indexa esas páginas creyendo que hablan de la persona, cuando en realidad la nota trata sobre otro tema.
- **Comportamiento:**
  - Si está en `true` (por defecto): La IA lee todo el artículo y, si detecta que la nota **no trata sobre la persona** (`relevance: false`), **la descarta de inmediato**. No se guarda en el Dataset ni contamina las estadísticas de reputación.
  - Si está en `false`: Guarda todas las noticias encontradas, incluso las que solo mencionen al personaje de forma accidental.

***

#### 10. `country` (País objetivo) · *Opcional*

- **Qué hace:** Configura la edición regional y el feed geográfico de Google News.
- **Valores disponibles:**
  - `BO` – Bolivia 🇧🇴 *(Por defecto)*
  - `AR` – Argentina 🇦🇷
  - `PE` – Perú 🇵🇪
  - `CL` – Chile 🇨🇱
  - `CO` – Colombia 🇨🇴
  - `MX` – México 🇲🇽
  - `ES` – España 🇪🇸
  - `US` – Estados Unidos 🇺🇸

***

#### 11. `maxArticles` (Cantidad máxima de noticias) · *Opcional*

- **Qué hace:** Límite máximo de artículos a rastrear y analizar con IA en cada ejecución (entre `1` y `100`).
- **Por defecto:** `10` artículos.

***

#### 12. `dateRange` (Ventana de tiempo) · *Opcional*

- **Qué hace:** Filtra las noticias por fecha de publicación reciente.
- **Opciones disponibles:**
  - `all` – Todo el historial indexado en Google News *(Por defecto)*.
  - `1d` – Noticias publicadas en las últimas 24 horas *(Ideal para monitoreo matutino diario)*.
  - `7d` – Noticias de los últimos 7 días *(Ideal para resúmenes semanales)*.
  - `30d` – Noticias del último mes.
  - `1y` – Noticias del último año.

***

### 📤 Datos de Salida (`Dataset`)

Por cada noticia procesada, el Actor genera un registro enriquecido descargable en **Excel, CSV o JSON**:

```json
{
  "query": "Juan Pérez",
  "country": "BO",
  "source": "EL DEBER",
  "title": "Cámara Empresarial posesiona a Juan Pérez como nuevo presidente",
  "imageUrl": "https://pxcdn.eldeber.com.bo/eldeber/092026/portada_noticia.jpg",
  "articleUrl": "https://eldeber.com.bo/economia/camara-empresarial-posesiona-nuevo-presidente_1774621186",
  "publishedAt": "2026-09-06T14:30:00.000Z",
  "relevance": true,
  "sentiment": "POSITIVO",
  "sentimentScore": 0.85,
  "tone": "Institucional / Favorable",
  "summary": "La Cámara Empresarial posesionó a Juan Pérez como su nuevo titular tras ganar la elección con amplio respaldo. En su discurso anunció iniciativas clave para el sector productivo.",
  "keyQuotes": [
    "asume la dirección con un plan enfocado en la modernización y crecimiento"
  ],
  "fullTextLength": 2450,
  "scrapedAt": "2026-09-06T20:30:00.000Z"
}
```

#### Explicación de los Campos del Dataset:

- `imageUrl`: Enlace directo a la fotografía o portada original de la noticia.
- `relevance`: Validación booleana (`true`/`false`) de que el artículo efectivamente trata sobre el personaje.
- `sentiment`: Semáforo de reputación: `POSITIVO` 🟢, `NEGATIVO` 🔴 o `NEUTRO` 🟡.
- `sentimentScore`: Puntuación numérica continua de `-1.0` (máxima negatividad) a `+1.0` (máxima favorabilidad).
- `tone`: Calificación del estilo periodístico (ej. *'Crítico / Acusatorio'*, *'Institucional / Favorable'*, *'Triunfal'*).
- `summary`: Síntesis ejecutiva de 2 oraciones sobre lo informado respecto al personaje.
- `keyQuotes`: Array con las citas textuales más contundentes donde se le menciona.

***

### 🔌 Cómo Consumir el Actor vía API REST

Puedes integrar este Actor en tu propio backend, aplicación web, CRM o bot de WhatsApp llamando al endpoint síncrono de Apify:

```bash
curl --request POST \
  --url "https://api.apify.com/v2/acts/TU_USUARIO~TU_ACTOR/run-sync-get-dataset-items?token=TU_APIFY_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "query": "Juan Pérez",
    "aiProvider": "groq",
    "apiKey": "gsk_...",
    "additionalKeywords": "gestion, elecciones",
    "keywordMode": "AND",
    "country": "BO",
    "dateRange": "7d",
    "maxArticles": 10,
    "filterIrrelevant": true
  }'
```

***

### 🚀 Cómo Ejecutar en Local

1. Clonar el repositorio.
2. Instalar dependencias:
   ```bash
   npm install
   ```
3. Configurar tus claves en el archivo `.env`:
   ```env
   GROQ_API_KEY=tu_clave_groq
   GEMINI_API_KEY=tu_clave_gemini
   ```
4. Ejecutar el Actor:
   ```bash
   node src/main.js
   ```

***

### 📄 Licencia

Distribuido bajo licencia MIT. Desarrollado con Apify SDK, Crawlee, Groq, B.AI, OpenRouter y Google Gemini.

# Actor input Schema

## `query` (type: `string`):

Nombre de la figura pública, autoridad, empresa o tema a monitorear en prensa (ej. 'Juan Pérez', 'Ministerio de Economía', 'Banco Unión').

## `country` (type: `string`):

Código de país para el monitoreo de medios.

## `maxArticles` (type: `integer`):

Número máximo de artículos a rastrear y analizar con IA.

## `aiProvider` (type: `string`):

Selecciona qué Inteligencia Artificial deseas usar para auditar la reputación.

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

Ingresa tu clave de Groq (gsk\_...), B.AI (bai\_...), OpenRouter (sk-or-...), Gemini (AIzaSy...) o OpenAI (sk-...). Si la dejas vacía, se usará la clave configurada en las variables de entorno.

## `aiModel` (type: `string`):

Opcional: puedes personalizar el modelo exacto (ej. 'DeepSeek V3.2', 'Qwen3.8-Flash', 'openai/gpt-oss-120b', 'gpt-4o-mini', 'gemini-3.6-flash'). Si lo dejas vacío, se usará el modelo optimizado por defecto automáticamente.

## `additionalKeywords` (type: `string`):

Palabras clave separadas por comas (ej. 'Warnes, elecciones, justicia' o apodos) para afinar o ampliar la búsqueda.

## `keywordMode` (type: `string`):

Elige 'AND' para filtrar temas específicos (menos ruido), o 'OR' para buscar variantes/sinónimos (más noticias).

## `excludeKeywords` (type: `string`):

Palabras que NO deben aparecer en las noticias, separadas por comas (ej. 'futbol, farandula').

## `customPrompt` (type: `string`):

Instrucciones o reglas específicas para que la IA juzgue el sentimiento y relevancia según tu enfoque o intereses del cliente. Ejemplos:

- 'Considerar negativo si se le vincula a denuncias de corrupción o juicios'.
- 'Enfoque empresarial: evaluar solvencia, inversiones y quejas de clientes; ignorar farándula'.
- 'Enfoque ambiental: evaluar estricto cumplimiento ecológico y acuerdos con comunidades originarias'.

## `filterIrrelevant` (type: `boolean`):

Descarta automáticamente noticias donde la persona o empresa solo fue nombrada en enlaces sugeridos, barras laterales o menciones accidentales, entregando solo notas que traten realmente sobre el tema.

## `dateRange` (type: `string`):

Filtrar noticias por antigüedad reciente.

## Actor input object example

```json
{
  "query": "Juan Pérez",
  "country": "BO",
  "maxArticles": 10,
  "aiProvider": "groq",
  "keywordMode": "AND",
  "filterIrrelevant": true,
  "dateRange": "all"
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset con noticias completas, portadas, clasificación de reputación (positivo/negativo/neutro), tono y citas clave analizadas con IA.

# 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 = {
    "query": "Juan Pérez"
};

// Run the Actor and wait for it to finish
const run = await client.actor("reymon/news-sentiment-ai").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 = { "query": "Juan Pérez" }

# Run the Actor and wait for it to finish
run = client.actor("reymon/news-sentiment-ai").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 '{
  "query": "Juan Pérez"
}' |
apify call reymon/news-sentiment-ai --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,reymon/news-sentiment-ai"
        }
    }
}

```

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/qkhIYG2FbG1JaLfqe/builds/T9ItjowltNakgfzPU/openapi.json
