App Store Connect app review status notifications on your phone.

Get a push notification as your app version moves through App Review: submitted, in review, approved, live, or rejected.

APP_STORE_VERSION_APP_VERSION_STATE_UPDATEDDeveloper toolsReleases
How it works

Three steps to your first push

STEP 01

Install the recipe

One click in Studio gives you a personal webhook URL.

STEP 02

Paste your URL into App Store Connect

Add it as a webhook for APP_STORE_VERSION_APP_VERSION_STATE_UPDATED.

STEP 03

Get a push on your phone

With the text, sound and buttons from the recipe.

Setup

How to set up the App Store Connect app_store_version_app_version_state_updated webhook

  1. Click Install in Studio and sign in. The recipe is added to your account and you get a personal webhook URL.
  2. In App Store Connect, go to Users and Access > Integrations > Webhooks and add a webhook for your app.
  3. Use the URL from the setup notes below, which adds your app's name so the notification can show it.
  4. Select the APP_STORE_VERSION_APP_VERSION_STATE_UPDATED event, enter any secret, and save.
  5. Send a test ping from the webhook to confirm it arrives.
  6. Use this as the webhook URL, replacing the app name and ID with your own:
  7. ```
  8. your webhook URL?app=My%20App&app_id=1234567890https://••••••••/•••••••• your personal URL, shown after install
  9. ```
  10. App Store Connect only sends IDs and states, so `app` is what the notification calls your app (`%20` is a space). `app_id` is your app's **Apple ID**, found under **App Information**; it makes the button open your app instead of the App Store Connect home page. Both are optional.
  11. App Store Connect asks for a secret and signs each request with it, but JustPush doesn't check that signature yet, so keep your endpoint URL private.
The code

What runs when the webhook arrives

Studio calls handleRequest(request) with the incoming webhook and sends the message it returns. It's yours after install; change anything.

transform.js
1// App Store Connect → app review status
2// Fires when an app version moves through App Review (submitted, in review, approved, live or rejected).
3// Docs: https://developer.apple.com/documentation/appstoreconnectapi/webhook-events
4//
5// Add an App Store Connect webhook for the APP_STORE_VERSION_APP_VERSION_STATE_UPDATED event
6// pointing at your integration's endpoint URL plus ?app=My%20App&app_id=1234567890.
7
8// The states worth a push, what to call them, and how loud to be.
9// Other states (preparing, processing, replaced, …) are skipped.
10const STATES = {
11 WAITING_FOR_REVIEW: { title: "⏳ Submitted for review", text: "is waiting for App Review", priority: -1 },
12 IN_REVIEW: { title: "👀 In review", text: "is being reviewed by Apple", priority: -1 },
13 PENDING_DEVELOPER_RELEASE: {
14 title: "✅ App approved",
15 text: "passed App Review and is waiting for you to release it",
16 priority: 1,
17 },
18 PENDING_APPLE_RELEASE: {
19 title: "✅ App approved",
20 text: "passed App Review and is scheduled for release",
21 priority: 1,
22 },
23 READY_FOR_DISTRIBUTION: { title: "🚀 Live on the App Store", text: "is now available on the App Store", priority: 1 },
24 REJECTED: { title: "❌ App rejected", text: "was rejected by App Review", priority: 1 },
25 METADATA_REJECTED: { title: "❌ Metadata rejected", text: "was rejected by App Review for its metadata", priority: 1 },
26 INVALID_BINARY: { title: "❌ Invalid binary", text: "was rejected because the binary is invalid", priority: 1 },
27}
28
29// App Store Connect only sends IDs and states, so the app's name and numeric ID come
30// from query parameters you add to the webhook URL: ?app=My%20App&app_id=1234567890
31function appFrom(request) {
32 const query = request.query || {}
33 const name = typeof query.app === "string" && query.app.trim() ? query.app.trim() : null
34 const id = /^\d+$/.test(String(query.app_id ?? "")) ? String(query.app_id) : null
35
36 return {
37 name,
38 link: id ? `https://appstoreconnect.apple.com/apps/${id}` : "https://appstoreconnect.apple.com/",
39 }
40}
41
42function handleRequest(request) {
43 const data = (request.body || {}).data
44 const app = appFrom(request)
45
46 // "Test" in App Store Connect sends a ping; confirm the connection with a quiet push.
47 if (data?.type === "webhookPingCreated") {
48 return {
49 title: "🔔 App Store Connect connected",
50 message: `Webhook for ${app.name ?? "your app"} is working`,
51 topic: "App Store Connect",
52 priority: -1,
53 }
54 }
55
56 // Guard: only handle this event type, so other App Store Connect events stay quiet.
57 if (data?.type !== "appStoreVersionAppVersionStateUpdated") {
58 console.log(`Ignoring App Store Connect event "${data?.type ?? "unknown"}"`)
59 return null
60 }
61
62 if (!Object.prototype.hasOwnProperty.call(STATES, data.attributes?.newValue)) {
63 console.log(`Skipping app version state "${data.attributes?.newValue ?? "unknown"}"`)
64 return null
65 }
66
67 const state = STATES[data.attributes.newValue]
68
69 return {
70 title: state.title,
71 message: `${app.name ?? "Your app"} ${state.text}`,
72 topic: "App Store Connect",
73 priority: state.priority, // Low while waiting, High once there's a verdict
74 buttons: [{ cta: "Open App Store Connect", url: app.link }],
75 }
76}
Payload

The App Store Connect APP_STORE_VERSION_APP_VERSION_STATE_UPDATED webhook

This is what App Store Connect sends to your URL for app_store_version_app_version_state_updated. It is a sample, trimmed to the fields recipes use.

APP_STORE_VERSION_APP_VERSION_STATE_UPDATED · sample.json
1{
2 "data": {
3 "id": "7c813492-9516-4c79-903e-224effdd57ac",
4 "type": "appStoreVersionAppVersionStateUpdated",
5 "version": 1,
6 "attributes": {
7 "newValue": "PENDING_DEVELOPER_RELEASE",
8 "oldValue": "IN_REVIEW",
9 "timestamp": "2026-09-28T09:30:52.745Z"
10 },
11 "relationships": {
12 "instance": {
13 "data": {
14 "id": "ad7e6298-2570-4ca6-b3cc-f81788e40bdc",
15 "type": "appStoreVersions"
16 }
17 }
18 }
19 }
20}
FAQ

App Store Connect app review status notifications: questions

Does this work on iPhone and Android?

Yes. Install the JustPush app from the App Store or Google Play and sign in. Every phone signed in to your account gets the notification.

Do I need to write code?

No. Install the recipe in Studio, paste your webhook URL into App Store Connect and you are done. The code is there if you want to change the text, the sound or the buttons.

Can I change what the notification says?

Yes. After install the recipe's code is yours. Edit it in Studio and test it against the sample payload before you save.

What does it cost?

JustPush is free for 30 days. After that it's $19.99 a year, or $39.99 once. There is no extra charge for recipes.

Ready when you are

App Store Connect on your phone in two minutes.

Install the recipe, paste one URL, done. Free for 30 days, no credit card required.