> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get more app store reviews

> Prompt users to review your app using OneSignal in-app messages with native iOS and Android review prompts, reducing friction and increasing ratings.

Use OneSignal in-app messages to prompt users for an App Store or Google Play review without leaving your app. This tutorial covers both no-code and code-required approaches.

<Frame caption="Example in-app message prompting a user to leave an App Store review">
  <img src="https://mintcdn.com/onesignal/tc0EvmtSSX56SX0c/images/docs/8c81fd3f2381baae2ac9176c24fb1e5684df33e991e0726c64a459ed798c7148-Screenshot_2024-11-12_at_12.00.20_PM.png?fit=max&auto=format&n=tc0EvmtSSX56SX0c&q=85&s=df73e58df4a1b6610f1cfffd84bd25d4" alt="In-app message with a Review Now button prompting the user to rate the app" width="1016" height="617" data-path="images/docs/8c81fd3f2381baae2ac9176c24fb1e5684df33e991e0726c64a459ed798c7148-Screenshot_2024-11-12_at_12.00.20_PM.png" />
</Frame>

## Setup

### 1. Create the message

Navigate to **Messages > In-App > New In-App** or open the existing App Store Rating template.

Add an Action ID to your review button:

<Frame caption="Setting a Custom Action ID on the Review Now button">
  <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/293839ca5534557c35929fdaa6eb5581c7218da770f2601bd3e7d819164430b8-Screenshot_2024-11-12_at_12.13.39_PM.png?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=c88fe293c4f381dd0e44c686c54af348" alt="OneSignal in-app message editor showing the Custom Action ID field set to review on a button element" width="1211" height="685" data-path="images/docs/293839ca5534557c35929fdaa6eb5581c7218da770f2601bd3e7d819164430b8-Screenshot_2024-11-12_at_12.13.39_PM.png" />
</Frame>

### 2. Add the trigger

The trigger controls when the message displays. You can use a no-code or code-based approach.

**No-code**: Set up the Audience to target users you want reviews from — for example, users with many sessions who have used the app for a long time.

**Code-based**: Use the SDK's `addTrigger` method to programmatically display the message based on user actions. Avoid showing the prompt when the user is in the middle of an important task.

In this example, the **In-App Trigger** key is `ask_for_review` with a value of `show`. The key and value can be anything, but must match what you pass to `addTrigger`:

`OneSignal.InAppMessages.addTrigger("ask_for_review", "show");`

<Frame caption="In-app trigger key-value matching the addTrigger method call">
  <img src="https://mintcdn.com/onesignal/YOTSrtBSoqdrJ37A/images/docs/459e14e99af52793454464b3e52ddc518f7a8c73021c16aae24b3389532c012a-Screenshot_2024-11-12_at_12.24.08_PM.png?fit=max&auto=format&n=YOTSrtBSoqdrJ37A&q=85&s=0a50f0c58f47de1b1ad7d478fea5ea77" alt="OneSignal dashboard showing the in-app message trigger set to ask_for_review equals show" width="825" height="236" data-path="images/docs/459e14e99af52793454464b3e52ddc518f7a8c73021c16aae24b3389532c012a-Screenshot_2024-11-12_at_12.24.08_PM.png" />
</Frame>

### 3. Handle the app store rating prompt

You can direct users to leave a review with a no-code or code-based approach.

<Accordion title="No-code option">
  1. Update the segment to use the "Device Type is Android" filter.
  2. Duplicate the in-app message and update the duplicate's segment to use the "Device Type is iOS" filter. You should have two in-app messages with two separate segments.
  3. Add a [URL Click Action](./iam-click-actions) to the "Review Now" button linking to your app's store listing:
     * **Android**: `https://play.google.com/store/apps/details?id=YOUR_PACKAGE_NAME` — see [Linking to Google Play](https://developer.android.com/distribute/marketing-tools/linking-to-google-play.html)
     * **iOS**: `https://apps.apple.com/app/idYOUR_APP_STORE_ID?action=write-review` — see [Requesting App Store Reviews](https://developer.apple.com/documentation/storekit/requesting_app_store_reviews)
</Accordion>

<Accordion title="Code-based option">
  Use the SDK's `InAppMessages.addClickListener` method to detect when the review button is clicked (by checking the Action ID), then call the native iOS or Android review API to present the rating modal.

  ```dart theme={null}
  OneSignal.InAppMessages.addClickListener((event) async {
    if (event.result.actionId == 'review') {
      if (await inAppReview.isAvailable()) {
        inAppReview.requestReview();
      }
    }
  });
  ```

  This example uses the [in\_app\_review](https://pub.dev/packages/in_app_review) Flutter package. Adapt for your platform — see [RequestReviewAction](https://developer.apple.com/documentation/storekit/requestreviewaction) for iOS or the [Google Play In-App Reviews API](https://developer.android.com/guide/playcore/in-app-review) for Android.
</Accordion>

### 4. Schedule and enable

Apple displays the native review prompt a maximum of three times within a 365-day period. Google Play enforces a time-bound quota but does not publish the exact limit — calling the API more than once in a short period (less than a month) may not show a dialog.

To stay within these limits, set your in-app schedule to display once every 17 weeks:

<Frame caption="In-app schedule set to display up to 40 times total, spaced 17 weeks apart">
  <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5c63bb89120c9fcffa5c3836f3f13de2db38952bc61c56d2f8d18c0bf450986f-Screenshot_2024-11-19_at_11.49.26_AM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=690b7ecb27ab452252390d5511f6f821" alt="OneSignal in-app message scheduling settings showing 40 total displays with 17-week intervals" width="898" height="187" data-path="images/docs/5c63bb89120c9fcffa5c3836f3f13de2db38952bc61c56d2f8d18c0bf450986f-Screenshot_2024-11-19_at_11.49.26_AM.png" />
</Frame>

<Tip>
  To increase positive reviews, target users who have had a great experience — for example, users with many sessions or those who gave positive feedback via a previous in-app message. Set [tags](./add-user-data-tags) on these users and create a segment to use as the audience for your review prompt.
</Tip>

***

## FAQ

### How often can Apple's native review prompt appear?

Apple displays the `RequestReviewAction` prompt a maximum of three times per 365-day period per user. This is enforced by the system — your app does not need to track the count. See [Requesting App Store Reviews](https://developer.apple.com/documentation/storekit/requesting_app_store_reviews).

### How often can Google's native review prompt appear?

Google Play enforces a quota but does not publish the exact limit. Calling `launchReviewFlow` more than once in a short period (less than a month) may not display the dialog. The quota is an implementation detail that Google can change without notice. See [In-App Reviews quotas](https://developer.android.com/guide/playcore/in-app-review#quotas).

### Can I use this with non-native apps (Flutter, React Native, Expo)?

Yes. Use a platform-specific plugin to call the native review API — for example, [in\_app\_review](https://pub.dev/packages/in_app_review) for Flutter or [StoreReview](https://docs.expo.dev/versions/latest/sdk/storereview/) for Expo. The OneSignal in-app message and click listener work the same way regardless of framework.

***

<Columns cols={2}>
  <Card title="In-app click actions" icon="hand-pointer" href="./iam-click-actions">
    Configure URL, permission prompt, tag, outcome, and custom click actions on in-app message elements.
  </Card>

  <Card title="Tags" icon="tags" href="./add-user-data-tags">
    Tag users based on behavior to build segments for targeted messaging.
  </Card>
</Columns>
