# Topic Trends - Google Trends Alternative from Wikipedia Data (`kantolabs/wikipedia-trends`) Actor

Interest over time for any topic, compared on a 0-100 scale like Google Trends, from official Wikipedia pageview data (2015 to yesterday): daily, weekly or monthly timeline, peak, trend, spikes and interest by language. Plus trending topics per country. No Google scraping, no blocks.

- **URL**: https://apify.com/kantolabs/wikipedia-trends.md
- **Developed by:** [Kanto Labs](https://apify.com/kantolabs) (community)
- **Categories:** SEO tools, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 topic 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/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

## Topic Trends - a Google Trends Alternative Built on Wikipedia Data

See **how much interest any topic gets over time** and **compare topics on one 0-100 scale**, the way
Google Trends does - but from an open, official data source that never blocks you: **Wikipedia
pageviews**. Wikipedia is read billions of times every month, and Wikimedia publishes how often each
article was read, per day, since July 2015.

For every keyword you get the **interest-over-time timeline** (daily, weekly or monthly), a
**0-100 value normalised across all keywords of the run**, total and average views, the **peak**, a
**rising / stable / falling** trend, **spike days**, and **interest by language** (how the topic is
read in German, Japanese, Spanish... Wikipedia). A second mode lists **what is trending today** in any
country or language.

No Google scraping, no captchas, no proxies, no "429 Too Many Requests" from Google - and **$3 per
1,000 topics**.

### What you can use it for

- **Trend research and content planning** - which of your topic ideas is growing, and when it peaks each year (seasonality back to 2015).
- **Brand and competitor tracking** - compare brands, products, people or shows on one scale, week by week.
- **Market and investment research** - attention to companies, technologies, drugs or crypto assets over time, and the day a story broke (`spikes`).
- **News and social monitoring** - the daily list of what people in the US, UK, India, Germany or Japan are reading about.
- **Data journalism and academic work** - a documented, reproducible public dataset (CC0), unlike Google Trends' re-sampled index.
- **AI agents** - one tool call through the Apify MCP server answers "is interest in X growing?" with numbers.

### Why not just scrape Google Trends?

Google Trends has no official API. Scrapers break whenever Google changes the page, get rate-limited,
and return a sampled index that changes between two identical requests. This Actor uses the official,
free [Wikimedia Pageviews API](https://doc.wikimedia.org/generated-data-platform/aqs/analytics-api/)
and the MediaWiki API, so results are **stable, repeatable and allowed to be reused (CC0)**.

Be clear about the difference: Google Trends counts **searches**, this Actor counts **people reading
about a topic**. The two move together for most topics (news events, product launches, seasonal
interest), but they are not the same number, and there is no per-city breakdown - the closest open
equivalent to "interest by region" is **interest by language edition**.

### Input

| Field | What it does | Default |
|---|---|---|
| `mode` | `topics` (interest over time) or `trending` (top topics of a day) | `topics` |
| `keywords` | One per line: a keyword (`bitcoin`), an exact article title (`Apple Inc.`) or a Wikipedia URL. Up to 200. | `ChatGPT`, `Bitcoin`, `Taylor Swift` |
| `language` | Wikipedia edition used to match keywords: `en`, `de`, `fr`, `es`, `ja`... | `en` |
| `timeRange` | Past 7 / 30 / 90 days, past 12 months, past 5 years, 2015-present, or custom | past 90 days |
| `startDate` / `endDate` | Custom period (YYYY-MM-DD) | - |
| `granularity` | `auto` (daily up to 3 months, weekly up to ~2 years, then monthly), `daily`, `weekly`, `monthly` | `auto` |
| `includeRedirects` | Also count old names and alternative titles (so a renamed article does not "start from zero") | `true` |
| `includeLanguages` / `maxLanguages` | Interest by language edition, largest editions first | `true` / 10 |
| `platform` | All devices, desktop, mobile web or mobile app | all |
| `trendingCountries` | Trending mode: country codes, e.g. `US`, `GB`, `IN`, `DE`, `JP` | - |
| `trendingProjects` | Trending mode: language editions, e.g. `en`, `de` | the `language` edition |
| `trendingDate` / `maxTrending` | Trending mode: day (default = latest published) and list length | latest / 25 |

**Tip:** a keyword is matched to one article: first the exact title, otherwise the top search hit
(disambiguation pages are skipped). `apple` gives the fruit - write `Apple Inc.` for the company. The
matched article is in every result (`article`, `articleUrl`, `matchedBy`), so you can check it.

```json
{
    "keywords": ["Nike, Inc.", "Adidas", "Puma (brand)", "New Balance", "Under Armour", "Lululemon", "Skechers", "Asics", "Hoka One One", "On (company)"],
    "timeRange": "past12Months"
}
```

### Output

Real results of the input above (cloud run, 2026-09-23, 12 months, weekly):

| Keyword | Matched article | Avg interest (0-100) | Views (12 mo) | Trend | Peak week | Top languages |
|---|---|---|---|---|---|---|
| Nike, Inc. | Nike, Inc. | 50.3 | 904,814 | stable (-8.6%) | 2026-09-06 | en 56.8%, es 7%, de 6.7% |
| Adidas | Adidas | 47.9 | 860,495 | stable (+5.9%) | 2026-06-14 | en 45.3%, de 12%, es 9.7% |
| Lululemon | Lululemon | 34.3 | 617,387 | falling (-30.5%) | 2026-02-01 | en 84.4%, ja 5.6%, de 4.1% |
| On (company) | On (company) | 25.3 | 455,592 | stable (+16.1%) | 2026-09-13 | en 65.1%, fr 15.4%, de 7.3% |
| Puma (brand) | Puma (brand) | 24.0 | 433,533 | stable (-0.7%) | 2026-06-28 | en 47.5%, de 11.9%, es 8% |
| Hoka One One | Hoka | 20.4 | 368,104 | stable (-17.1%) | 2025-10-19 | en 68.1%, fr 9%, es 5% |
| Asics | Asics | 17.9 | 323,532 | stable (-3.1%) | 2025-09-28 | en 47.8%, ja 19.8%, de 6.3% |
| New Balance | New Balance | 16.3 | 292,884 | stable (-11.9%) | 2025-09-28 | en 54.6%, ja 8.6%, de 6.9% |
| Under Armour | Under Armour | 14.1 | 253,253 | falling (-28.2%) | 2025-12-28 | en 55.5%, fr 9%, de 7% |
| Skechers | Skechers | 11.5 | 206,731 | stable (-4.1%) | 2025-09-28 | en 55.2%, de 8.6%, es 8.6% |

One full item (default input, 90 days daily; the `timeline` has one entry per day - shortened here):

```json
{
    "type": "topic",
    "keyword": "Bitcoin",
    "article": "Bitcoin",
    "articleUrl": "https://en.wikipedia.org/wiki/Bitcoin",
    "language": "en",
    "description": "Decentralized digital cryptocurrency",
    "wikidataId": "Q131723",
    "matchedBy": "title",
    "startDate": "2026-06-24",
    "endDate": "2026-09-21",
    "granularity": "daily",
    "totalViews": 237187,
    "averageViewsPerDay": 2635.4,
    "interestScore": 1,
    "peakDate": "2026-08-28",
    "peakViews": 5172,
    "latestValue": 1,
    "changePercent": 10.5,
    "trend": "stable",
    "spikes": [],
    "timeline": [
        { "date": "2026-06-24", "views": 2550, "value": 1 },
        { "date": "2026-06-25", "views": 3140, "value": 1 },
        { "date": "2026-09-20", "views": 2517, "value": 1 },
        { "date": "2026-09-21", "views": 2483, "value": 1 }
    ],
    "interestByLanguage": [
        { "language": "en", "article": "Bitcoin", "views": 237187, "sharePercent": 57.7 },
        { "language": "de", "article": "Bitcoin", "views": 39845, "sharePercent": 9.7 },
        { "language": "ru", "article": "Биткоин", "views": 31731, "sharePercent": 7.7 },
        { "language": "zh", "article": "比特币", "views": 23309, "sharePercent": 5.7 },
        { "language": "ja", "article": "ビットコイン", "views": 12726, "sharePercent": 3.1 }
    ],
    "redirectViewsIncluded": 1045,
    "platform": "all-access",
    "source": "Wikimedia Pageviews API (human traffic only), CC0",
    "error": null
}
```

`value` and `interestScore` are relative, exactly like Google Trends: 100 is the highest point of **any**
keyword in the run (here ChatGPT, ~70,000 views a day), so Bitcoin sits at 1. `views` are the absolute
numbers, so you can always re-scale. `isPartial: true` marks a week or month at the edge of the period.

**Trending mode** (`{"mode": "trending", "trendingCountries": ["US", "GB", "IN"], "maxTrending": 10}`),
real rows for 2026-09-21:

| List | # | Topic | Views (rounded up) | Description |
|---|---|---|---|---|
| country:US | 1 | Lizzie Borden | 433,900 | American woman acquitted of murder (1860-1927) |
| country:US | 2 | Cindy Crawford | 255,500 | American model and actress (born 1966) |
| country:GB | 3 | The Blame (TV series) | 49,800 | British television series |
| country:IN | 2 | India at the 2026 Asian Games | 97,700 | Sporting event delegation |
| country:IN | 3 | 2026 Asian Games | 84,400 | Multi-sport event in Aichi and Nagoya, Japan |

Main pages, search pages and other non-article pages are removed. Per-country views are rounded up to
the nearest 100 by Wikimedia (privacy); per-edition lists have exact views.

### Pricing

Pay per event, **no subscription**:

| Event | Price |
|---|---|
| Topic analysed (one keyword with its full timeline, stats and language breakdown) | **$0.003** |
| Trending article (one row of a trending list) | **$0.0005** |
| Actor start | $0.00005 |

| You run | You pay |
|---|---|
| 10 brands, 12 months | $0.03 |
| 100 keywords, 5 years | $0.30 |
| Daily top 25 for 5 countries, for a month | 25 x 5 x 30 x $0.0005 = $1.88 |

Keywords that match no article and failed lookups are returned with an `error` and **not charged**.
Set "Maximum cost per run" and the Actor stops cleanly when it is reached.

### FAQ

**How far back does the data go?** Daily data from 2015-07-01 to yesterday (UTC). Today's numbers are
published by Wikimedia the next day.

**Are bots counted?** No. Only human traffic (`agent=user`) is counted; Wikimedia filters out known
crawlers and automated traffic.

**Why do my numbers differ from Google Trends?** Different signal: searches on Google vs. reading on
Wikipedia. Wikipedia interest also leans towards topics people want explained (people, events,
companies, science) rather than navigational searches ("facebook login").

**How fast is it?** About 5-10 seconds for 3 keywords, about a minute for 10 keywords over 12 months
with the language breakdown. Wikimedia limits how fast any client may ask, and the Actor paces
itself so that runs finish instead of failing.

**Can I schedule it?** Yes - use Apify Schedules (for example, daily trending lists for your countries)
and send the dataset to Google Sheets, Slack or a webhook with Apify integrations.

### Data source and license

Pageview data: Wikimedia Foundation, [Pageviews API](https://wikitech.wikimedia.org/wiki/Analytics/AQS/Pageviews),
released under **CC0**. Article titles and descriptions: Wikipedia / Wikidata. This Actor is not
affiliated with Google or the Wikimedia Foundation.

### Related Actors by Kanto Labs

- [Website Traffic Rank Checker](https://apify.com/kantolabs/website-traffic-rank) - how popular a website is, worldwide and in 40 countries
- [Domain Authority Checker](https://apify.com/kantolabs/domain-authority-checker) - open-data authority score for any domain
- [Company Enrichment - Logo, Socials, Industry & Size](https://apify.com/kantolabs/company-enrichment)
- [Free Image Search - Royalty-Free Photos](https://apify.com/kantolabs/free-image-search) - pictures for the topics you write about

# Actor input Schema

## `mode` (type: `string`):

**Topics**: interest over time for your keywords. **Trending**: the most-read topics of a day, per Wikipedia language edition and/or per country.

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

One topic per line: a keyword (`bitcoin`), an exact article title (`Apple Inc.`) or a Wikipedia URL. Each is matched to one Wikipedia article (disambiguation pages are skipped). All keywords of a run share one 0-100 scale, so you can compare them. Up to 200.

## `language` (type: `string`):

Language edition used to match keywords (and the default trending list): `en`, `de`, `fr`, `es`, `ja`, `pt`, `it`, `ru`, `zh`, `pl`, `nl`, `ko`... Wikipedia URLs keep their own language.

## `timeRange` (type: `string`):

Period to analyse. Data starts on 2015-07-01 and ends yesterday (UTC). Ignored when a start or end date is set.

## `startDate` (type: `string`):

Optional custom start, YYYY-MM-DD.

## `endDate` (type: `string`):

Optional custom end, YYYY-MM-DD (default: yesterday).

## `granularity` (type: `string`):

Auto = daily up to 3 months, weekly up to about 2 years, monthly beyond (like Google Trends).

## `includeRedirects` (type: `boolean`):

Add the views of titles that redirect to the article (the 12 newest, which include old names after a rename; main language only). Without this, a renamed topic looks like it started from zero on the rename date.

## `includeLanguages` (type: `boolean`):

Also count views of the same topic in other language editions (the closest open-data equivalent to interest by region).

## `maxLanguages` (type: `integer`):

How many of the largest language editions to include in the language breakdown.

## `platform` (type: `string`):

Count views from all devices, desktop only or mobile only.

## `trendingCountries` (type: `array`):

Trending mode: two-letter country codes (`US`, `GB`, `DE`, `IN`, `JP`...). Returns the most-read Wikipedia articles from readers in that country (Wikimedia rounds these views up to the nearest 100 for privacy).

## `trendingProjects` (type: `array`):

Trending mode: language codes or projects (`en`, `de.wikipedia`...). If neither countries nor editions are set, the edition from Wikipedia language is used.

## `trendingDate` (type: `string`):

Trending mode: day to list, YYYY-MM-DD. Default: the latest published day (usually yesterday).

## `maxTrending` (type: `integer`):

How many top articles to return per country / edition (main pages and special pages are removed).

## Actor input object example

```json
{
  "mode": "topics",
  "keywords": [
    "ChatGPT",
    "Bitcoin",
    "Taylor Swift"
  ],
  "language": "en",
  "timeRange": "past90Days",
  "granularity": "auto",
  "includeRedirects": true,
  "includeLanguages": true,
  "maxLanguages": 10,
  "platform": "all-access",
  "maxTrending": 25
}
```

# 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 = {
    "keywords": [
        "ChatGPT",
        "Bitcoin",
        "Taylor Swift"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kantolabs/wikipedia-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 = { "keywords": [
        "ChatGPT",
        "Bitcoin",
        "Taylor Swift",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("kantolabs/wikipedia-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 '{
  "keywords": [
    "ChatGPT",
    "Bitcoin",
    "Taylor Swift"
  ]
}' |
apify call kantolabs/wikipedia-trends --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kantolabs/wikipedia-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/Mr4n6NiseSHsdc9ia/builds/ept1FjJ9xryDLgjWI/openapi.json
