When the trouble is on our side of the TikTok arm, the run now stops at once and says so, instead of retrying advice that could never help.
- A refused sign-in at the page-rendering service now stops the TikTok walk immediately. It used to be retried on every time window as if it were temporary weather, and the run's answer was "please re-run" — advice that could never work, because the refusal is on our side, not yours. It now gets the same clean stop a "payment required" answer already had: no retries, one uncharged row saying the request did not get through, and the other four platforms untouched.
- The TikTok arm's own spending guard now counts every rendered page exactly. A page report that came back blank, zero or oddly typed could move that internal meter by the wrong amount, letting the guard stop the walk too early or too late. The meter protects our spend, not yours — nothing about what you are charged has changed.
- README: the trends & keyword suite links and the full steadyfetch shelf now point at the published actors.
A platform that refused, stalled or answered with something unreadable is now reported as something to re-run, never as a platform with no trends.
- A refusal or a challenge page is no longer reported as "this platform published nothing". When a platform answered with a rate-limit notice, a challenge, or any response that was not its trends list, the run used to say the platform had answered normally and published no trends for that country — permanent wording for a temporary problem. Every platform is now checked for its own answer before that can be said. Anything else returns one uncharged row saying the request did not get through and asking you to re-run. A platform that genuinely published nothing still gets the honest empty row it always did, and nothing about what gets charged has changed.
- A Pinterest run that could not read which week of trends is ready now says so. That lookup runs before the trends themselves; when it failed, the whole Pinterest arm came back as "Pinterest published no trends for this country". It now returns one uncharged, re-runnable row naming what did not happen. No extra requests are spent on it.
A typo in an input field name now gets a helpful pointer instead of sample rows.
- A misspelled field name is answered with the field you meant. Sending your platform list
under a name this actor does not have —
sources instead of platforms, say — or filling in
only the country and the limits, used to come back as the uncharged sample rows. Those samples
are all stamped US, so a run that asked for another country and misspelled the platform field
read like a real answer for the wrong one. Such a run now returns one uncharged row that names
the field the actor did not recognise, names the one it does, and shows the shape to send. Runs
that do name platforms are unchanged, and a run with nothing set at all still returns the
sample rows.
TikTok trending hashtags join the four existing platforms — same pricing, same honest rows.
- TikTok is a platform option again. Each run returns the top trending hashtags TikTok
shows publicly for your country — the top 3 for each of its 7-, 30- and 90-day windows,
about 9 rows per run — with posts, views, category and a link, in the same row shape as
the other platforms. TikTok keeps the rest of its list behind a login; this actor delivers
exactly what the public page shows and does not pretend otherwise.
- TikTok covers a fixed list of 27 countries (see the README). A country outside it, or
WORLDWIDE, comes back as an uncharged row naming the fix — before anything is fetched.
- Same pricing, same rules as every other platform: one
social-trend event per delivered
row, and a TikTok page that is blocked, empty or unreadable ships one uncharged row
saying so. The other platforms are never affected by TikTok's weather.
- A TikTok walk cut short by this actor's own page budget now says so. It used to finish
as "Completed" with fewer rows than the page holds and no explanation. The run log now names
the early stop, and one uncharged row says what happened and that a re-run collects the
remaining time windows.
- A "payment required" answer from the page-rendering service stops the TikTok walk
immediately instead of being retried as if it were temporary weather. Nothing is charged
for it.
- Maintenance alarms got sharper: a TikTok page-layout change that breaks some time windows
while others still deliver — or a page that renders but yields nothing readable — is now
flagged to us on every run. Your delivered rows and charges are unchanged either way.
- Sample runs (no platforms selected) now return five example rows, one per platform.
- A restarted run's status line now counts the whole run, not just the final stretch. A
resumed run could say "Delivered 4 trends from 0 of 2 platforms" — the trends were real,
delivered before the restart, but the platform counts only covered the part after it. The
whole sentence now reflects everything the run delivered. The summary row was always
correct and is unchanged.
A country code that can never work is now said to be wrong, instead of being blamed on the platform.
- A two-letter code that is not a country — a typo such as
ZZ — is answered before
anything is fetched. It used to be sent to the platforms, come back refused, and be
reported as a temporary block you should "please re-run" — advice that could never work,
however many times you ran it. You now get one uncharged row that names the mistake, and
the run continues on US, the same answer any country we could not read already gave.
- Codes people type that are not country codes now name the one that works —
UK
points at GB, for example.
- Which countries a platform actually carries is unchanged: that is still the platform's
answer, and it still comes back as its own uncharged row naming the fix.
Interrupted runs no longer repeat themselves.
- A run that restarts mid-way never delivers or charges the same trend twice. Apify
moves long runs between servers, and clicking Resurrect restarts a finished run —
both used to start the collection over from the top, so the same trend could land in your
dataset twice and be charged twice. Each run now recognises what it has already delivered
and picks up from there: no duplicate rows, no duplicate charges, and a resumed run's
output is indistinguishable from one that ran straight through.
maxItems is a limit on the run, not on each restart. A restarted run used to be able
to deliver up to twice the cap you set. It now stops exactly where you set it.
maxRunSeconds and the actor's own time ceiling count the whole run, not the time
since the last restart.
- If a restarted run cannot re-read what it already delivered, it charges nothing at all
for that run rather than risk charging you twice, and the run status says so plainly.
- A platform the run never reached — because it stopped at your row cap, cost cap or
time limit — is now reported as exactly that. It used to be lumped in with "published
nothing for this country", which sent you to change a country that was never asked.
- Every row now carries a hidden delivery key so the above is possible. It is invisible in
the Output tab, in exports and in the API, and no visible column changed.
Initial release.
- Four trend sources in one run — X (Twitter), Pinterest, YouTube Charts and
Google — normalised to one row shape with
platform, chart, rank, title,
kind, metricName, metricValue, url and capturedAt, so the platforms stack into
a single table.
- Every row carries
charged and missReason: the invoice reconciles from the dataset
itself, and only rows with charged: true were billed.
- A platform that rate-limits, blocks or publishes nothing ships one uncharged row saying
which of those happened, and the run still succeeds. The other platforms are unaffected.
- Charging is gated on rows that actually parsed — never on the HTTP status line — so a
response that arrives empty or carries an error inside the body is never billed.
country accepts a two-letter code (WORLDWIDE on X only — the one platform that keeps
a real worldwide list). A country a platform does not carry comes back as an uncharged row
naming the fix — and the run summary says "does not cover this country" rather than
"published nothing", so you change the country instead of waiting for data that will
never arrive.
- Pinterest is asked for the latest date it actually holds before a window is requested, so
the run returns the freshest data that exists instead of an empty one.
- YouTube means YouTube Charts — trending music videos and artists — and every row says
which chart it came from.
- If a platform rate-limits or drops the first attempt, the run tries again over a different
network path before giving up, and the uncharged row says when it is worth retrying.
limitPerPlatform, maxItems and maxRunSeconds are hard limits: the run stops cleanly,
finishes successfully, and the summary row names which limit bound plus what was left.
- Running with no platforms selected returns four uncharged sample rows, one per platform,
without contacting anything.