Stories

The black box blinks: seeing App Review happen in your own data

App Review is a black box. Identity-joined session data reveals when a reviewer starts testing your build, where they connect from, and the exact path they walk — plus the line we will not cross.

Crossdeck Grid

You hit Submit for Review in App Store Connect, and then nothing. No timestamp. No “a reviewer opened your build”. No hint of who is tapping through the flow you spent a quarter building. You refresh the status page and wait, somewhere between In Review and quiet dread.

Here is the thing we noticed while building analytics that join identity to geography to per-build events: a review session is not actually invisible. It has a shape. Once your data can see who did what, from where, on which build, that shape stops hiding in the noise.

Summary

  • App Store review is opaque by design — you get status changes, not a live signal that a human has started testing your build.
  • A review session still leaves a recognisable signature: traffic from an Apple-attributable network or location, a fresh install of the exact build you just submitted, and timing clustered right after submission.
  • This follows from analytics that join identity × geography × per-build events — so a review session surfaces as one distinct session rather than anonymous traffic.
  • Use it for visibility and QA. Never to show reviewers a different app. That is review evasion, and we reject it outright.

How long does App Store review take?

Most submissions clear review within a day or two, and Apple has publicly said the large majority are reviewed within twenty-four hours. But “usually fast” is cold comfort at 2am before a launch. The number that actually calms you down is not an average — it is a reviewer is testing my build right now. Averages describe a population; you have one submission, and you want to know about that one.

The gap between “the median is twenty-four hours” and “mine started forty minutes ago” is the entire problem. One is a statistic. The other is a fact about your app.

Can you tell when Apple is reviewing your app?

Not from App Store Connect directly — it reports state transitions, not activity. But if your analytics already capture sessions with enough resolution, a review session tends to stand out because three signals line up at once:

  • A fresh install of the exact build you just submitted. Reviewers test the binary you uploaded, on a clean install, not an upgrade carrying old state. A brand-new session on a build number with zero real-world install base is a strong tell.
  • An Apple-attributable network or location. App Review runs from identifiable Apple infrastructure and geography. When your session data derives coarse location and network from IP, traffic originating there rather than from your actual user base is distinctive.
  • Timing that clusters right after submission. A session matching the two signals above, appearing in the window immediately following your submission, is far more likely to be a reviewer than a user who somehow found an unreleased build.

None of these alone is proof. Together, correlated, they form a signature — and a signature is something software can recognise.

Review session signature

The correlated pattern that distinguishes an App Review session from ordinary traffic: a fresh install of the just-submitted build, an origin on an Apple-attributable network or location, and timing clustered immediately after submission. It is a probabilistic fingerprint, not a certificate.

Where does App Review happen from?

From Apple’s own infrastructure, which means it carries network and geographic characteristics that differ from where your customers live. This is exactly why the capability depends on identity-joined, geography-aware analytics. If your tooling treats every session as an anonymous pageview, a reviewer looks identical to anyone else. The moment you join identity, IP-derived geography and per-build events on the same session, an out-of-pattern origin hitting a brand-new build becomes legible.

We did not set out to build a reviewer detector. Crossdeck joins identity, geography and per-build events because that is what makes analytics honest across layers. Review-session visibility is a consequence of owning those layers, not a bolt-on trick. No single-layer analytics tool can see it, because the signal only exists at the intersection.

What does this actually let you do?

Two useful things, both defensible.

  • Stop guessing that review has started. Instead of refreshing a status page, you can see the session that matches the signature and know the process is live. Anxiety replaced by a fact.
  • QA the exact path a reviewer walks. Because the events are per-build and per-session, you can watch where a review session goes — which screens, which flows, where it stalls — on the real submitted binary.

That second point is the quiet win. Most review rejections come from a reviewer encountering something you never tested on the shipped build: a broken sign-in, a paywall that misfires, a permission prompt that loops. Seeing the real path closes that gap before it becomes a rejection.

The line we will not cross

This is for visibility and QA. Full stop.

It is never for showing reviewers a different app than your users get, hiding features during review, or gating behaviour because something “looks like a reviewer”. That is App Store review evasion — a well-documented dark pattern, an explicit violation of Apple’s guidelines, and grounds for removal from the store and termination of your developer account. We reject it, we will not help build it, and we would tell you the same thing in a room.

Knowing a reviewer is present should make your app more faithful to what you shipped, never less.

The honest use is symmetric: you learn that review has started, and you make sure the experience a reviewer sees is the same experience your users see — working, complete, and exactly as submitted. Detection that improves your QA is fair. Detection that changes your app’s behaviour for Apple is cheating, and cheating gets apps pulled.

What we learned

Opacity is not always a property of the system. Sometimes it is a property of your instrumentation. App Review feels like a black box partly because most analytics cannot join the layers that would light it up. Give your session data identity, geography and per-build resolution, and a review session stops being a rumour and becomes a row you can point at.

The lesson generalises beyond Apple: the things that feel unknowable in your funnel are often just unjoined. Visibility beats anxious guessing — but only when you draw a bright line around what visibility is for.

Analytics that join identity, geography and build.

That intersection is why a review session is legible at all.

Questions people ask

Is it against App Store rules to detect that your app is under review?
Detecting review for visibility and QA — knowing it has started, and testing the real flow a reviewer will hit — is fine; you are observing your own analytics. What is prohibited is changing your app’s behaviour for reviewers: showing different content, hiding features, or bypassing functionality when you think a reviewer is present. That is review evasion, an explicit guidelines violation, and it can get your app removed and your account terminated.
Can App Store Connect tell me when a reviewer starts testing?
Not directly. App Store Connect reports status transitions like Waiting for Review and In Review, not a live signal that a human has opened your build. The “reviewer is active now” signal, if you have it, comes from your own identity- and build-joined session analytics, not from Apple.
How reliable is the review-session signature?
It is probabilistic, not certain. Any single signal can have a mundane explanation, which is why three are used together: a fresh install of the submitted build, an Apple-attributable origin, and post-submission timing. Correlated, they are a strong indicator; individually, treat them as hints, not proof.
Does this need a special Crossdeck feature I have to turn on?
No. It is a capability that follows from joining identity, IP-derived geography and per-build events — the layers Crossdeck already owns. There is no reviewer-specific toggle; the visibility emerges because the data is joined across those layers rather than siloed.
What is the benefit if I cannot change anything for the reviewer?
The benefit is QA, not manipulation. You confirm review has started, and you watch the exact path a review session walks on the real submitted binary — catching a broken sign-in, a misfiring paywall or a looping permission prompt before it becomes a rejection. You fix your app for everyone, which is also what the reviewer sees.

Every product named here is built and operated by Cross Constellation.


The line

Detection that improves your QA is fair. Detection that changes your app for Apple is cheating.

Read next

Why we built Crossdeck — and why every product we build helps test it
We thought the App Store Connect wait was the problem. The real problem was fragmentation — the same person scattered across a dozen disconnected tools. So we put one SDK and one customer timeline underneath everything we operate.

Every product is a test environment for the one beneath it
A habit tracker on the App Store, a link-in-bio product carrying anonymous global traffic, and a book catalogue on two platforms. None of them was built to test anything. That is exactly why they work as tests.

The Firebase bill that taught us to see
A runaway Firestore read bill sent us chasing ClickHouse. The real fix was not a new database — it was being able to see where every read came from. What we learned, and why we open-sourced Buckets.

The email address you’re keying on is not the person
Why email is a fragile anchor for user identity, how keying on the wrong id forks one person into many records, and how an identity graph converges every key onto one canonical customer.

We got our connector rejected. It was the best product spec we received all year.
A marketplace review rejected our connector with roughly a dozen findings. Instead of a failure, it read like a spec — the exact definition of a production-grade third-party integration we would never have written ourselves.

Why Biotree needed Crossdeck Trust — and how we stopped the SEO spam farms
Public, indexed link-in-bio pages are a magnet for spam farms and bot signups. The attack Biotree faced, why the obvious defences backfire, and the signup firewall that stopped it without punishing real users.

Why we are building Crossdeck Sales
Cold outbound is miserable because the seller is blind. We were not — we already saw who landed, what they read, and why. So we are building the tool that turns that journey into outreach that lands.