# Cross-Platform Trends (`stephen-56/cross-platform-trends`) Actor

See what's trending on Google right now and whether the same topic is also spiking on Wikipedia, Bluesky and YouTube, with real view and post counts.

- **URL**: https://apify.com/stephen-56/cross-platform-trends.md
- **Developed by:** [Stephen Sievertsen](https://apify.com/stephen-56) (community)
- **Categories:** News, Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 topics

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?

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

## Cross-Platform Trends

See which topics are trending at once on **Google**, **Wikipedia**, **Bluesky** and **YouTube**, with real numbers from each: searches, page views, posts and video views. Where a big **Polymarket** prediction market exists for a topic, you also get the betting odds and dollars bet.

A topic trending on one site might be noise. A topic people are searching, reading and posting about at the same time is a story. This Actor checks every trend against the other platforms and ranks topics by how many platforms they're trending on.

All sources are official, free and public, so there are no proxies, no logins and no blocking.

### Two ways to use it

| | **Confirmed trends** (default) | **Full scan** |
|---|---|---|
| Settings | Your countries, *Minimum platforms* 2 | *Countries* `ALL`, *Minimum platforms* 1 |
| You get | ~5–20 high-confidence topics (depends on the news day), each trending on 2+ platforms | ~850 trends from ~60 countries and 4 platforms, every one scored with how many platforms confirm it |
| Run time | ~40 seconds | ~8 minutes |
| Good for | Alerts, newsletters, AI agents, "what matters right now" | Dashboards, research, spreadsheets, your own filtering |

Every row has `platformCount` and `heatScore`, so even the full scan sorts with the strongest trends first.

### What it checks

| Platform | What you get | Freshness |
|---|---|---|
| **Google** | Trending searches per country, approximate search volume, news stories | Live |
| **Wikipedia** | The topic's article, views in the latest hour and day, and how that compares with the week before (e.g. **38x** normal) | Hourly views ~2 hours behind; daily views ~1 day behind |
| **Bluesky** | Matching trending topic, post count, category | Live |
| **YouTube** *(optional)* | Matching videos from the country's "most popular" chart, with view counts | Live |
| **Polymarket** *(context)* | The matching prediction market among those with the most money bet in 24 hours: dollars bet, the favorite and its odds (e.g. "Gadi Eizenkot 63%") | Live |

Polymarket is **context, not a trend signal**: betting volume shows what bettors care about (elections, football, esports), not what the public is paying attention to. So it never counts toward a topic's platforms or ranking, and never adds topics of its own. It only adds odds to topics already trending elsewhere.

Rows about the same story (sharing a Wikipedia article, Bluesky trend or YouTube video) are merged into one, with the other names listed in `relatedTopics`. For example, "2026 Ballon d'Or", "Ballon d'Or" and "Harry Kane" become one row.

Topics trending on Bluesky or spiking on Wikipedia that **aren't** in your countries' Google lists are added as their own rows (country `GLOBAL`). They're also checked against the Google lists of all major English-speaking countries (US, UK, Canada, Australia, Ireland, India, New Zealand, South Africa), so a story trending on Google in Ireland but not in the US still counts.

By default you only get topics trending on **2 or more platforms**: confirmed trends, not noise. Set *Minimum platforms* to 1 to get everything (see the full scan above).

### Sample run (US + UK, October 2026)

| # | Topic | Trending on | Evidence | Betting context |
|---|---|---|---|---|
| 1 | Noah Wyle named Sexiest Man Alive | Google (IE), Wikipedia, Bluesky | **38x** normal hourly views; 473 posts | |
| 2 | khalil mack | Google (US), Wikipedia | 1,000+ searches; 1.7x daily views | |
| 3 | Israel election sees record turnout | Google (NZ), Bluesky | 100+ searches; 627 posts | **$7.0M bet**, Gadi Eizenkot 63% to be PM |
| 4 | Nicki Minaj | Wikipedia, Bluesky | 144K views (20x normal); 818 posts | |
| 5 | 2026 Ballon d'Or *(+ Ballon d'Or, Harry Kane)* | Wikipedia, YouTube | 452K views (43x); "Ballon d'Or 2026 LIVE", 7.8M views | $19.5M bet, Harry Kane (decided) |

Each row also has the top news story, all matched articles and links, and trend tracking:

| Field | Meaning |
|---|---|
| `platforms`, `platformCount` | Where the topic is trending right now |
| `heatScore` | 0–100: how big the topic is compared with the others in the run, across all its numbers. Topics are ranked by platform count, then heat. |
| `isNew`, `firstSeenAt`, `hoursTrending`, `timesSeen` | Tracked between runs |
| `newPlatforms` | Platforms the topic spread to since the last run, e.g. `["wikipedia"]` |
| `relatedTopics` | Other names for the same story, merged into this row |
| `googleCountry` | Which country's Google list the topic is trending in |
| `polymarketVolume24h`, `polymarketLeader`, `polymarket` | Betting context: dollars bet in the last 24 hours, the favorite with its odds, and the market link |
| `googleTraffic`, `wikipediaViews`, `wikipediaViewsLastHour`, `wikipediaSpike`, `wikipediaHourSpike`, `blueskyPosts`, `youtubeTopVideoViews` | The numbers, flat for spreadsheets |
| `google`, `wikipedia`, `bluesky`, `youtube` | Full details from each platform, with links |

Download results as CSV, Excel or JSON, or fetch them through the Apify API.

### Input

| Field | Default | Description |
|---|---|---|
| **Countries** | `US` | Google trends per country. Each is checked against its own Wikipedia language edition and YouTube chart. |
| **Sources** | all | Any mix of Google, Wikipedia, Bluesky and YouTube, e.g. Bluesky + Wikipedia only, plus Polymarket betting context on or off. All free. |
| **Must be trending on** | none | e.g. `Google`: only Google trends that are confirmed on another platform |
| **YouTube API key** | empty | Your own free key from [Google Cloud Console](https://console.cloud.google.com/apis/library/youtube.googleapis.com). Without it YouTube is skipped. Each run uses 1 unit per country of the 10,000 free daily units. |
| **Keywords** | none | Only topics mentioning one of these, e.g. a brand, team or person. Headlines, article and video titles are searched too. |
| **Add trends Google doesn't show** | on | Bluesky and Wikipedia trends that aren't in Google's list |
| **Minimum platforms** | 2 | Confirmed cross-platform trends only. Set to `1` for every trend from every platform (about 7x more rows, each charged). |
| **Only new topics** | off | For alerts |
| **History name**, **Forget topics after** | | Trend tracking between runs, as in Google Trending Now |

### Recipes

- **Confirmed-story alerts:** schedule hourly with *Only new topics* on, then connect Slack or email in Apify Console.

**Cost:** $0.005 per topic saved. A default run saves about 10 topics (~$0.05). **For scheduled runs, turn on *Only new topics*:** later runs then save only topics that weren't seen before, so an hourly schedule usually costs cents a day instead of paying again for the same topics every hour.

- **Brand or person monitoring:** set *Keywords* (e.g. `Nike`, `Taylor Swift`) and *Minimum platforms* `1` to catch every mention on any platform.
- **Social-only trends:** set *Sources* to Bluesky + Wikipedia to see what people are reading and posting about, without Google.
- **Spread tracking:** schedule hourly and watch `newPlatforms` to see a topic jump from Bluesky to Wikipedia to Google.
- **Content planning:** a daily run sorted by `platformCount` gives the topics people are actively searching, reading and posting about.

### Use it with AI agents

Like every Apify Actor, this one works as a tool for AI assistants through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). Ask your agent "what's trending across platforms right now?" and it can run this Actor and summarize the results.

Only need Google? [Google Trending Now](https://apify.com/stephen-56/google-trending-now) is the simpler, cheaper Google-only version.

### How "trending" is decided

- **Google:** in the country's "Trending now" list.
- **Wikipedia:** the matched article had at least 3x its normal hourly views (and 100+ views) in the latest published hour, or 1.5x its normal daily views (and 1,000+) on the latest day. "Normal" is its average over the 7 days before.
- **Bluesky:** a current Bluesky trend whose headline mentions the topic.
- **YouTube:** a video in the country's top 50 whose title, channel or tags mention the topic.
- **Polymarket (context only):** odds are attached when one of the top 50 markets by 24-hour volume (at least $100,000 bet) mentions the topic in its title or leading outcomes.

### Limitations

- **Matching uses words, not meaning.** "gta 6" matches "Grand Theft Auto VI" (acronyms are handled), but vague trends like "celebrity" or "sunset" may match the wrong article or nothing. Check the `wikipedia.article` field.
- **Wikipedia lags.** Hourly views arrive about 2 hours late, so a story that broke an hour ago won't show on Wikipedia yet. Hourly spikes compare with an average hour, so night-time hours read a little low.
- **Google's list is short:** about 10–25 trends per country.
- **Bluesky trends are global** and lean English-language and US/UK news.
- **Polymarket** is a crypto-based prediction market that isn't available to bettors in every country. This Actor only reads its public market data and never places bets. Market odds are crowd estimates, not facts.

### Run locally

```bash
python -m src
```

Input: `storage/key_value_stores/default/INPUT.json`. Results: `storage/datasets/default/`.

# Actor input Schema

## `countries` (type: `array`):

Two-letter country codes, e.g. US, GB, DE, BR, or ALL for ~60 countries (a full scan: with Minimum platforms set to 1 that's hundreds of trends per run). Used for Google trends, the matching Wikipedia language edition and the YouTube chart.

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

Which platforms to check. Pick any mix, e.g. only Bluesky + Wikipedia. All are free; YouTube also needs your API key below. Polymarket doesn't count as a platform: it adds the betting odds and dollars bet to topics that have a big prediction market.

## `requiredSources` (type: `array`):

Only save topics trending on all of these, e.g. Google, to get Google trends confirmed elsewhere. Leave empty for no requirement.

## `youtubeApiKey` (type: `string`):

Your own free YouTube Data API v3 key, from Google Cloud Console. Adds matching videos from each country's 'most popular' chart. Uses 1 unit of the 10,000 free daily units per country per run. Without a key, YouTube is skipped.

## `keywords` (type: `array`):

Only save topics mentioning at least one of these, e.g. a brand, team or person ('Nike', 'Taylor Swift'). The topic, headline, Wikipedia article and matched video titles are searched. Leave empty for all topics.

## `includeNonGoogleTrends` (type: `boolean`):

Also save topics trending on Bluesky or spiking on Wikipedia that aren't in your countries' Google lists (country 'GLOBAL'). These are also checked against the Google lists of all major English-speaking countries. Always on when Google isn't a source.

## `minPlatforms` (type: `integer`):

Only save topics trending on at least this many platforms. 2 (the default) keeps confirmed, cross-platform trends only. Set to 1 to get every trend from every platform (many more rows, each charged). Lowered automatically if you pick fewer sources.

## `onlyNew` (type: `boolean`):

Save only topics not seen in earlier runs. Good for scheduled alerts.

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

Stop after this many topics (highest platform count first). Leave empty for all.

## `historyName` (type: `string`):

Name of the storage that remembers topics between runs. Use a different name for each schedule that should track separately.

## `forgetAfterDays` (type: `integer`):

Topics not seen for this many days are forgotten, so if they come back they count as new.

## Actor input object example

```json
{
  "countries": [
    "US"
  ],
  "sources": [
    "google",
    "wikipedia",
    "bluesky",
    "youtube",
    "polymarket"
  ],
  "requiredSources": [],
  "includeNonGoogleTrends": true,
  "minPlatforms": 2,
  "onlyNew": false,
  "historyName": "cross-platform-trends-history",
  "forgetAfterDays": 7
}
```

# Actor output Schema

## `topics` (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 = {
    "countries": [
        "US"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("stephen-56/cross-platform-trends").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 = { "countries": ["US"] }

# Run the Actor and wait for it to finish
run = client.actor("stephen-56/cross-platform-trends").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 '{
  "countries": [
    "US"
  ]
}' |
apify call stephen-56/cross-platform-trends --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,stephen-56/cross-platform-trends"
        }
    }
}
```

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/PMNCfyLHgrznHpQkJ/builds/umYcEd0a77jgmBl68/openapi.json
