TikTok Trends Scraper — X, Pinterest, YouTube & Google Trends avatar

TikTok Trends Scraper — X, Pinterest, YouTube & Google Trends

Pricing

from $1.00 / 1,000 social trends

Go to Apify Store
TikTok Trends Scraper — X, Pinterest, YouTube & Google 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

Steadyfetch Team

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

4

Monthly active users

3 hours ago

Last modified

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 maxTotalChargeUsd on 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.

Social Trends Scraper input form in the Apify console: the five-platform multi-select with the country set to US

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:

Dataset table of a real Social Trends Scraper run: Google daily search trends and YouTube trending chart rows side by side in one shape, with rank, metric, reason and link

chargedplatformchartranktitlekindmetricNamemetricValueurl
truextrends1#MANIFESThashtagtweetVolumenullhttp://twitter.com/search?q=%23MANIFEST
truetiktoktop_hashtags_7d1#dollypartonhashtagviewCount852900000https://www.tiktok.com/tag/dollyparton
truepinteresttop_trends2sterling pointsearchsearchCount100https://www.pinterest.com/search/pins/?q=sterling%20point
trueyoutubeTRENDING_CHART1KATSEYE (캣츠아이) 'Hootie Frutti' Official MVvideonullnullhttps://www.youtube.com/watch?v=is8UDe2PhKQ
truegoogledaily_search_trends1palmeiras vs santossearchapproxTraffic2000https://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-scraper
Required: platforms (array: x | pinterest | youtube | google | tiktok — leave
it empty and the run is a Google + YouTube sample, charged
like any run; any setting you send alongside is applied
to 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 60030 s to 1 h; clean stop, never a timeout kill)
Charges: social-trend once per delivered trend row
Note: omit an optional field or send it as null to take its default — both mean
the same thing (platforms is required and must carry a real value)
Build spec: https://apify.com/steadyfetch/social-trends-scraper/api
Token: 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

PlatformWhat the rows areRank orderMetric
X (Twitter)the 50 trends X lists for that place, hashtags and plain searchesX's own ordertweetVolumeX publishes no post count on this endpoint, so it is normally null. A 0 would claim nobody posted; null says "not published"
TikTokthe 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 runTikTok's own rank, restarting per windowviewCount (TikTok's own shorthand kept verbatim in metricText); post count and category in details
Pinteresttop search terms, with Pinterest's week-, month- and year-on-year change series in detailsPinterest's own rankingsearchCount
YouTube Chartstrending MUSIC videos and artistsTRENDING_CHART (30 videos), then TOP_VIEWS_CHART (100 videos, 100 artists)chart position, restarting per chartviewCount on the top-views charts; the trending chart publishes none
Googlethe daily search trends feed, with the news stories Google attaches to each oneGoogle's own orderapproxTraffic — 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

situationstatusrun status
A platform did not return its trend list to the runplatform_unavailableSUCCEEDED — re-runnable, and the row says so
A platform did not serve its trend list for that country on this runendpoint_unavailableSUCCEEDED — re-runnable, and the row says so
A platform answered normally and published nothingempty_upstreamSUCCEEDED
A platform does not carry the country you asked for (X's WOEID list; TikTok's country list; WORLDWIDE outside X)unsupported_countrySUCCEEDED — the row names the fix
A platform name or country we could not readinput_errorSUCCEEDED — the row names the fix
Your own maxItems / maxRunSeconds / cost capstopped_at_limitSUCCEEDED — summary row + resumeCursor
You set settings but no platforms, so the sample ran under themsample_noteSUCCEEDED — 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.


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 wantActor
Interest over time, related queries, regions, compareGoogle Trends Scraper — Google Trends Data, Interest Over Time
What is trending right now, by countryGoogle Trends Trending Now Scraper — Live Trending Searches
Rising and Breakout queries, with the real growth numberTrending Keywords Scraper — Google Trends Rising Queries
Autocomplete suggestions across 5 enginesGoogle Autocomplete Scraper — Google Suggest, 5 Keyword Engines
Monthly search volume and CPC for a keyword listKeyword Search Volume Scraper — Google Keyword Planner, CPC
What is trending on social platformsthis 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).

FamilyActors
Ad creative intelligenceFacebook · Google Ads video · TikTok · LinkedIn · Google Ads text & OCR
Trends & keywordsGoogle Trends · Trends Now · Breakout keywords · Autocomplete keywords · Keyword volume & CPC · Social trends
YouTube transcriptsYouTube videos · YouTube channels
InstagramReel transcripts · Profile posts
JobsIndeed · Career sites by domain · Glassdoor · Multi-board · Google Jobs
AmazonProducts · Search · Bestsellers · Sellers
Any media fileSpeech 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.