Free Google Trending Searches Monitor — RSS Alerts avatar

Free Google Trending Searches Monitor — RSS Alerts

Pricing

Pay per usage

Go to Apify Store
Free Google Trending Searches Monitor — RSS Alerts

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

Marcus Lee

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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 with is_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.txt
pytest

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.