Schedule icon
Loop icon
Download icon
Script icon
If icon
Exit icon
ChatCompletion icon
Anthropic icon
SlackIncomingWebhook icon
Pause icon
Create icon
Comment icon
Set icon

App Store Review Triage that Classifies Reviews in Any Language with AI and Files Confirmed Bugs as GitHub Issues

Classify App Store reviews in any language with AI, catch rating drops after a release, and file confirmed bugs as GitHub issues.

Categories
AIBusiness

Crash and bug reports in App Store reviews are spread across countries and languages, so teams see them late and miss that nine reviews describe the same login bug in the new version. This flow reads new reviews daily, groups real problems into topics, and files the ones a person confirms as GitHub issues.

How it works

  1. daily (Schedule) starts one run at a time (concurrency).
  2. fetch (Loop of http.Download) gets each country's latest reviews from Apple's public feed; new_reviews keeps unseen ones.
  3. classify (Loop of ai.completion.ChatCompletion) labels each review (crash, bug, performance, feature request, pricing, praise, other) with severity, an English summary and a topic; merge folds topics that name the same problem differently into one.
  4. triage groups bugs by topic, compares the latest version's rating with a baseline, writes reviews.csv, and post_summary posts to Slack.
  5. approve (Pause) lists bug topics; file opens an issue (github.issues.Create) or comments on the topic's existing one (github.issues.Comment).
  6. kv.Set stores seen reviews, the baseline and topic issues at the end; alert_failure reports failures.

What you get

  • A daily Slack summary and a rating drop alert (latest version 0.75★ below baseline over 10+ reviews).
  • GitHub issues with quoted reviews, versions and countries; later reports join the same issue.
  • Outputs {{ outputs.new_reviews }}, {{ outputs.bug_topics }}, {{ outputs.rating_drop }}, {{ outputs.reviews_csv }}.
  • Nothing filed without a person; a failed run's reviews are proposed again.

Who it's for

  • Mobile product, QA and support teams.

Why orchestrate this with Kestra

  • Parallel downloads and AI batches with retries, where one failure does not stop the rest.
  • Approval, timeout and state in YAML and the KV store, no server to run.
  • Review text never runs as a template, and the model ignores instructions inside reviews.

Prerequisites

  • Docker on the worker, and a GitHub repository for issues.

Secrets

  • ANTHROPIC_API_KEY: classifies reviews (model in variables.claude_model).
  • GITHUB_TOKEN: opens issues and comments (Issues read and write).
  • SLACK_WEBHOOK_URL: summaries, approval requests and failure alerts.

Quick start

  1. Add the secrets.
  2. Execute with app_id (STRING, from the App Store link), countries (ARRAY, default us, gb, in, de, fr, br), github_repo (STRING, owner/repo), min_reviews (INT, default 2; severity-3 topics are always proposed) and dry_run (BOOL) true.
  3. Execute without the dry run, pick topics in approve, check the issues, then enable daily.

Apple's feed shows recent reviews only, without rating-only ones, so run it daily.

How to extend

  • Use the App Store Connect API for your own apps.
  • Draft replies to 1-star reviews, or pause a phased rollout on a rating drop.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.