X Trends Scraper — 24 Hour Timeline
Pricing
from $0.30 / 1,000 trend rows
X Trends Scraper — 24 Hour Timeline
See what WAS trending on X (Twitter), not just what is: 24 hours of hourly snapshots with rank dynamics for 400+ locations, plus weekly, monthly and yearly leaderboards.
Pricing
from $0.30 / 1,000 trend rows
Rating
0.0
(0)
Developer
Stanislav Shupilkin
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
6 hours ago
Last modified
Categories
Share
See what was trending on X (Twitter), not just what is. Every other trends scraper hands you a single snapshot: fifty topics as of the second you pressed Run. By the time you notice something interesting, the moment it broke out is already gone.
This Actor returns the whole last 24 hours, hour by hour — roughly 22 hourly snapshots × 50 trends per location — plus a rank-dynamics row for every topic that tells you when it entered the chart, how high it climbed and whether it is still climbing. On top of that it can pull the aggregated leaderboards of the day, week, month and year.
No X account, no API keys, no browser, no cookies. Location slugs in, timeline out.
What you can do with a trend timeline
- Catch the breakout, not the aftermath. A
driftrow markedbreakingis a topic that entered the chart in the last few hours and is still going up. That is the window in which a post, a bid or a news desk can still act. - Measure how long a topic actually lasted.
first_seen,last_seenandsnapshotsturn "it was trending" into "it held the top 10 for six hours and died at 3am". - Rebuild the day for a market you were asleep for. One run at 9am gives you the overnight timeline for Japan, Turkey or Brazil, in order, with ranks.
- Compare locations on the same clock. Run several locations in one go and see which topic crossed from one country's chart into another, and how many hours later.
- Feed trend history to a model. Every row is flat JSON with a timestamp and a rank — no scraping, no parsing, no pagination to write.
- Track the long tail. Weekly, monthly and yearly leaderboards show what dominated a market over a period, ranked either by tweet score or by total time spent trending.
Example output
Three row shapes share one dataset, told apart by kind.
snapshot — one trend at one point in time. This is the timeline itself:
{"kind": "snapshot","location": "worldwide","woeid": 1,"captured_at": "2026-09-04T19:36:33+00:00","rank": 1,"trend_name": "Isak","tweet_volume": null,"search_url": "https://twitter.com/search?q=Isak","source": "trends24"}
drift — one row per topic, summarising its whole life inside the window:
{"kind": "drift","location": "worldwide","trend_name": "Real Madrid","status": "breaking","first_seen": "2026-09-04T21:20:21+00:00","last_seen": "2026-09-04T22:12:32+00:00","best_rank": 1,"worst_rank": 1,"first_rank": 1,"last_rank": 1,"rank_change": 0,"snapshots": 2,"rank_series": [{ "captured_at": "2026-09-04T21:20:21+00:00", "rank": 1 },{ "captured_at": "2026-09-04T22:12:32+00:00", "rank": 1 }],"source": "trends24"}
top-period — one row of an aggregated leaderboard:
{"kind": "top-period","location": "united-states","period": "week","metric": "tweeted","rank": 1,"trend_name": "#NationalDogDay","score": 394,"score_label": "394","last_seen": "2026-09-03T22:24:31+00:00","last_seen_label": "1 day ago","source": "getdaytrends"}
Export as JSON, CSV, Excel or XML, or read it straight from the Apify API.
How to read status
| Status | Meaning |
|---|---|
breaking | First appeared in the second half of your window and has not slipped since — a newcomer on the way up. |
sustained | Still in the newest snapshot and holding near its own best rank. |
fading | Gone from the newest snapshot, or still present but more than 10 places below its own peak. |
status answers "where is this topic in its life cycle", not "how hard did it move". A topic that has held the chart all day and climbed forty places stays sustained — it is not new. The size of the move is in rank_change, so sort or filter on that when you want movers rather than newcomers.
How to run it
- Put one or more locations into Locations:
worldwide,united-states,united-states/new-york,japan/tokyo, a fulltrends24.inURL, or a numeric WOEID. 467 locations are available — Worldwide, 62 countries and 402 cities. - Under What to collect,
24h(the hourly timeline) andweek(the weekly leaderboard) are on by default; addday,monthoryearfor the other aggregated leaderboards, or dropweekif you only want the timeline. - Run it. Rows stream into the dataset as each location is parsed.
Input options
| Field | What it does | Default |
|---|---|---|
locations | Slugs, trends24 URLs or WOEIDs | ["worldwide"] |
periods | 24h for the hourly timeline; day / week / month / year for leaderboards | ["24h", "week"] |
windowHours | How far back the timeline goes, counted from the newest snapshot (1–24) | 24 |
includeDrift | Add the rank-dynamics row per topic | true |
liveOnly | Skip the timeline, return only what is trending right now, straight from X | false |
maxTrendsPerSnapshot | Keep only the head of each chart (1–50) — cuts the cost of a run proportionally | 50 |
metrics | Leaderboards only: tweeted (tweet score) or longest (total time trending) | ["tweeted"] |
Pricing: pay per event
You are charged for rows, not for runtime:
| Event | Price |
|---|---|
trend-row — one snapshot or top-period row | $0.0003 |
drift-summary — one drift row | $0.003 |
A full 24-hour timeline for one location is about 22 snapshots × 50 trends = 1100 trend rows ($0.33) plus roughly 260 drift rows ($0.79) — around $1.12 per location. A weekly leaderboard is 30 rows, under a cent.
Cheaper ways to run it, in order of effect:
maxTrendsPerSnapshot: 10— top 10 only, about $0.25 per location including drift.includeDrift: false— the timeline without the summaries, $0.33 per location.windowHours: 6— the last six hours instead of the whole day.liveOnly: true— one live snapshot, $0.015 per location.
If you set a maximum spend on the run, the Actor stops as soon as your limit is reached and finishes successfully with everything collected up to that point. You keep the partial dataset and pay nothing extra.
Limits worth knowing before you run it
tweet_volumeis almost alwaysnull. X stopped publishing tweet counts for trends in January 2026. The field is kept because the sources still carry it for the rare topic that has one, but do not build on it. Userank,snapshotsand the leaderboardscoreinstead.day/week/month/yearare aggregated leaderboards, not hourly history. Hour-by-hour data only exists for the last 24 hours; nobody publishes it deeper than that for free. Atop-periodrow tells you a topic was among the biggest of that week and gives it a score — it does not tell you which hours it occupied. Do not expect a month-long timeline:24his the only period that produces a timeline at all.- Snapshots are roughly hourly, not exactly hourly. The source captures every 40–60 minutes, so a 24-hour window usually holds 20–23 snapshots, and their timestamps are what actually happened, not a tidy grid. Duplicate captures seconds apart are collapsed so the dynamics are not invented.
- The timeline source sits behind a bot check. If it answers with a challenge instead of a page, the run does not fail: it falls back to X's own public endpoint, which gives one live snapshot instead of the 24-hour timeline. Every row carries a
sourcefield (trends24orx-guest-api), so a degraded run is obvious in the data rather than silent, and the run log says so explicitly. In that case there is no drift, because a single snapshot has no dynamics. - Leaderboards are per country. Cities do not have their own leaderboard page, so a city location falls back to its country for
top-periodrows, and several cities of the same country are fetched once, not once each. - Drift needs at least two snapshots. With
liveOnly, or when only one snapshot is available, nodriftrows are produced and nothing is charged for them.