# Content Opportunity Intelligence (`thescrapelab/content-opportunity-intelligence`) Actor

Discover timely content ideas and trend signals from Google News and Hacker News for faster editorial planning.

- **URL**: https://apify.com/thescrapelab/content-opportunity-intelligence.md
- **Developed by:** [Inus Grobler](https://apify.com/thescrapelab) (community)
- **Categories:** SEO tools
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.20 / 1,000 content opportunity returneds

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

## 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

## Content Opportunity Intelligence

Find timely content ideas, public trend signals, research signals, and evidence
links for your editorial plan. Start with Google News, then add Hacker News,
Stack Overflow, Bluesky, or curated publisher feeds when you need technical,
community, and publisher angles. Receive ranked
opportunities for content research, newsletters, blogs, and marketing planning.

### How it works in 30 seconds

1. Enter a topic, such as `AI agents for customer support`.
2. Choose the country, time range, and public sources to include.
3. Run the Actor and review the ranked ideas, source links, and opportunity
   scores in the dataset.

The default input searches Google News for `AI agents` over the last seven days
and returns up to five opportunities. Add optional sources or raise the limit
after reviewing the first dataset when you want a wider technical or research
view.

### Input guide

| Input | What it means |
| --- | --- |
| Topic or keyword | What you want content ideas about. |
| News country | The country used to localize Google News results. Other sources are global. |
| Lookback period | How far back to search, from 1 to 30 days. |
| Sources | Google News, Hacker News, Stack Overflow, Bluesky posts, curated publisher feeds, or any combination. |
| Maximum opportunities | The maximum number of ranked ideas to return. |
| Show only stronger opportunities (optional) | Leave at 0 to see all results. Raise it to hide lower-priority ideas. |

### Start with this input

```json
{
  "query": "AI agents for customer support",
  "country": "US",
  "lookbackDays": 7,
  "sources": ["googleNews"],
  "maxItems": 5,
  "minTrendScore": 0
}
```

### What you get

Each row is one content opportunity with a title, source, publication date,
evidence link, short source summary, and opportunity score.

```json
{
  "itemType": "content_opportunity",
  "title": "Encore AI raises $30M to build AI agents that learn from customer calls - TechCrunch",
  "sourceName": "TechCrunch",
  "publishedAt": "2026-07-29T14:41:06.000Z",
  "url": "https://news.google.com/rss/articles/CBMiqAFBVV95cUxQZVM2M2g4bFd4X0VlNzNTY3Z2TE9hVEsxSk1Rd2o0VFQ5M1VNb25VNVRsd0pMbUNPNVowbGQxa2R4VU5QYWxhREE4WlF2ajJ3SlJaSVlTSV9LMTh5N0ViZkJ2V2JDcFZpcUxOQUU1UzFYd0JfMXBmOXlLb283dXcycldnSUl1VUVZWkd3WGpPR0pPaFhMcnlKVnl4Y1QzNDdzVGZTVkd1R20?oc=5",
  "summary": "Encore AI raises $30M to build AI agents that learn from customer calls TechCrunch",
  "trendScore": 86.04,
  "matchedQuery": "AI agents for customer support"
}
```

#### How to read the opportunity score

The opportunity score helps you decide what to inspect first. It favors newer
content and uses source-relative engagement when a source provides it. It is a
prioritization signal, not a prediction of traffic, revenue, or virality.

This verified example came from the private `0.2.1` candidate. For
integrations, each row also includes `canonicalUrl`, `dedupeKey`,
`scoreVersion`, `scoreComponents`, and `contributingSources`. These fields help
with deduplication and automation; most users can focus on the default dataset
view.

### Best use cases

- Find timely newsletter, blog, and social-content ideas.
- Monitor category, competitor, or product coverage.
- Build a lightweight trend-discovery or editorial-planning dashboard.
- Collect evidence links before writing a content brief.

### Sources, data use, and limitations

This version queries the public Google News RSS search feed, Hacker News Algolia
API, Stack Overflow API, Bluesky public AppView, and a
small allowlist of publisher RSS or Atom feeds. It keeps source links and
attribution so you can verify each opportunity. Stack Overflow results are
technical questions; Bluesky text is limited to 500 characters; publisher feeds
are filtered by your topic and time range. It does not fetch destination articles,
access paywalls, use browser sessions, or predict business outcomes.

Source availability and coverage can change. If one selected source is
unavailable, the run returns available results from the other source and records
the warning in the `OUTPUT` run summary. If every selected source fails, the run
fails with an actionable diagnostic. An empty result is reported clearly as
`no_results`. Optional research and publisher sources favour precise matches, so
they may return no results for a narrow topic rather than add loosely related
items.

> This is an unofficial tool and is not affiliated with, endorsed by, or
> sponsored by Google, Hacker News, Algolia, Stack Overflow, Stack Exchange,
> Bluesky, BBC, The Verge, TechCrunch, or their respective owners.

### Pricing and support

The Actor uses straightforward pay-per-event pricing: $0.002 when a run starts
and $0.0002 for each content opportunity returned ($0.20 per 1,000
opportunities). The five-opportunity default costs up to approximately $0.003.
Check the Store estimate before starting a run, especially after raising the
result limit or adding sources. Platform usage is included in these prices, so
there is no separate usage charge from this Actor.

For questions, feedback, or source-correction requests, use the Actor's Apify
Issues tab. Release notes are maintained with each published build.

### Python API

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("thescrapelab/content-opportunity-intelligence").call(run_input={
    "query": "AI agents for customer support",
    "country": "US",
    "lookbackDays": 7,
    "sources": ["googleNews"],
    "maxItems": 5,
    "minTrendScore": 0,
})

items = client.dataset(run["defaultDatasetId"]).list_items().items
for item in items:
    print(item["title"], item["trendScore"])
```

# Actor input Schema

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

The topic to research, for example: AI agents for customer support.

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

Country used for Google News relevance. Other sources are global.

## `lookbackDays` (type: `integer`):

Only consider content from the last number of days where the source supports it.

## `sources` (type: `array`):

Choose public sources to include. Google News is the inexpensive default; the other sources are optional and global.

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

Maximum number of ranked opportunities to save.

## `minTrendScore` (type: `integer`):

Leave at 0 to see every result. Raise the score to hide lower-priority opportunities.

## Actor input object example

```json
{
  "query": "AI agents",
  "country": "US",
  "lookbackDays": 7,
  "sources": [
    "googleNews"
  ],
  "maxItems": 5,
  "minTrendScore": 0
}
```

# Actor output Schema

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

Ranked public content opportunities in the default dataset.

## `runSummary` (type: `string`):

Source outcomes, request count, runtime, warnings, and scoring version.

# 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 = {
    "sources": [
        "googleNews"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("thescrapelab/content-opportunity-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 = { "sources": ["googleNews"] }

# Run the Actor and wait for it to finish
run = client.actor("thescrapelab/content-opportunity-intelligence").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 '{
  "sources": [
    "googleNews"
  ]
}' |
apify call thescrapelab/content-opportunity-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thescrapelab/content-opportunity-intelligence"
        }
    }
}

```

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/C4SpmugvClCsSLRPe/builds/takm1brfRmD8ezdQL/openapi.json
