X (Twitter) Trends Scraper | $0.16/1K | By Country avatar

X (Twitter) Trends Scraper | $0.16/1K | By Country

Pricing

from $0.08 / 1,000 trend returneds

Go to Apify Store
X (Twitter) Trends Scraper | $0.16/1K | By Country

X (Twitter) Trends Scraper | $0.16/1K | By Country

Scrape trending topics on X (Twitter) country by country. One row per trend with its rank, its category, the post volume when X publishes one, and a ready to open search link. Schedule it and build the trend history X itself does not keep, as JSON, CSV or Excel. By FeedMiner.

Pricing

from $0.08 / 1,000 trend returneds

Rating

0.0

(0)

Developer

FeedMiner

FeedMiner

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Share

🌍 Countries and cities, in one run. Ask for US, Paris and JP together and each row carries the place it came from. Every location X covers is available, hundreds of cities included, read live from X's own catalogue rather than a hand written list.

💸 $0.16 per 1,000 trends, down to $0.08 on the larger Apify plans. The closest tools charge $0.39 and $0.23 per 1,000 on the free plan, and one adds a start fee. Here there is none, and a run of three places returns 150 rows in a few seconds.

🔗 A trend you can act on. Each row carries the exact search X itself runs for that trend, so feeding it to X Advanced Search Scraper is a copy and paste.

🕰️ Your own history. X publishes what is trending now and forgets it. Schedule this daily and the archive is yours, which is the part no API sells.

FeedMiner · X (Twitter) suite • Posts, profiles, audiences, media, trends
X Trends Scraper
➤ You are here
X Tweet Scraper
Search, threads, lists, communities · $0.12/1K tweets
X Profile Scraper
Profile + first 100 posts included · $1.70/1K profiles

Copy to your AI assistant

feedminer/x-trends-scraper on Apify. Exports trending topics on X (Twitter) by country. One row per trend with rank, name, category, postCount (when X publishes it), query, url and location. Call ApifyClient("TOKEN").actor("feedminer/x-trends-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Input: locations (string[] of two letter country codes, empty means the run's own address), maxTrendsPerLocation (int), sessions (array, optional), debugMode (bool). Country selection routes the run through a residential address in that country, so it needs Apify proxy. Full spec: GET https://api.apify.com/v2/acts/feedminer~x-trends-scraper/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations

Basic: one country

{ "locations": ["US"], "maxTrendsPerLocation": 50 }

Several markets at once

{ "locations": ["US", "GB", "FR", "JP"], "maxTrendsPerLocation": 50 }

Each row carries location, so one export covers four markets and still splits per place.

{ "locations": ["Paris", "Tokyo", "Sao Paulo"], "maxTrendsPerLocation": 50 }

City names are matched against X's own catalogue of covered places, so what you can ask for is exactly what X publishes.

Worldwide, the default

{ "maxTrendsPerLocation": 50 }

By WOEID, when you already have one

{ "locations": ["615702", "23424977"] }

Input parameters

ParameterTypeDefaultDescription
locationsarrayCountries by two letter code (US, FR, JP), cities or countries by name (Paris, Tokyo, Brazil), or WOEIDs. Leave empty for worldwide. The list of covered places comes from X itself
maxTrendsPerLocationinteger50Stop once this many trends have been collected per country

Advanced

ParameterTypeDefaultDescription
sessionsarrayOptional. The Actor works without one. X accounts of your own, for anyone who would rather the run used accounts they control
debugModebooleanfalseVerbose logs for support

country and countries work as they do elsewhere, locations as it does in the other one, and woeids takes numeric place ids directly.

How a place is chosen

X publishes its trends per place, and each place has an id. The run reads X's live catalogue of covered places, matches what you typed against it, then asks for that place directly. A two letter code gives the country itself, not one of its cities: FR is France, Paris is Paris.

Nothing about your own location matters, so the same run gives the same answer from anywhere, and no proxy is needed to reach another market.

What an account changes

Nothing. This surface is public. sessions is accepted for consistency with the rest of the suite and is simply not needed here.


FieldTypeDescription
rankintegerPosition in the list X served, 1 is the top trend
namestringThe trend as displayed, hashtag or phrase
categorystringThe domain X attaches, for example Politics, Sports, Entertainment. Empty when there is none
postCountintegerPosts behind the trend, when X publishes the number
querystringThe exact search X runs for this trend, quoted when it is a phrase
urlstringA ready to open X search link for the trend
locationstringThe place X served, as X names it, for example United States or Paris
woeidintegerThe numeric id of that place, stable, reusable as an input
askedstringWhat you typed for it, so a run on many markets is easy to pivot

Example output

{
"rank": 1,
"name": "Francis Lalanne",
"category": "Politics",
"postCount": 45200,
"query": "\"Francis Lalanne\"",
"url": "https://x.com/search?q=%22Francis+Lalanne%22",
"location": "Paris",
"woeid": 615702,
"asked": "Paris"
}

Column mapping, if you are switching

Herekaramelo
nametrend
postCountvolume
locationnot returned, the country is a run setting there
ranknot returned
query and urlnot returned
woeidnot returned

The other actor returns one row per trend and per time window, with time and timePeriod. Here a run is one snapshot: schedule it and the history is yours, with the place on every row.

Pricing: Pay Per Event (PPE)

EventPrice
Trend returned$0.00016

That is $0.16 per 1,000 trends, with no start fee and no charge for a run that returns nothing. A daily watch on five countries is a few cents a month. The price steps down on its own for the larger Apify plans, to $0.12 and then $0.08 per 1,000.


What a run costs

Five countries, 50 trends each, 250 rows$0.04
A daily watch on ten places, for a month$2.40

Free tier

The Apify free plan includes $5 of usage every month, which is roughly 31,000 trends here. No card required.

Advanced usage

Build the history X does not keep. Schedule it every hour or every day. Two weeks later you have a trend archive per country, which is the dataset every social listening tool sells back to you.

Chain it into search. Take query from a trend row and pass it to X Advanced Search Scraper to pull the posts behind it. Trend to conversation, in two runs.

Spot a trend before your market does. Watching four countries at once shows a topic climbing in one before it reaches the others, which is a real content lead.

Filter the noise by category. category separates a sports trend from a political one, which is what makes an automated content brief usable.

Place coverage. Every place X covers is available, and the list is read from X at run time rather than hard coded, so a place added by X works the day it appears. A name X does not know is reported by name instead of being silently skipped.


Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("feedminer/x-trends-scraper").call(run_input={
"locations": ["US", "GB", "FR"],
"maxTrendsPerLocation": 30,
})
rows = client.dataset(run["defaultDatasetId"]).list_items().items
for r in sorted(rows, key=lambda x: -x["postCount"])[:10]:
print(r["location"], r["rank"], r["name"], r["postCount"], r["url"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('feedminer/x-trends-scraper').call({
locations: ['JP'],
maxTrendsPerLocation: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const sports = items.filter((t) => t.category === 'Sports');

No code

Push each run to Google Sheets, Airtable, Slack, Zapier, Make or n8n from the Integrations tab, and the trend list becomes a daily digest.


Performance

MeasureValue
PlacesProcessed one after another, one request each
VolumeAround 50 trends per place, which is the whole list X publishes
Run timeA few seconds for several places
Partial resultsPlaces that answered are delivered even if one fails

FAQ

Which places can I ask for? Any country by its two letter code, any city or country by name, or any WOEID. The catalogue comes from X itself at run time, and covers hundreds of cities.

Why is postCount zero on some rows? Because X did not publish a volume for that trend. It is left at zero rather than estimated.

Do I need an X account? No. This surface is public, and the full list is served without one.

Can I get city level trends? Yes, that is what the place names are for. Paris, Tokyo, Chicago and hundreds of others are covered by X.

How often do trends change? Continuously. Hourly runs are common for a newsroom, daily is enough for content planning.

Can I get the posts behind a trend? Yes, pass the query field to X Advanced Search Scraper or X Tweet Scraper.

Are promoted trends included? Promoted entries are not treated as organic trends and do not carry a rank in your export.

Why does a country return fewer trends than I asked for? Because X served fewer. The run returns what it got rather than padding the list.


Support

A country that returns nothing, a category you do not recognise, a volume that looks wrong: write from the actor page.


This actor reads the public trend lists X publishes. It contains no personal data by design: a trend row is a topic, a rank and a link. Anything you collect afterwards from the search links is subject to GDPR, CCPA and similar regimes.


FeedMiner · Fast, honestly priced scrapers, kept alive when platforms change.

X Tweet Scraper · X Profile Scraper · X Follower Scraper · X Advanced Search Scraper · X Media Scraper · X Mentions Monitor · X Engagement Scraper · X Likes and Reposts Scraper · X Trends Scraper · All FeedMiner Actors