Ark SingularityARK SINGULARITY
← Field Notes

Ark Field Note

Counting Cars from Orbit (and Knowing When You Can't)

An afternoon build that turns free satellite imagery into a Puerto Rico retail-traffic signal — and is honest about exactly where free runs out.

Counting Cars from Orbit (and Knowing When You Can't)
Ark Field Note · counting cars from orbit

The signal hiding in a parking lot

For more than a decade, the sharpest analysts on Wall Street have done something that sounds absurd until it works: they count cars. Photograph a retailer's parking lots from orbit, tally the vehicles week over week, and you get an early, unsentimental read on foot traffic — and therefore sales — before the company ever files an earnings report. It is the canonical example of geospatial alternative data: a physical-world signal, harvested from space, turned into a decision.

The question that started this build was smaller and more concrete. Could an operator in Puerto Rico read the pulse of a mall — say, Plaza Las Américas, the largest in the Caribbean — from satellite imagery, on a budget of roughly zero? The instinct of the moment is to point an AI model at the problem and start training. The Embark discipline is to do the unglamorous thing first: ask what the data can actually support, before writing a line of model code. Map the territory, then build.

The honest ceiling: free pixels can't count cars

The best free satellite imagery on Earth is Sentinel-2, the European constellation that photographs the entire planet every few days and gives it away. It resolves about 10 meters per pixel. A car is roughly 1.8 by 4.5 meters. The arithmetic is brutal and final: a vehicle is smaller than a single pixel. You cannot count what you cannot resolve.

Real Sentinel-2 satellite image of Plaza Las Américas, December 2024 — the mall building and parking lots appear as textured gray areas, with no individual cars visible.
The real thing: Plaza Las Américas captured by Sentinel-2 on Dec 7, 2024. You can make out the mall's roof, the highway, and the lots — but the parking areas are gray smudges, not countable cars. This is the physical ceiling of free imagery.

So we refused to build the product that couldn't exist. Instead of a fake car-counter, the free tier became two honest things: a lot-occupancy proxy (how bright and full the paved area reads over time) and — more valuable — a viability instrument that answers whether a usable signal is even obtainable here. Naming the limit out loud isn't a weakness of the build. It's the most important feature in it.

The real enemy isn't resolution — it's clouds

Here is the twist that only shows up when you touch real data. We pulled every Sentinel-2 scene over Plaza Las Américas for all of 2024 — 140 real acquisitions. Then we applied the standard industry filter: discard any scene with more than 20% cloud cover. It left us with just 37 usable days. Puerto Rico is tropical; the sky is the binding constraint, not the camera.

The expensive question was never "can we count the cars?" It was "will the sky be clear enough to look?"

The standard filter is also wasteful. It judges clouds across the entire 100-kilometer scene and throws the whole thing out — even when the small patch of sky over the parking lot is perfectly clear. So we changed the question: mask clouds only over the lot itself, using the scene-classification band. That recovered 22 partly-cloudy days the blunt filter had discarded. Tune the threshold a little looser, fuse in NASA's Landsat for extra overpasses, and the usable set climbs from 37 toward 59 and beyond — roughly a 60% lift, for free.

Usable days over Plaza Las Américas, 2024 (of 140 real Sentinel-2 scenes) 0 days 14.75 days 29.5 days 44.25 days 59 days 37 days Scene filter ≤20% 38 days Lot-only ≥0.8 44 days Lot-only ≥0.7 51 days Lot-only ≥0.5 59 days Scene OR lot
Usable observation days over Plaza Las Américas in 2024, from the same 140 real Sentinel-2 scenes. Smarter cloud handling — judging the lot, not the whole tile — and a looser threshold turn a 37-day signal into a 59-day one without spending a cent. Adding Landsat roughly doubled the number of distinct acquisition dates again.
The honest texture: at the strictest setting the net gain was only a single day, because a cloudy tile usually means a cloudy lot too. The win is real but it lives in the union of methods and in sensor fusion — not in one heroic toggle. We kept that nuance in the build instead of rounding it up.

Two layers, built in an afternoon

The tool ships in two layers. The first is a demonstration that runs anywhere with zero setup — no accounts, no keys, no internet — so anyone can see the shape of the output in seconds. The second is the real pipeline: it reaches into the live imagery archive, crops a true-color thumbnail of the lot for each clear day, and links out to the full scene. One layer earns trust instantly; the other does the actual work.

It was assembled in an afternoon using AI-native, multi-agent workflows. Scout agents verified the live imagery API against the real endpoint; a fleet of agents wrote the modules in parallel against a shared contract; an integrator wired them together and ran them against genuine 2024 data; and a set of adversarial reviewers were turned loose specifically to catch overclaiming. They did — flagging that an early draft oversold the cloud-masking trick. That correction is why the numbers above are unvarnished. This is Align in practice: aiming the build at the highest-leverage truth (is this feasible, and where?) rather than the flashiest feature (a car counter the pixels can't deliver).

Where money buys resolution

The free layer doesn't replace the expensive one — it aims it. Once you know a location is feasible and how often the sky cooperates, you can spend deliberately on the sub-meter imagery that actually resolves vehicles. The tiers:

TierResolutionCounts cars?Cost posture
Sentinel-2 / Landsat (free)10–30 mNo — occupancy proxy only$0
PlanetScope~3 m, dailyBorderline "is it busy"Subscription
SkySat / Airbus Pléiades~0.5 mYesPay per image / tasking
Maxar WorldView~0.3 mYes, bestPay per image / tasking

The disciplined sequence is archive-first: buy a single existing sub-meter image to confirm you can see and count cars, calibrate it against the free occupancy signal, and only then commit to recurring tasked captures — budgeting, in the tropics, for the shots that come back cloudy. The cheap layer becomes permanent infrastructure that makes every expensive dollar land on target.

Takeaways

  • Measure viability before you build the model. The cheapest question — "will the data even support this?" — is the one that saves the most money and time. Ask it first, with real data, not assumptions.
  • Name your data's physical limit out loud. A 10-meter pixel cannot count a car. Pretending otherwise is exactly how alt-data projects quietly fail; stating it is how this one stayed useful.
  • In the tropics, clouds are the constraint, not cameras. Smarter masking and sensor fusion recovered more signal than any resolution upgrade would have — and cost nothing.
  • Build the $0 honest version first, and let it aim the dollars. Resilience that compounds isn't a bigger budget; it's knowing precisely where a small one will pay off. An ark that compounds measures the flood before it sails into it.