App Store & Google Play monitoring · built in Rust

The event is
the product.

We watch your apps' reviews and ratings across the App Store and Google Play, and push every change to you as a structured event — delivered to a webhook today, with Slack and your automation tools on the way. Not another dashboard to log into.

How it works

Three moving parts. None of them yours.

01 — poll

We watch both stores

We poll your apps on the App Store and Google Play, on a regular cadence. No SDK, no code in your app.

02 — normalize

One schema, both stores

Every review and rating is normalized into a single event schema. You never branch on which store it came from.

03 — deliver

Where you already work

You get the event — delivered exactly once — in Slack, a webhook, or your automation tool. No new tab, no new login.

Event catalog

The product's vocabulary.

Every signal Rustle emits has a name. Subscribe to the ones you care about; filter them down to the noise floor you can live with.

Reviews & Ratings

review.created
Live
Filter by minimum or maximum star rating.
rating.dropped
Live
Fires on a threshold crossed or a delta you define.
rating.trend
Planned
Sustained directional movement over a window.
review.reply_changed
Planned
A developer reply added or edited.

Competitor & Listing

app.version_changed
Planned
A new build shipped to either store.
app.metadata_changed
Planned
Title, description, or screenshots — diffed for you.
app.permissions_changed
Planned
New or removed platform permissions.
app.iap_changed
Planned
In-app purchases or prices added, pulled, or moved.
app.availability_changed
Planned
Pulled, re-listed, or region availability shifts.

Intelligence

review.flagged_keyword
Planned
Hits on watchwords: crash, refund, scam, love.
review.sentiment
Planned
Per-review sentiment scored at ingest.

Where it lands

It goes where you already are.

One event, any destination. Fan a single trigger out to as many as you like.

Built for developers

One normalized schema. Plain JSON.

No proprietary client required. Register a webhook in three lines and start receiving events. The same payload shape, whichever store it came from.

review.created · payload
{
  "event_type": "review.created",
  "store": "apple",
  "app_id": "com.acme.notes",
  "review_id": "10982334771",
  "rating": 2,
  "title": null,
  "body": "Crashes on launch since 4.2.",
  "author": "tess_w",
  "app_version": "4.2.0",
  "country": "us",
  "occurred_at": "2026-06-02T14:08:11Z",
  "observed_at": "2026-06-02T14:09:03Z"
  // + event_id, occurrence_id, fingerprint, content_hash, schema_version
}
register a webhook
# point an endpoint at any event
curl -X POST https://api.rustle.cloud/v1/hooks \
  -H "Authorization: Bearer $RUSTLE_KEY" \
  -d '{"event_type":"review.created","url":"https://…"}'

# → 201 Created
# { "hook_id": "hk_8f2a", "status": "armed" }

One normalized schema across both stores — you write the handler once.

Why not just script it

You could. For about a week.

The weekend hackcron + google-play-scraper
  • ~Fires twice when a poll overlaps, or drops events when the box sleeps.
  • ~Two code paths — one per store — that drift out of sync.
  • ~The same review re-notifies every run until you build dedupe.
  • ~A store tweaks its markup and your parser breaks silently on a Saturday.
  • ~"Notify on 1-star in en-US mentioning refund" becomes its own project.
Rustlethe boring-correct version
  • Exactly-once delivery — never double-fires, never silently dies.
  • Cross-store normalization — one schema, no per-store branching.
  • Dedupe built in — every event is seen once and only once.
  • Parser breakage handled — when a store shifts, we fix it, not you.
  • Rich filtered triggers — rating, threshold, delta.

The data is free. The reliability is the product.

Pricing

Indie-friendly. Priced per app.

Split by how many apps you watch and how often we poll. Final numbers are still being set.