TikTok Trends Scraper — X, Pinterest, YouTube & Google Trends
Pricing
from $1.00 / 1,000 social trends
TikTok Trends Scraper — X, Pinterest, YouTube & Google Trends
TikTok trends: trending now on X, TikTok, Pinterest, YouTube Charts and Google — the five platforms you pick, one row shape with rank, link and a metric where the platform publishes one. TikTok rows are its public top 3 hashtags per 7-, 30- and 90-day window. From $1.00 per 1,000 social trends.
Pricing
from $1.00 / 1,000 social trends
Rating
0.0
(0)
Developer
Steadyfetch Team
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
4
Monthly active users
3 hours ago
Last modified
Categories
Share
Never charged when a platform goes quiet. What is trending right now on X, TikTok, Pinterest, YouTube Charts and Google — five platforms in one run, normalised to one row shape with rank, metric and link.
Using an AI agent? Pin this actor in Apify's MCP server with one link: https://mcp.apify.com?tools=steadyfetch/social-trends-scraper
- Actor id:
steadyfetch/social-trends-scraper - Input:
{ "platforms": ["google", "youtube"] }— the one field you have to set. - Cap the bill: set
maxTotalChargeUsdon the run (a run option, not Actor input), e.g.0.50— the run stops when it reaches it.
Unofficial. This actor is not affiliated with, endorsed by, or sponsored by X, TikTok, Pinterest, YouTube or Google. All product names and trademarks belong to their owners and are used here only to describe which public surfaces this tool reads.
Just want to see it work? Click Start without picking platforms and the run pulls the top 5 trends from Google and YouTube (US), charged like any run at your plan's per-row price. Set a country or a limit and pick no platforms, and that same sample runs under your settings — one uncharged note row names them, and a limit above the sample's own is a ceiling, not a request. Pick your own platforms for your own run.

From $1.00/1,000 social trends — all-inclusive pay per event, nothing charged for starting a run, charged only on delivery. Issues answered in a couple of hours.
Worth a schedule? The five sources do not move at the same speed. Google's is a daily search
trends feed and TikTok publishes its hashtag boards as 7-, 30- and 90-day windows, so a daily run
brings new Google rows long before a TikTok board has changed. Every row carries capturedAt, so you
can see how fresh each platform's own answer was before you settle on a cadence — and because nothing
is charged for starting a run, a schedule pays exactly the same per trend as a one-off run.
What a second run costs. The same as the first, per trend delivered. This actor deliberately keeps no memory of what it handed you — a remembered trend board would be a stale one, and where a trend sits today is the whole point — so a re-run inside a platform's own refresh window hands you the same board again and charges for it again. Match the cadence above and every run brings a board that has actually moved; run sooner than that and you pay for the one you already have. A run that lands early is still only ever charged for the rows it handed you: starting costs nothing, and a platform that went quiet or does not carry your country comes back as an uncharged row.
Every row carries charged and missReason, so you can reconcile the invoice from the
dataset itself without opening the console. Only rows with charged: true were billed.
Output
One row shape for all five platforms, so they stack into a single table:

charged | platform | chart | rank | title | kind | metricName | metricValue | url |
|---|---|---|---|---|---|---|---|---|
| true | x | trends | 1 | #MANIFEST | hashtag | tweetVolume | null | http://twitter.com/search?q=%23MANIFEST |
| true | tiktok | top_hashtags_7d | 1 | #dollyparton | hashtag | viewCount | 852900000 | https://www.tiktok.com/tag/dollyparton |
| true | pinterest | top_trends | 2 | sterling point | search | searchCount | 100 | https://www.pinterest.com/search/pins/?q=sterling%20point |
| true | youtube | TRENDING_CHART | 1 | KATSEYE (캣츠아이) 'Hootie Frutti' Official MV | video | null | null | https://www.youtube.com/watch?v=is8UDe2PhKQ |
| true | google | daily_search_trends | 1 | palmeiras vs santos | search | approxTraffic | 2000 | https://trends.google.com/trends/explore?q=palmeiras%20vs%20santos&geo=US |
(Real rows from US runs. Where a platform publishes no number for a chart, metricValue
is null and the row's own metricReason says why — see "What each platform actually
gives you".)
Browse the full sample dataset →
— one real US run of the current code across X, Pinterest, YouTube Charts, Google and TikTok
(49 trends, 10 per platform asked for — TikTok's public page shows 9), ending with the run's own
summary row. Every column described below is in it, placeReason and metricReason included.
Nothing is trimmed for the demo.
Every row also carries country, place, placeReason, metricText (the value exactly
as published), metricReason, capturedAt (upstream's own timestamp for the data),
fetchedAt, status, retryable, statusReason, schemaVersion, and a details object
holding that platform's native fields. Every column that can come back empty says why it
is empty, on the row itself — you never have to guess whether a blank is a gap in the
data or a gap in the tool. The last row of every run is a summary row with delivered, stoppedBy,
resumeCursor and chargedEvents.
And one delivered row in full, from a real run on 2026-09-12. Each trend is one social-trend charge, whichever platform it came from — the shape is the same for all five. The picture and the news links are shown here as placeholders.
{"schemaVersion": 1,"platform": "google","country": "US","place": null,"placeReason": "not-named-by-platform","chart": "daily_search_trends","rank": 3,"title": "super earth","kind": "search","metricName": "approxTraffic","metricValue": 10000,"metricText": "10000+","metricReason": null,"url": "https://trends.google.com/trends/explore?q=super%20earth&geo=US","details": {"picture": "https://…","news": [{"title": "The sun may once have swallowed a super-Earth planet and could still be hiding the evidence","url": "https://…","source": "Space"},{"title":"Our Sun Might Actually Be a Planet Killer","url":"https://…","source":"Gizmodo"},{"title": "The sun may have swallowed a planet — and left behind a fingerprint: Study","url": "https://…","source": "NewsNation"}]},"capturedAt": "2026-09-12T06:50:00.000Z","fetchedAt": "2026-09-12T07:16:44.818Z","status": "ok","charged": true,"missReason": null,"retryable": false,"statusReason": "Delivered.","#k": "google|US|daily_search_trends|search|super earth|https://trends.google.com/trends/explore?q=super%20earth&geo=US","#ce": {"social-trend":1}}
Agent / API paste-block
Actor: steadyfetch/social-trends-scraperRequired: platforms (array: x | pinterest | youtube | google | tiktok — leaveit empty and the run is a Google + YouTube sample, chargedlike any run; any setting you send alongside is appliedto that sample)Optional: country (string, default "US" — two-letter code; WORLDWIDE on X only)limitPerPlatform (integer, default 50, up to 250)maxItems (integer, default 500 — up to 5,000 for the whole run)maxRunSeconds (integer, default 600 — 30 s to 1 h; clean stop, never a timeout kill)Charges: social-trend once per delivered trend rowNote: omit an optional field or send it as null to take its default — both meanthe same thing (platforms is required and must carry a real value)Build spec: https://apify.com/steadyfetch/social-trends-scraper/apiToken: https://console.apify.com/settings/integrations
curl -X POST "https://api.apify.com/v2/acts/steadyfetch~social-trends-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"platforms":["x","pinterest","youtube","google","tiktok"],"country":"US","limitPerPlatform":25}'
What each platform actually gives you
| Platform | What the rows are | Rank order | Metric |
|---|---|---|---|
| X (Twitter) | the 50 trends X lists for that place, hashtags and plain searches | X's own order | tweetVolume — X publishes no post count on this endpoint, so it is normally null. A 0 would claim nobody posted; null says "not published" |
| TikTok | the top trending hashtags TikTok shows publicly — the top 3 for each of its 7-, 30- and 90-day windows (top_hashtags_7d/30d/90d), about 9 rows per run | TikTok's own rank, restarting per window | viewCount (TikTok's own shorthand kept verbatim in metricText); post count and category in details |
top search terms, with Pinterest's week-, month- and year-on-year change series in details | Pinterest's own ranking | searchCount | |
| YouTube Charts | trending MUSIC videos and artists — TRENDING_CHART (30 videos), then TOP_VIEWS_CHART (100 videos, 100 artists) | chart position, restarting per chart | viewCount on the top-views charts; the trending chart publishes none |
| the daily search trends feed, with the news stories Google attaches to each one | Google's own order | approxTraffic — a published floor ("500+"), kept verbatim in metricText |
place is the platform's own name for the geography, and only two of the five publish
one. X names the place it served ("United States") and TikTok's page names its region
("United States of America"). Google, Pinterest and YouTube Charts are asked for a country
and answer with rows only — they never name a place — so their rows carry place: null and
placeReason: "not-named-by-platform". country is the geography on every row either way,
and this actor never fills the column in with a label of its own invention.
Where a platform publishes no number, the row says so. metricValue, metricText and
metricName come back null together and metricReason reads
"not-published-by-platform". That is every X row (X no longer publishes a post count on
this endpoint) and every YouTube TRENDING_CHART row; TOP_VIEWS_CHART carries real view
counts, and Google, Pinterest and TikTok publish theirs. A 0 would claim a real
measurement of nothing, so you never get one.
TikTok here means exactly what TikTok shows without a login. TikTok's trend pages display the top ~3 hashtags per time window publicly and keep the rest of the list behind a login. This actor reads all three windows — 7, 30 and 90 days — and delivers those top rows honestly labelled, instead of pretending the full list is available. If you need deeper TikTok hashtag lists, this is not the actor for it.
YouTube here means YouTube Charts, and Charts is music. YouTube retired its general Trending feed as a product — the old endpoint answers with an empty "try searching" page on every client. This actor does not pretend otherwise: it returns the charts that still publish, and labels every row with which chart it came from. If you need general video, this is not the actor for it.
Pinterest data lags about six days. The actor asks Pinterest which date it actually has before requesting a window, so you get the freshest data that exists rather than an empty "today".
Links: X's link is X's own, passed through unchanged. YouTube links are built from the video or channel id in the response. Pinterest and Google publish no per-trend link, so those are search links built from the term.
Countries
country takes a two-letter code, and every platform is asked for the same one so the rows
line up.
A value that is not a country code at all (ZZ, UK, United States) stops the run right
there: one uncharged input_error row naming the fix, and nothing is fetched. You are never
billed for a country you did not ask for.
WORLDWIDE works on X only — X is the one platform that publishes a real worldwide
trend list. TikTok, Pinterest, YouTube Charts and Google publish per country and have no
worldwide feed, so on those four WORLDWIDE comes back as an uncharged row naming the
fix. This actor never substitutes another country's data instead.
X serves trends by WOEID and carries a fixed list —
WORLDWIDE, AE, AR, AT, AU, BE, BH, BR, BY, CA, CH, CL, CO, DE, DK, DZ, EC, EG, ES, FR, GB,
GH, GR, ID, IE, IL, IN, IT, JO, JP, KE, KR, KW, LB, MX, MY, NG, NL, NO, NZ, OM, PE, PH, PK,
PL, PT, QA, RU, SA, SE, SG, TH, TR, UA, US, VE, VN, ZA. Every one of those was probed live
against the endpoint. A country outside the list comes back as an uncharged row naming
the fix, not as an empty result.
TikTok's trend pages carry their own fixed list — AE, AR, AU, BR, CA, CO, DE, EG, ES, FR, GB, ID, IL, IT, JP, KR, MX, MY, PH, SA, SG, TH, TR, TW, US, VN, ZA — taken from the page's own country selector. Same rule: a country outside it is an uncharged row naming the fix, before anything is fetched.
What you are never charged for
| situation | status | run status |
|---|---|---|
| A platform did not return its trend list to the run | platform_unavailable | SUCCEEDED — re-runnable, and the row says so |
| A platform did not serve its trend list for that country on this run | endpoint_unavailable | SUCCEEDED — re-runnable, and the row says so |
| A platform answered normally and published nothing | empty_upstream | SUCCEEDED |
A platform does not carry the country you asked for (X's WOEID list; TikTok's country list; WORLDWIDE outside X) | unsupported_country | SUCCEEDED — the row names the fix |
| A platform name or country we could not read | input_error | SUCCEEDED — the row names the fix |
Your own maxItems / maxRunSeconds / cost cap | stopped_at_limit | SUCCEEDED — summary row + resumeCursor |
| You set settings but no platforms, so the sample ran under them | sample_note | SUCCEEDED — the row names the settings that were kept |
When a platform refuses every connection and the run still has time, the run does not stop at
the first refusal: it pauses, comes back on fresh sessions and walks that platform's whole
connection ladder again — waiting the platform's own reset time when it names one, otherwise a
minute or two — for as long as the run can afford it, never more than eight minutes of waiting
in total and never more than half the time the run had left when the first refusal came. Only
then does the uncharged row ship, and it says how long the run waited and over how many tries.
A run with a short time limit answers at once, and an answered-empty platform is never waited on.
TikTok is read through a rendered browser, so its looks are the slowest here: leave
maxRunSeconds at its default (or raise it) if you want a run that includes TikTok to be able
to wait out a refusal. If the run's own clock ends a platform's walk, the uncharged row says so
and names maxRunSeconds rather than leaving you to guess.
A refusal is reported as a refusal, never dressed up as "this platform has no trends". Two of these platforms can answer HTTP 200 with an error inside the body or with nothing in it at all — charging is gated on rows that actually parsed, never on the status line.
This actor may fail when the platform changes things — failed items are never charged.
Limits are hard limits
limitPerPlatform, maxItems and maxRunSeconds stop the run exactly where you set them.
The run still finishes successfully, the summary row names which limit bound, and
resumeCursor lists the platforms that were not reached.
Each also has a range of its own: up to 250 trends from one platform, 5,000 for the whole run, and a run window between 30 seconds and one hour. Ask outside one of them and the run still starts: it uses the nearest end of the range and writes one uncharged row naming what you asked for and what bound it.
FAQ
Does {} cost anything?
Ten charged rows — the top 5 trends from Google and the top 5 from YouTube for the US — at your
plan's per-row price, which on the Apify free plan is under five cents for the whole sample and less
on every paid plan. One extra row, the uncharged note naming the sample, costs nothing. It is a real
fetch charged like any run, so the first thing you see is real data in the exact row shape. The
status line says it was the sample and how to pick your own platforms.
What happens if I set a country or a limit but no platforms?
The sample runs under your settings: the country you chose is kept, everything you did not set
takes the sample's own value, and a per-platform, whole-run or run-seconds limit above the sample's
own is treated as a ceiling. One uncharged sample_note row names the settings that were kept. Only
an input field name this actor does not recognise, a platforms list you filled with blanks, or a
country it cannot read gets a guidance row instead.
Why is metricValue empty on some rows?
Because that platform does not publish a number for that chart. Inventing one would be worse
than leaving it out, so metricName and metricText are null alongside it and
metricReason names the cause on the row. The same rule covers place: empty means
placeReason tells you why.
Why does TikTok return about 9 rows when the others return dozens? Because that is everything TikTok shows without a login: the top ~3 hashtags for each of its 7-, 30- and 90-day windows. The rest of the list sits behind a TikTok login. This actor delivers exactly what the public page shows — around 9 honestly-labelled rows — rather than selling a "full list" it cannot fetch.
Can I run one platform on a schedule?
Yes — pass a single value in platforms. Each platform is fetched independently, and one
platform being down never blocks the others.
How do I join the five platforms?
They already share a schema. Group by platform + chart, sort by rank, and use title
as the term. capturedAt tells you how fresh each platform's data actually is.
Steadyfetch trends & keyword suite
One actor per surface, one job each, the same contract everywhere: all-inclusive pay per event, nothing charged for starting a run, charged only on delivery — so a workflow built for one of them ports to the next. Keyword volume is the one exception: a run that buys fresh volume data adds one fresh-lookup fee of $0.19; runs answered from the 30-day cache pay none.
| What you want | Actor |
|---|---|
| Interest over time, related queries, regions, compare | Google Trends Scraper — Google Trends Data, Interest Over Time |
| What is trending right now, by country | Google Trends Trending Now Scraper — Live Trending Searches |
| Rising and Breakout queries, with the real growth number | Trending Keywords Scraper — Google Trends Rising Queries |
| Autocomplete suggestions across 5 engines | Google Autocomplete Scraper — Google Suggest, 5 Keyword Engines |
| Monthly search volume and CPC for a keyword list | Keyword Search Volume Scraper — Google Keyword Planner, CPC |
| What is trending on social platforms | this actor |
The rest of the steadyfetch shelf — same contract everywhere: all-inclusive pay per event, nothing charged for starting a run, charged only on delivery (three actors add a small delivery-conditional fee: keyword volume's fresh lookup, profile posts' profile lookup, Google Jobs' search fee — each README states it).
| Family | Actors |
|---|---|
| Ad creative intelligence | Facebook · Google Ads video · TikTok · LinkedIn · Google Ads text & OCR |
| Trends & keywords | Google Trends · Trends Now · Breakout keywords · Autocomplete keywords · Keyword volume & CPC · Social trends |
| YouTube transcripts | YouTube videos · YouTube channels |
| Reel transcripts · Profile posts | |
| Jobs | Indeed · Career sites by domain · Glassdoor · Multi-board · Google Jobs |
| Amazon | Products · Search · Bestsellers · Sellers |
| Any media file | Speech to Text · any link or file |
Free templates
Free n8n workflow templates for this actor are listed on our profile website (link on our Apify profile).
Feedback & support
Found an issue? Open it on the Issues tab — we usually reply within a couple of hours, always within a day.
If it earned its keep, a rating helps other buyers find it, and saving the actor keeps it one click away.

