> For the complete documentation index, see [llms.txt](https://docs.amply.tools/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.amply.tools/recipes/rate-review-positive-moment.md).

# Rate review at a positive moment

Show the native rate-review prompt only to users who have just signaled satisfaction — not to everyone on session 3.

**Use this when** your store rating is dragged down by users asked at the wrong moment. **Don't use this when** you have no reliable "positive moment" event. Firing at a random session is no better than the stock prompt.

## Goal

The stock "rate us" prompt on session 3 pulls from the whole population, including frustrated users. Those users rate 1 and 2 stars. This recipe gates the native prompt behind a light custom popup that first asks "how's it going?" — and only triggers the store rating if the user says it is going well. The effect is a higher average store rating because you never invite the unhappy cohort to the store at all.

## Setup

### In the dashboard

* Create a campaign `rating-prompt-positive-moment`.
* Trigger: event `PositiveSignal` (a value moment you define — streak completed, goal hit, purchase confirmed).
* Conditions: `subscription_status != "new"` (avoid brand-new users), `store_rating_shown != true`, session count `>= 3`.
* Action: fire a deeplink to your in-app sentiment popup, e.g. `yourapp://popup/sentiment-check`. The popup asks "Enjoying the app?" with two buttons: "Yes" / "Not really". See [Custom popups](/user-guide/custom-popups.md) for how the popup-as-deeplink pattern works today.
* Branch on the popup result (handled in-app, not in the dashboard):
  * "Yes" → the app calls the native rate-review prompt.
  * "Not really" → the app opens `yourapp://feedback/form` (see [Feedback capture on negative rating](/recipes/feedback-capture-on-negative-rating.md)).
* Frequency: once per user, ever — enforced by the `store_rating_shown != true` condition in the audience, not a native frequency cap.

### In the app (engineering hand-off)

Note: `session_count` is not a built-in targeting attribute — the app must increment and set it as a custom property on each session start, e.g. `amply.setCustomProperty("session_count", n)`.

* Pick the single strongest "positive moment" in your product. Track it as one event, not many:

  ```swift
  amply.track("PositiveSignal", properties: ["source": "streak_7d"])
  ```
* Register a popup action that calls `SKStoreReviewController.requestReview()` on iOS or `ReviewManager` on Android when Amply asks.
* After the native prompt runs, mark the user:

  ```swift
  amply.setCustomProperty(key: "store_rating_shown", value: true)
  ```

## How it runs

1. User completes a 7-day streak. App fires `PositiveSignal`.
2. Amply evaluates event-triggered campaigns. The user has session count `5`, has never been asked, is not a new user. `rating-prompt-positive-moment` matches.
3. Custom popup appears: "Enjoying the app?"
4. User taps "Yes". Amply triggers the native rate-review prompt. The OS shows its store rating sheet.
5. User leaves a 5-star review. App sets `store_rating_shown = true`. The campaign never matches this user again.
6. Parallel path: if the user had tapped "Not really", the feedback deeplink fires and the native prompt is never called — the unhappy user never reaches the store.

## Metrics to watch

* Store rating distribution before and after rollout. Expect the 4-5 star share to rise and the 1-2 star share to fall.
* Popup "Yes" share. If it is <50%, the `PositiveSignal` event is triggering too broadly.
* Native prompt acceptance rate among those who said "Yes". This is the lift over the stock flow.
* Written review volume. You may see fewer total reviews but a higher average — that is the desired outcome.

## Related

* [Feedback capture on negative rating](/recipes/feedback-capture-on-negative-rating.md) — the "Not really" branch
* [Rate-review flows](/user-guide/rate-review-flows.md) — dashboard configuration for the native prompt
* [Custom popups](/user-guide/custom-popups.md) — building the "Enjoying the app?" popup
* [Tracking events](/developer-guide/tracking-events.md) — defining the `PositiveSignal` event
* [Sessions and events](/concepts/sessions-and-events.md) — when event-triggered campaigns evaluate
* [AI-assisted integration](/getting-started/ai-assisted-integration.md) — describe this campaign in plain language and have your AI assistant build it
