automations / n8n · updated 2026-07-20

Negative Play-review Slack alerts

Every day, pull an app's newest Google Play reviews and push the 1- and 2-star ones into Slack with text, date, and permalink. A dedup step suppresses already-alerted reviews on later runs — at-least-once alerting: the first scheduled run covers the existing backlog, and a failed execution can repeat its alerts.

100 newest reviews per day cost $0.008 — about $0.24 per month per app, whether or not any alert fires.

What's inside

  1. 1.Every day (schedule trigger)
  2. 2.Get new reviews (HTTP Request → run-sync-get-dataset-items, sort: newest, one item per review)
  3. 3.Split by success (IF on {{ $json.success }})
  4. 4.Only 1-2 star reviews (Filter on {{ $json.score }} ≤ 2)
  5. 5.New reviews only (Code node: suppresses already-alerted review_ids via workflow static data — at-least-once, so a failed execution can repeat alerts)
  6. 6.Slack alert (HTTP Request → your Slack incoming webhook: stars, text, date, permalink — batched one message per ~1.1s to respect Slack's webhook rate limit, with retry on failure)
  7. 7.Failure row (false branch: app_id, code, request_id — not billed)

Set it up

Open the workflow on GitHub (button above), click Raw and copy that URL, then in n8n: Workflow → Import from URL. Open Get new reviews and replace YOUR_APIFY_TOKEN; set appIds to your app's package name. Open Slack alert and replace YOUR_SLACK_INCOMING_WEBHOOK_URL with a webhook from api.slack.com/messaging/webhooks. Then SAVE and PUBLISH (activate) the workflow — the schedule only fires, and the dedup memory only persists, while it is active. Expect the first scheduled run to alert every matching review currently in the newest 100; manual test runs always alert everything. The token comes from Apify Console → Settings → API tokens; the free tier works, and the run bills per delivered row on your Apify account.

Ways to extend it

  • Swap the static-data dedup for a durable processed-ID store — a Sheets or database upsert on review_id. It reduces repeats and preserves dedup state across failed runs; the template still does not guarantee exactly-once Slack delivery.
  • Loosen the Filter to score ≤ 3 during a rocky release, or add a keyword condition (crash, refund) at any rating.
  • Duplicate the HTTP node with a competitor's package name and route to a separate channel.
  • Point the webhook at Discord or Teams instead — any incoming-webhook URL works with the same JSON body pattern.

Going deeper: the n8n transcripts guide — the same run-sync HTTP pattern, step by step; the Python/pandas export guide for working with the same review rows. Actor pricing: what a Google Play Reviews Scraper run costs. Error codes the failure branch can carry: the error-code reference.