Free Google Trending Searches Monitor — RSS Alerts
Pricing
Pay per usage
Free Google Trending Searches Monitor — RSS Alerts
Track Google Trending Searches by country and send signed webhook alerts for new trends.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Marcus Lee
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Google Trending Searches Monitor
See what is rising in Google Trends for the countries you care about, keep a small per-Task memory of previously observed titles, and optionally send only new trends to an HTTPS webhook. It is useful for lightweight dashboards, editorial watchlists, and automation that needs a current signal rather than a historical archive.
Store quick start
Choose one to ten uppercase country codes and optionally add case-insensitive keywords. This is a copy-paste input that runs without a webhook:
{"geos": ["AU", "US"],"keywords": ["ai", "weather"]}
To enable alerts, add both fields. The endpoint must be HTTPS on port 443 and the secret is used only to create the HMAC signature:
{"geos": ["AU"],"keywords": ["space"],"webhook_url": "https://your.example/alerts","webhook_secret": "replace-with-a-long-random-secret"}
OUTPUT
The dataset contains one row per currently matching trend. Every row has this shape, including direct previews and Task runs:
{"geo": "AU","trend_id": "AU:sha256-of-normalized-title","title": "Example Headline","link": "https://example.test/story","description": "A short trend description.","pubDate": "Mon, 01 Jan 2024 00:00:00 GMT","approx_traffic": "100K+","picture": "https://example.test/image.jpg","picture_source": "Example Source","news_items": [{"news_item_title": "Related story","news_item_snippet": "Related story summary.","news_item_url": "https://example.test/related","news_item_source": "Example News"}],"is_new": false}
The run mode changes the meaning of is_new and alerting:
-
Preview — a direct run has no
actor_task_id; it emits the current matching rows withis_new: false, does not write Task state, and never sends a webhook. -
Baseline — the first run of a Task emits its current rows with
is_new: false, stores their IDs in a KVS named for that Task, and sends no alert. This prevents a first run from being a burst of notifications. -
Delta — later runs emit the current rows and mark newly observed IDs with
is_new: true. If a webhook is configured, it receives a signed payload of the new rows only:{"task_id":"task-id","items":[{"geo":"AU","trend_id":"AU:...","is_new":true}]}State is committed only after webhook delivery succeeds. If delivery fails, the run does not commit the new state, so a later retry can deliver the same alert again: webhook delivery is at-least-once.
Every run also writes this sanitized summary shape to the default key-value
store record OUTPUT; run_mode is preview, baseline, or delta:
{"run_mode": "delta","task_id": "task-id","geos": ["AU"],"rows_output": 1,"rows_by_geo": {"AU": 1},"new_rows": 1,"baseline": false,"state_store": "google-trending-searches-monitor-state-task-id","webhook_configured": true}
Preview summaries use task_id: null and state_store: null; baseline
summaries report baseline: true and new_rows: 0. Secrets and webhook URLs
are never included in the summary.
Each geo is capped at 100 parsed, filtered, output, and remembered rows. This keeps the state and observation window aligned, so the state limit cannot make the same 101st row alert forever.
Limits and security
The actor reads the public Google Trends RSS feed. Feed availability, country coverage, item ordering, freshness, rate limits, and field shape are external limits; the feed is not a historical archive. It supports at most ten geos and requires an RSS channel containing at least one usable item. A title is the stable identity, so a title returning after it falls outside the bounded window can be observed as new again.
Webhook delivery accepts only HTTPS port 443. Every literal or DNS-resolved
address must be globally public IPv4/IPv6; private, loopback, link-local,
multicast, reserved, unspecified, and other non-global addresses are rejected.
The connection dials the validated IP while retaining the original hostname
for TLS SNI and the Host header. Redirects are not followed and delivery is
limited to three attempts. The body is signed with
X-Hub-Signature-256: sha256=<hex>; the secret is never written to output.
This Actor is free; users pay only normal Apify platform compute/storage/network usage.
If this actor is useful, bookmark it in the Store and leave an honest review after trying it. The project is independent and is not affiliated with, endorsed by, or sponsored by Google or Apify.
Local development
pip install -r requirements-dev.txtpytest
The Docker image uses Python 3.12 and the pinned apify==1.7.2 SDK. A live
feed probe and deployment review remain outside the deterministic test suite.