X (Twitter) Trends Scraper avatar

X (Twitter) Trends Scraper

Pricing

from $3.50 / 1,000 results

Go to Apify Store
X (Twitter) Trends Scraper

X (Twitter) Trends Scraper

Get trending hashtags and topics on X (Twitter) for worldwide, 50+ countries and 400+ cities, live or past 24 hours. Each trend has rank, rank change, hours trending and reach across your locations as clean JSON. Bulk locations, no account needed.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Insights Data

Insights Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Categories

Share

X (Twitter) Trends Scraper gives marketers, social media managers, newsrooms and analysts social media monitoring and trend detection for X: see what is trending in each country and city, and how each trend moves from hour to hour. This Twitter trends scraper returns the X trending topics and hashtags for worldwide, a country or a city: the current list plus the lists from up to about 24 hours ago, each trend with its rank, rank change, hours on the list and best rank. Enter a location such as worldwide or Japan and click Start: you need no code, no X account and no cookies, and you can try it on the Apify Free plan with the $5 monthly credit.

  • 📡 Social media monitoring: see what each of your markets is talking about in one run, instead of switching between countries by hand.
  • 🆕 Emerging trend detection: spot new entries (isNew) and fast climbers (rankChange) compared with the previous list, about an hour earlier.
  • 🔖 Hashtag research: see how long a trending hashtag has been on the list and the best rank it has reached.
  • 🗓️ Content planning: check which trending hashtags on X today still have momentum before you write a post, a newsletter or a campaign.
  • 🌐 Market research: compare the same trend across countries and cities and see in how many of your locations it appears (locationsTrendingIn).
  • 📰 Newsrooms and PR: use it for trend detection on X. See which topics trend and for how long, with trendingForHours, firstSeen and peakRank.

Trend lists are published about every hour and kept for about 24 hours. The Actor reads these public lists for each location you add, compares each list with the one before it, and gives you one clean table that you can export or fetch through the Apify API.

  • 🌍 Many locations in one run: worldwide, countries and cities, as many as you add.
  • 🕒 Current and past lists: the current (live) list, the lists from 1, 3, 6, 12 or 24 hours ago, or every list kept (about 24 hours).
  • 🚀 Rank movement: previous rank, rank change and a new-entry flag for every trend.
  • ⏳ Longevity: hours on the list without a break, first seen, best rank and how many lists the trend appeared in.
  • 🔖 Hashtags, topics or both, plus a keyword filter.
  • 🔗 A search link to X for every trend.
  • 📦 Export to JSON, CSV, Excel, XML or HTML. Run it through the API or on a schedule, or connect it to Google Sheets, Make, Zapier and MCP clients.

Each row is one trend from one list. All times are in UTC.

FieldWhat it means
🔥 trendThe trending hashtag or topic
🏅 rankPosition in its list (1 = top)
📍 locationWorldwide, the country or the city
🕒 timePeriodLive, or how long before the live list it was published (for example 3 hours ago)
🚀 rankChange / previousRankPlaces gained (+) or lost (-) since the previous list, and the rank in that list
🆕 isNewtrue when the trend was not in the previous list
⏳ trendingForHours / firstSeenHours on the list without a break, and when that streak started
⌛ startedBeforeWindowtrue when the streak reaches the oldest list, so the real start is earlier
⭐ peakRank / peakRankAtBest rank so far and when it was reached
🔁 appearancesIn24hIn how many lists of the window the trend showed up
🔖 isHashtagtrue for hashtags, false for plain topics
🌐 locationsTrendingInIn how many of your locations the same trend appears (only when you request several locations)
🔗 urlLink to the live X search for the trend
🔢 volumeNumber of posts, only when the list shows a count
📅 time, snapshotTime, snapshotAgeHoursRun time, when the list was published and how old the list is in hours
🗂️ source, degradedWhether the row came from the main lists or the backup list (degraded: true)

A trend list is the ranked list of trends for one place at one moment. Because a new list comes out about every hour, the Actor can tell you whether a trend is new, climbing, falling or long-running.

Note: volume is often missing, because many lists show no post count. rankChange, previousRank and isNew are empty for the oldest list, which has nothing earlier to compare with.

Backup list: sometimes the full hourly lists for a country or for worldwide can't be read. The Actor then uses a simpler backup list with the current trends only. Those rows have the rank but no history fields, and degraded is true. Cities have no backup list.

  • The posts behind a trend. You get the search link instead.
  • Lists older than about 24 hours. Use scheduled runs to build your own archive.
  • Account or user data, and trend categories.

For news coverage of a trending topic, use Google News Scraper. For public posts about it on Threads, use Search Threads By Keywords.


  1. Create a free Apify account with your email.
  2. Open X (Twitter) Trends Scraper.
  3. Add your places under Locations, one per line (for example Worldwide and United States).
  4. Click Start. Trends show up in the Output tab while the run is still going.
  5. Download your data in JSON, CSV, Excel, XML or HTML.

X (Twitter) Trends Scraper uses pay-per-event pricing. Your bill has three parts:

  1. Results: each trend saved to the main Trends table is charged at your plan's price (see the table below).
  2. Start fee: $0.00005 per run.
  3. Platform usage: the computing time the run uses, billed to your Apify account.

The Hashtags, Topics and Locations tables and the run summary are free copies. Only rows in the main Trends table are charged. Rows removed by your filters are not charged.

Apify planPrice per trendPrice per 1,000 trends
🆓 Free$0.00499$4.99
🌱 Starter$0.0045$4.50
📶 Scale$0.004$4.00
🏢 Business and higher$0.0035$3.50

The plan discount applies to the result price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.

Examples (result charges and start fee only, before platform usage):

  • Free plan price, a run that saves 10 trends: 10 × $0.00499 = $0.0499, plus the $0.00005 start fee = $0.04995.
  • Starter plan, the prefilled input (2 locations × 10 trends = 20 trends): 20 × $0.0045 = $0.09, plus $0.00005.

How long each list is depends on the place and the hour, and the Actor doesn't fix a number. So maxItems set to 0 (all trends), especially together with all time periods (about 24 lists per location) and many locations, can create many rows. Do a small test run first and read the cost on the run page. All events are also listed on the pricing tab.

You can start for free. The Apify Free plan gives you $5 of credit every month. That credit pays the result charges ($0.00499 per trend on the Free plan), the start fee and platform usage. Free-plan runs work the same as paid runs: the Actor sets no extra limit for them. Do one small test run and check its cost on the run page to see how far your credit goes.

On every plan, your Max trends per location setting and your maximum charge limit decide how many trends you get.

To cap your spend on any plan, set a maximum charge limit in the run options when you start a run. When the limit is reached, the Actor stops and keeps every trend saved so far.


⬇️ Input

The only required field is Locations. Everything else has a working default.

Settings most people change

SettingWhat to enterDefault
📍 Locations (urls)Place names, one per line: Worldwide, a country (United States, Japan), a city (New York), or a city with its country (Mumbai, India)prefilled: worldwide, united-states
🎚️ Max trends per location (maxItems)Most trends to save for each location. 0 = all trends of the chosen periods10
🕒 Time periods (timePeriods)live, 1h, 3h, 6h, 12h, 24h, or all (every list kept, about 24 hours)live
🔖 Trend type (trendType)all (hashtags and topics), hashtags or topicsall
🔍 Keyword filter (keywords)Keep only trends that contain one of these words. Empty = no filterempty

The names in brackets are the API names. The Locations field is called urls in the API, but you enter place names, not links. The Proxy (proxyConfiguration) setting is optional. Leave it as it is unless you want to use your own proxy.

This is the prefill with the default settings. It saves up to 20 trends: 10 for worldwide and 10 for the United States.

{
"urls": ["worldwide", "united-states"],
"timePeriods": ["live"],
"trendType": "all",
"keywords": [],
"maxItems": 10
}

See the input tab for every field.

Names are not case-sensitive, and spaces or hyphens both work: United States and united-states are the same location. Write each place on its own line. For Twitter trends India-wide, enter India. For one city, enter Mumbai, India.

  • ✅ Good: Mumbai, India, New York, Japan, Worldwide
  • ❌ Bad: Mumbai India, Pune (two places on one line)

⚠️ A city name that exists in several countries returns every matching city. Each match is saved and charged. Add the country (Birmingham, United Kingdom) to get only the city you want.

There is no fixed list of places in this README. The supported cities are checked on every run. If a name isn't supported, the Locations table shows not_found for it, usually with "did you mean" suggestions.

maxItems counts per location, across all chosen time periods together. Rows are taken in order: the live list first, then the older lists, each in rank order. With the default 10 and two periods, you usually get only the top 10 of the live list.

  • ✅ Good: "timePeriods": ["live", "3h"], "maxItems": 0 (both lists in full)
  • ❌ Bad: "timePeriods": ["live", "3h", "24h"], "maxItems": 10 (expecting 10 per period)

⚠️ Every saved trend is charged. 0 with all periods and many locations can create many rows, so set a maximum charge limit.

live is the newest list. 1h to 24h are the lists published that long before it, and all returns every list kept. About 24 hours of lists are kept, sometimes a bit less. A period older than that uses the oldest list, and snapshotAgeHours shows its real age. A period with no list close to it is skipped, and two periods that point to the same list are saved once. Each of these cases adds a note to the Locations table.

hashtags keeps the trends that start with #, and topics keeps the rest. Every saved trend is also copied into a separate Hashtags or Topics table.

Keyword filter

The filter is a case-insensitive "contains" match, and a leading # on your keyword is ignored. Use specific words: ai also matches Dubai and Thailand.


⬆️ Output

Watch the rows arrive in the Output tab while the run is going. To download them, go to Storage → Datasets, open the dataset and click Export to get JSON, CSV, Excel, XML or HTML. Times are in UTC, and Excel or Google Sheets can convert them to your time zone.

TableWhat's inside
📈 Trends (main, charged)Every saved trend. Views: Trends, Rank movement, Longevity and reach, Freshness
🔖 HashtagsThe same rows, only hashtags
💬 TopicsThe same rows, only plain topics
📍 LocationsOne row per location: status (ok; backup = backup list with current trends only; not_found = name not recognized; error = lists couldn't be read), lists found, current trends, trends saved, newest list time and a note

The run also saves a short summary record called RUN_SUMMARY: trends saved and charged, locations read, and whether your charge limit was reached. Find it under Storage → Key-value store (the run's small file storage). The run's Log tab shows the same progress in plain sentences.

JSON example

These are shortened rows for the input example above. The first row is from a real run. The second row shows what a brand-new entry looks like, with an example topic name. Real values change every hour.

[
{
"time": "2026-10-23T08:03:24.017Z",
"timePeriod": "Live",
"location": "Worldwide",
"trend": "#RoVTPOPTournament",
"rank": 4,
"rankChange": 1,
"previousRank": 5,
"isNew": false,
"trendingForHours": 2.6,
"startedBeforeWindow": false,
"firstSeen": "2026-10-23T04:37:00.444Z",
"peakRank": 4,
"peakRankAt": "2026-10-23T07:12:57.189Z",
"appearancesIn24h": 4,
"isHashtag": true,
"locationsTrendingIn": 1,
"url": "https://x.com/search?q=%23RoVTPOPTournament",
"snapshotTime": "2026-10-23T07:12:57.189Z",
"snapshotAgeHours": 0.8
},
{
"time": "2026-10-23T08:03:24.017Z",
"timePeriod": "Live",
"location": "United States",
"trend": "Example Topic",
"rank": 12,
"rankChange": null,
"previousRank": null,
"isNew": true,
"trendingForHours": 0,
"startedBeforeWindow": false,
"firstSeen": "2026-10-23T07:10:41.502Z",
"peakRank": 12,
"peakRankAt": "2026-10-23T07:10:41.502Z",
"appearancesIn24h": 1,
"isHashtag": false,
"locationsTrendingIn": 1,
"url": "https://x.com/search?q=Example%20Topic",
"snapshotTime": "2026-10-23T07:10:41.502Z",
"snapshotAgeHours": 0.9
}
]

💡 Tips and advanced usage

That depends on how many locations you add, the time periods, maxItems, your filters and how long each list is. The Actor sets no cap of its own on any plan. A small test run shows how many trends your locations give.

How to get cheaper results

  • Pick only the time periods you need. all gives about 24 lists per location.
  • Keep maxItems small and use trendType or keywords to save only relevant rows.
  • Put all your locations into one run instead of starting one run per location. You pay the start fee once.

This recipe turns the Actor into a simple Twitter trends tracker for daily trend monitoring in one market. It does hashtag tracking for trending hashtags only: a hashtag that isn't trending won't appear.

  1. Set Locations to United States, Time periods to live, Trend type to hashtags and Max trends per location to 10.
  2. Click Save as new task.
  3. In the task, open Schedules and add a schedule.
  4. Within each run, isNew, rankChange and trendingForHours already show what changed since the previous list. To follow Twitter trends over time beyond 24 hours, send each run to Google Sheets (see the setup below).

Cost of the schedule at 10 trends per run, Free plan price (result charges only, before start fees and platform usage):

ScheduleResult charges per dayPer 30 days
☀️ Daily10 × $0.00499 = $0.0499$1.497
⏰ Hourly24 × 10 × $0.00499 = $1.1976$35.928

At these rates, an hourly schedule uses more than the $5 monthly credit in under 5 days, sooner once platform usage is added. If you rely on the monthly credit, run it daily. Set a maximum charge limit in the task's run options, so a single run can't cost more than you planned.

Known issues

  • volume is missing in most rows.
  • History reaches back about 24 hours only.
  • Cities have no backup list. If a city's lists can't be read, the Locations table shows error for it. Run again a little later.
  • If the newest list for a location is more than 4 hours old, the Log tab shows a warning that it may not be fully up to date. Run again later to get a fresher list.

Yes. The Apify API lets you start runs, schedule them and fetch results, so you get an X trends API without an X developer account. Use the apify-client NPM package for Node.js or the apify-client PyPI package for Python. The API tab has ready-to-use code.

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("insights_data/twitter-trends-scraper").call(run_input={
"urls": ["worldwide", "united-states"],
"timePeriods": ["live"],
"trendType": "all",
"keywords": [],
"maxItems": 10,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["location"], item["rank"], item["trend"])
  1. Create the scheduled task from the recipe above.
  2. In the task, open the Integrations tab and choose Google Sheets.
  3. Connect your Google account, pick the spreadsheet and follow the setup steps.

After each finished run, the results go to your spreadsheet. Your team gets a Twitter trends report without opening Apify.

Yes. You can connect it to many cloud services through Apify integrations, such as Make, Zapier, Google Sheets, Google Drive, Airbyte, GitHub and LangChain. Three workflows that fit trend data:

  • 📄 Google Sheets: a sheet that fills itself after every scheduled run (steps above).
  • 🔔 Slack alert for new trends: this needs a webhook plus Make, Zapier or n8n. Add a webhook that fires when a run succeeds. In Make, Zapier or n8n, read the run's dataset, keep only rows where isNew is true, and post them to a Slack channel.
  • 📊 Twitter trends analytics dashboard: load the dataset into your BI tool through the API and chart rank and streak length per location.

Yes. Connect it to Claude and other AI assistants through the Apify MCP server, so an agent can start a run and read the results. Open the MCP tab for setup steps.


🧭 Other social trend and news research scrapers

X is one network. For social media trend monitoring on TikTok, Threads and Weibo, or to follow a trend into the news and into Google search demand, use these Actors from the same team:

ActorWhat it adds
📰 Google News ScraperNews headlines, publishers, dates and article links by search term, topic or link
🧵 Search Threads By KeywordsThreads posts by keyword, #hashtag, phrase or @username, with likes, replies and reposts
🎵 TikTok Hashtag ScraperTikTok videos under any hashtag with views, likes, comments, shares and author stats
📣 Weibo Scraper — Posts, Comments, Profiles & Hot SearchWeibo posts, #topics# with read counts and hot search boards
💹 Stocktwits ScraperStock and crypto messages, bullish/bearish sentiment and trending symbols
🔑 Keyword Search Volume — Bulk Google Metrics (CPC & Trend)Google search volume, CPC and a 12-month trend for a trending term

❓ FAQ

Scraping publicly available data is generally legal, and trend lists are public, ranked lists of topics. Still, take X's Terms of Service into account, respect intellectual property, and only collect personal data (for example when you open the posts behind a trend) with a legitimate reason under laws like GDPR. This isn't legal advice.

For each location you add, it reads the public trend lists (the current list and the past lists it keeps) and picks the lists for your time periods. It compares each list with the one before it to work out rank movement, streaks and best rank. It then applies your filters and limits and saves each trend as a row.

How is it different from the official X API?

Official X API trends endpointX (Twitter) Trends Scraper
AccountNeeds X API credentials (X API docs)No X account needed
Trends per requestUp to 50 per location (X API reference)Every trend in the chosen lists, limited by maxItems

The live list is the newest list available. Lists are published about every hour, so it isn't a minute-by-minute feed. snapshotTime and snapshotAgeHours tell you how fresh each row is.

About 24 hours, which is how long the lists are kept. Pick all for every list in that window. For a longer history, run the Actor on a schedule and keep each run's data.

Add worldwide under Locations and click Start. The worldwide location gives you Twitter trends worldwide: the global list with ranks and movement. Add countries or cities on new lines to compare them with it.

Put every country on its own line under Locations, for example United States, United Kingdom and India, and start one run. Max trends per location applies to each country, so 3 countries with 10 give up to 30 trends.

Yes. Enter the city with its country, for example Mumbai, India or New York. Cities only come from the main lists, because the backup list doesn't cover cities.

Run this Actor. It reads public trend lists, so you get Twitter trends without login, cookies or an X account. Every trend comes with a search link you can open in your browser.

Does it cover TikTok, Threads or other networks?

No, it covers X (Twitter) only. For trending topics today on social media sites like TikTok, Threads or Weibo, see the Actors listed above.

Yes. By default you get both, and isHashtag tells them apart. Set Trend type to topics or hashtags to keep only one kind.

Mostly for Twitter trend analysis: a dated record of what rose, fell and lasted in each market, which you can't get from screenshots of the app. It also feeds hashtag choices, editorial planning and regional comparisons.

Why am I getting fewer results than expected?

  • maxItems counts across all time periods per location (see above). Set it to 0 to get all of them.
  • Filters: keywords and trendType remove rows that don't match.
  • Location problems: open the Locations table. not_found means the name wasn't recognized, so check the spelling and the suggestions. error means the lists couldn't be read, so run again a little later.
  • Charge limit: if your maximum charge limit was reached, the run stopped early.

📧 Support and feedback

Found a bug or want a new field? Please create an issue on the Issues tab.

Need a custom solution, such as a custom trend archive or other data? Contact us at hello.insights.data@gmail.com.

Built and maintained by Insights Data.