# World News Intelligence (AI-Powered) (`visita/world-news-intelligence`) Actor

This actor is a powerful data-gathering tool that transforms raw news from top RSS feeds (focused on Global Affairs, Geopolitics, and Major World Events) into structured, actionable intelligence. It uses DuckDuckGo News Search to gather real-time context and OpenAI to perform advanced analysis.

- **URL**: https://apify.com/visita/world-news-intelligence.md
- **Developed by:** [Visita Intelligence](https://apify.com/visita) (community)
- **Categories:** News, Agents, AI
- **Stats:** 10 total users, 0 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## 📰 World News Intelligence Pipeline

This actor is a powerful data-gathering tool that transforms raw news from top RSS feeds (focused on **Global Affairs, Geopolitics, and Major World Events**) into structured, actionable intelligence. It uses DuckDuckGo News Search to gather real-time context and an LLM (OpenAI) to perform advanced analysis.

This actor is designed to run on a schedule, continuously gathering fresh intelligence. The structured data it produces is intended to be consumed by other systems, such as our flagship actor, **Content Blueprint AI**, which can use this stream of data to generate reports, global briefings, analysis, and more.

---

### How to Use

You have two primary ways to use this actor:

1.  **As a Data Source for Downstream Systems:** This is the primary intended use. Run this actor on a schedule to build a dataset of fresh intelligence. Other tools, including the `Content Blueprint AI` actor, can then be pointed to this actor's dataset to generate final content and reports.
2.  **As a Standalone Tool:** Run this actor to generate high-quality, structured news intelligence. You are free to download the resulting dataset for your own geopolitical analysis, risk assessment, or to feed into other custom research workflows.

---

### Features

-   **Comprehensive Source Aggregation**: Gathers news from a curated list of top-tier World News and Geopolitical feeds.
-   **Real-Time Grounding (DuckDuckGo)**: Uses the **DuckDuckGo News Search** to find fresh, corroborating snippets for each article, enriching the context before analysis. This ensures the summary is based on current, cross-validated information.
-   **Advanced AI Analysis**: Leverages an LLM to analyze each article for sentiment/impact (e.g., `High Impact`, `Developing Story`, `Informational`), categorize the topic (e.g., `Conflict/Security`, `Policy/Diplomacy`, `Social/Humanitarian`), and extract key entities.
-   **Resilient Processing**: The pipeline is designed to **fall back** to the original RSS summary if the DuckDuckGo search fails, ensuring the run completes without crashing.
-   **Duplicate Prevention**: Intelligently tracks processed articles across runs to ensure you only process and pay for new information.
-   **Cost-Saving Test Mode**: Includes a test mode to run the full workflow with dummy data, allowing for development and testing without incurring API costs.

---

### Setup and Configuration

Before running the actor, you only need to provide an API key for the LLM service.

1.  **OpenAI API Key**:
    * You will need an API key from your OpenAI account.

#### Add Keys to Apify Secrets

For security, add this key as a **secret environment variable** in your Apify Actor settings:

-   `OPENAI_API_KEY`: Your OpenAI API Key.

---

### Cost of Usage 💸

**Important Note:** The costs listed below are for **this actor only**. Using this data with any other actor will incur its own separate API and platform costs.

#### Costs for This Actor

1.  **Apify Platform Usage**: Standard platform costs for running the actor, which depends on the duration of the run.
2.  **DuckDuckGo Search**: This service is **free** and is handled internally by the actor, replacing the need for paid search APIs. The actor performs **one search query for every article** it processes.
3.  **OpenAI API**: This is the primary cost. The actor makes **two LLM calls for every article**: one to summarize the DuckDuckGo Search snippets and another to perform the final analysis (sentiment, category, etc.).

---

### Input

| Field | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `source` | String | `all` | The news source category to use (e.g., 'all', 'bbc-world', 'reuters-top'). |
| `customFeedUrl` | String | `null` | A custom RSS feed URL to use if `source` is set to `custom`. |
| `maxArticles` | Integer | `20` | The maximum number of new articles to fetch and process in a single run. |
| `region` | String | `wt-wt` | Region to limit search results by (e.g., 'us-en' for US, 'wt-wt' for World). |
| `timeLimit` | String | `w` | Limit search results by time (e.g., 'd' for day, 'w' for week). |
| `runTestMode` | Boolean | `false` | Bypasses all external API calls for zero-cost testing. **Do not enable in production.** |

---

### Output

The actor saves its results in the dataset. Each item is a structured JSON object with the following fields:

| Field | Type | Description |
| :--- | :--- | :--- |
| `source` | String | The name of the news source (e.g., 'BBC News'). |
| `title` | String | The original title of the news article. |
| `url` | String | The URL of the original article. |
| `published` | String | The publication date string from the RSS feed. |
| `summary` | String | The AI-generated summary of the article. |
| `sentiment` | String | The AI-analyzed impact level (e.g., `High Impact`, `Developing Story`, `Informational`). |
| `category` | String | The AI-assigned category (e.g., `Conflict/Security`, `Policy/Diplomacy`, `Environment`). |
| `key_entities` | Array of Strings | A list of key entities like countries, organizations, or political figures. |

# Actor input Schema

## `source` (type: `string`):

Select the news category to collect from. Articles will be fetched from different sources within this category first.
## `customFeedUrl` (type: `string`):

Provide a custom RSS feed URL (if 'Custom' selected).
## `maxArticles` (type: `integer`):

Provide a maximum number of articles to fetch. The pipeline will prioritize using a different source for each article until sources are exhausted.
## `region` (type: `string`):

Region to limit search results by (e.g., 'us-en' for US, 'wt-wt' for World).
## `timeLimit` (type: `string`):

Limit search results by time.
## `runTestMode` (type: `boolean`):

Setting this to true bypasses the DuckDuckGo Search and the OpenAI LLM call, enabling zero-cost testing of the workflow. **DO NOT ENABLE IN PRODUCTION.**

## Actor input object example

```json
{
  "source": "all",
  "maxArticles": 20,
  "region": "wt-wt",
  "timeLimit": "w",
  "runTestMode": false
}
````

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("visita/world-news-intelligence").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("visita/world-news-intelligence").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 '{}' |
apify call visita/world-news-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=visita/world-news-intelligence",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "World News Intelligence (AI-Powered)",
        "description": "This actor is a powerful data-gathering tool that transforms raw news from top RSS feeds (focused on Global Affairs, Geopolitics, and Major World Events) into structured, actionable intelligence. It uses DuckDuckGo News Search to gather real-time context and OpenAI to perform advanced analysis.",
        "version": "0.0",
        "x-build-id": "U4itwfhTfBvCbmkfZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/visita~world-news-intelligence/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-visita-world-news-intelligence",
                "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/visita~world-news-intelligence/runs": {
            "post": {
                "operationId": "runs-sync-visita-world-news-intelligence",
                "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/visita~world-news-intelligence/run-sync": {
            "post": {
                "operationId": "run-sync-visita-world-news-intelligence",
                "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": [
                    "source"
                ],
                "properties": {
                    "source": {
                        "title": "News Category",
                        "enum": [
                            "all",
                            "Technology",
                            "Business/Finance",
                            "World/Politics",
                            "Health/Science",
                            "Lifestyle/Culture",
                            "Other",
                            "custom"
                        ],
                        "type": "string",
                        "description": "Select the news category to collect from. Articles will be fetched from different sources within this category first.",
                        "default": "all"
                    },
                    "customFeedUrl": {
                        "title": "Custom RSS Feed URL",
                        "type": "string",
                        "description": "Provide a custom RSS feed URL (if 'Custom' selected)."
                    },
                    "maxArticles": {
                        "title": "Maximum Articles",
                        "type": "integer",
                        "description": "Provide a maximum number of articles to fetch. The pipeline will prioritize using a different source for each article until sources are exhausted.",
                        "default": 20
                    },
                    "region": {
                        "title": "Search Region (DuckDuckGo)",
                        "enum": [
                            "wt-wt",
                            "us-en",
                            "uk-en",
                            "au-en",
                            "de-de",
                            "fr-fr"
                        ],
                        "type": "string",
                        "description": "Region to limit search results by (e.g., 'us-en' for US, 'wt-wt' for World).",
                        "default": "wt-wt"
                    },
                    "timeLimit": {
                        "title": "Time Limit (DuckDuckGo)",
                        "enum": [
                            "any",
                            "d",
                            "w",
                            "m"
                        ],
                        "type": "string",
                        "description": "Limit search results by time.",
                        "default": "w"
                    },
                    "runTestMode": {
                        "title": "Admin Test Mode (Bypasses ALL External API Costs)",
                        "type": "boolean",
                        "description": "Setting this to true bypasses the DuckDuckGo Search and the OpenAI LLM call, enabling zero-cost testing of the workflow. **DO NOT ENABLE IN PRODUCTION.**",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
