Travel & Tourism
CrowdCheck
Real-time crowd levels for travelers, without tracking a single traveler
CrowdCheck tells travelers how busy a destination is right now, so they can visit the museum at 2pm instead of queueing at 10am. We built the mobile app and the ingestion pipeline behind it — live crowd estimates for hundreds of destinations, built on anonymized aggregate data from day one.
Crowd data goes stale in minutes — and the obvious way to get it is creepy
Every travel app can tell you a plaza is "usually busy on Saturdays." CrowdCheck wanted to tell you it is busy right now — across hundreds of destinations, with data fresh enough to change someone's plans for the next hour. Crowd levels shift on a timescale of minutes, so a pipeline that updated hourly would be a history lesson, not a recommendation.
The second constraint was the harder one. The cheapest source of live crowd data is following individual phones around, and CrowdCheck refused it outright. The brief was explicit: estimate crowds accurately at scale while never tracking, storing, or being able to reconstruct any individual person's movements.
Blend imperfect sources instead of trusting one perfect-looking one
No single data source survives contact with reality — venue APIs go quiet, sensors drift, and self-reports skew toward the annoyed. So we designed for blending: each destination's crowd score combines several independent signals, weighted by how reliable each has proven for that specific place. When one source degrades, the score degrades gracefully instead of lying confidently.
On the product side we kept the promise small and kept it: open the app, see nearby destinations ranked by how busy they are, get a suggestion for when to go instead. Itineraries, social features, and reviews all stayed on the roadmap. An app you check for ten seconds before deciding where to have lunch needs to be right, not big.
An ingestion pipeline that treats freshness as the feature
A Node.js ingestion layer pulls from venue partner feeds, anonymized density signals, and in-app check-ins, normalizes them into a common schema, and writes rolling aggregates to MongoDB — one document per destination per time window, never per person. An aggregation service recomputes crowd scores continuously, so at peak hours the number a traveler sees is under a minute old.
The React Native app subscribes to score changes through Firebase, which means a spike at a popular landmark propagates to every phone looking at it without anyone pulling to refresh. The whole pipeline runs on AWS with per-destination sharding, so adding the 301st destination cost the same as adding the 51st.
We can tell you the square is crowded — we cannot tell you who is in it
Privacy here is architecture, not a settings toggle. Location signals are aggregated and anonymized at the point of ingestion: the pipeline stores counts per destination per time window, and individual identifiers are discarded before anything touches the database. There is no table of user movements to leak, subpoena, or be tempted by later, because it was never written.
We also enforced minimum-crowd thresholds — a destination with a handful of visitors reports a range, not a count, so small numbers can't be reverse-engineered into individuals. Users who opt in to contribute check-ins do so per-session, and opting out changes nothing about what the app shows them. The honest version turned out to be a selling point: "we can't track you" fits nicely on an App Store screenshot.
Launched with 300+ destinations and data people changed their plans over
CrowdCheck launched with live coverage of 300+ destinations and held a 4.6 store rating through the launch quarter — with reviews specifically citing accuracy, which for a crowd-estimation app is the only compliment that counts. Crowd scores stayed under 60 seconds old at peak tourist hours, including a public-holiday weekend that tripled normal traffic without a wobble.
The behavioral signal the founders cared about showed up early: a meaningful share of users who checked a "very busy" destination tapped through to the suggested quieter time instead. The app was not just being read — it was being obeyed.
Their engineers now add destinations without calling us
We handed over the full pipeline with runbooks for the two things that actually go wrong — a partner feed going dark and a sensor drifting out of calibration — plus a documented process for onboarding a new destination, which their team has since used many times over. CrowdCheck owns every repository, every AWS account, and every data agreement.
We ran a two-week transition with their incoming engineering lead and stayed on a light advisory arrangement through the first high season. They needed us twice. That is the number we were aiming for.
Inside the Product
Built With
Every data vendor we spoke to wanted to track individuals and promise anonymity later. Axomble built it the other way round — and the accuracy still beat what the vendors quoted.Co-founder · CrowdCheck
More Case Studies
Want Results Like These?
Tell us what you're building — or what's breaking. We'll come back with a concrete plan and a fixed price.
Book a Free Consultation© Copyrights 2023-2026 | Axomble | All Rights Reserved
