Home / Blog / In-app review prompts: when and how to fire them

In-app review prompts: when and how to fire them

Plenty of apps misuse StoreKit's request review API. The moments that actually work, and the patterns to stay away from.

On one client’s app I moved the rating average from 3.2 to 4.6. The only change was the moment the review prompt fired. We were showing it at the wrong time and inviting negative reviews ourselves. Here’s what I’ve learned about SKStoreReviewController and requestReview(in:).

The rules, as a reminder

Apple actually shows the prompt three times a year. It silently ignores the rest. Triggering it doesn’t mean it was shown. So “trigger at the right moments” isn’t enough, you also need to keep total triggers low.

Since iOS 18, the RequestReviewAction environment action is the recommended route in SwiftUI. On UIKit the older API is still in play.

Wrong moments to trigger

  1. On app open. Asking for a review before the user has used the app is absurd. No negative experience, but no positive one either.
  2. After an error. Asking for a review after a crash is digging your own grave.
  3. After the paywall. Firing a review prompt right after a payment creates a threatening feel while the user is trying to finish a purchase.
  4. During onboarding. The user doesn’t know the product yet.
  5. When entering the app from a push notification. The user wants to see the promo, a review prompt is not their problem.
  6. Every session. The rate limit will catch it, but your intent is already off.

Right moments to trigger

  1. After a positive action completes. The user placed a first order, created their first post, hit their first goal. When the “I did a great thing” feeling is still fresh.
  2. After the Nth use. The user has actually experienced the product. My rule: at least 7 distinct sessions and at least 5 minutes of use.
  3. After a successful feature completion. A user who just broke a 7-day streak in a meditation app. A user who learned 30 words in a language app.
  4. After a positive NPS signal. An in-app “how happy are you?” that gets a 9 or 10, ask that user. Don’t press someone who gave a low score.
  5. After a successful flow following an update. Users who installed the new version and completed their first task successfully.

NPS-based gating

This is the most effective method. A simple in-app emoji rating:

  • User picks 9 or 10 (promoter): trigger the StoreKit review.
  • User picks 7 or 8 (passive): show a “what didn’t you love?” text input, feedback by email.
  • User picks 0 to 6 (detractor): show a “what happened, can we help?” support form.

This way only happy users reach the App Store. Unhappy users send you feedback and the product improves.

Some people worry Apple forbids this. What’s forbidden is “forcing users to give a particular rating”. NPS gating doesn’t force anything, it just shows the prompt to happy users. Unhappy users can still go to the App Store on their own (you can have a link in settings for that).

Implementation

import StoreKit
import SwiftUI

struct ContentView: View {
    @Environment(.requestReview) var requestReview
    
    var body: some View {
        Button("Rate this app") {
            Task {
                if await shouldRequestReview() {
                    requestReview()
                }
            }
        }
    }
}

func shouldRequestReview() async -> Bool {
    let defaults = UserDefaults.standard
    let count = defaults.integer(forKey: "successfulActions")
    let lastShown = defaults.object(forKey: "reviewLastShown") as? Date
    
    guard count >= 5 else { return false }
    if let lastShown, Date().timeIntervalSince(lastShown) < 60*60*24*120 { return false }
    
    defaults.set(Date(), forKey: "reviewLastShown")
    return true
}

We don’t re-prompt the same user for 4 months (120 days). Apple’s 3-a-year cap is already there, but we also cap ourselves so that if they’re unhappy they don’t see it too often.

Linking to the App Store

Some users will want to write a review and miss the prompt. Add a “Rate this app” button in your settings screen that takes them straight to the App Store reviews page:

https://apps.apple.com/app/id{APP_ID}?action=write-review

Track the metrics

  • When did the prompt fire?
  • Which screen was the user on when they saw it?
  • Which trigger produces the highest ratings?
  • Which trigger produces the most ratings?

Track these in Amplitude or Firebase and you’ll find, empirically, which moments work.

Takeaway

The review prompt isn’t a marketing weapon, it’s a reflection of customer satisfaction. Asking at the right moment isn’t the point, asking the right user is. Ask happy users after a meaningful success, gracefully, and your rating average climbs over the long run.

Have a project on this topic?

Leave a brief summary — I’ll get back to you within 24 hours.

Get in touch