- A brief Google Trends rate limit is ridden out instead of failing the
request. Retries now wait properly between attempts and move to a fresh
connection, and a network hiccup is retried rather than failing that keyword
group on the first try. A sustained block stops retrying after about a minute,
so it cannot drag a run on.
- When Google refuses, the message says so plainly and no longer tells you to
enable a proxy setting that does not exist.
- A run can no longer spend more time than it has. The retry ladder booked
its worst case up front, under loops with no ceiling, so a slow or wobbling
source could push the run past the platform timeout. A run killed that way
loses its own closing message entirely.
- Every request now plans against the time actually left, and a backoff that
would outlive the run is not slept.
- A run that hits its time limit now delivers everything it did read and says
so plainly, naming the searches it never reached — rather than reporting an
empty result, which is a claim it has not earned.
First build. Not published, not priced, no platform run.
- Today's trending Google searches by country from the
i0OFE batchexecute RPC
the trends.google.com/trending page calls for itself. One row per trend per
country, ranked by search volume.
- Fetch layer copied, not rewritten:
src/client.js is byte-identical to
actors/google-trends/src/client.js, and BASE / USER_AGENT /
TRENDING_URL / trendingBody in src/api.js are byte-identical to their
counterparts there. Explore, widgetdata, Google Sheet and explore-URL helpers
dropped — this actor has no keyword mode.
- Reads two payload positions the broad actor drops: the trend's end
timestamp (absent while it is still rising) and the ASCII-folded query.
- Corrected category map. The id → label table in
actors/google-trends/src/normalize.js is wrong from id 4 onward; the map
here was re-derived from 3,543 real trends across three feeds and is
documented with its evidence in src/normalize.js. A renumbering by Google
publishes as category-<id> rather than a wrong word, and the health probe
fails on it.
- A 200 carrying no data payload, or a country whose feed is empty, is treated
as a dead endpoint. If no country answers, the run fails — it never
finishes SUCCEEDED with an empty dataset. A country that fails while others
answer is named in the run's status message.
- Bad input exits SUCCEEDED with the reason in the status message.
- Internal datacenter proxy, no proxy input field.
- 25 offline tests over two real captured feeds plus synthetic edge cases.