Journal · 2 April 2026
Indoor versus outdoor session cuts
The moment a user enters a mall, many SDKs go quiet. If your session logic treats silence as goodbye, every indoor conversion sits downstream of a fake exit.
Outdoor GPS is imperfect. Indoor GPS is often absent. Sessionisation code written for a jogging app will happily close a session when pings stop, then open a new one when the user steps back onto the pavement. You now have two sessions, a mysterious bounce, and a conversion that cannot find its visit.
Label the cut
Emit an explicit event when the client detects a likely indoor transition: last outdoor ping near a known mall polygon, Wi-Fi fingerprint if you have it, or simply a gap that begins at a portal. Do not pretend it is a session_end born of user intent.
If you have no indoor signal at all — a common limitation, and one we admit in the studio FAQ — keep the outdoor session open across the gap up to a documented timeout. Thirty minutes is not magic; it is a choice you must write down so stakeholders stop arguing with the default of your SDK vendor.
Mall-specific contamination
Food courts, cinemas, and transfer halls generate long indoor stays with no store conversion. If you only resume the session after exit, those stays vanish. If you stitch blindly, dwell looks heroic. Corridor sketches of the concourse, used in Indoor Mall Telemetry, are how we keep both errors in view.
What to tell product
Indoor conversion work is often a sensing problem before it is a UX problem. Redesigning the pay button will not restore pings the OS never sent. Put the architecture artefact on the funnel chart in a different colour. People behave better when the chart stops lying about whose fault the silence is.
Continue with sparse GPS and dwell versus intent.