I was hiking hut-to-hut across the Dolomites, staying in mountain refuges along the way. My next stop was Rifugio Firenze, and I wanted to see if I could climb up to the Seceda ridgeline first. My AI just needed to find the hut to calculate my altitude gain for the day. It knew the name, roughly where it was. But the lookup kept failing.
I opened Google Maps on my phone to check. There it was. Google found it instantly. I put my phone away and felt a pit in my stomach.
I'd quit my job at Microsoft to build Wanderfugl, an AI agent that traverses OpenStreetMap to plan hikes and trips. And it couldn't find places.
Google Places would solve this, but Google Places has become shockingly expensive. Even if I could afford it, I'd be building on a foundation I didn't control. I was stuck with open source geocoders that didn't work.
I applied for cloud credits and got rejected
Venture-backed travel AI startups like Mindtrip and Layla got hundreds of thousands of dollars in Google Cloud credits. Enough to build on Google's APIs without thinking about cost.
I applied for the same credits. Got rejected because I wasn't VC-backed. When I did get credits from other programs, they were 50-100x smaller than what the funded companies received.
In the Norwegian folk tales, there's a pattern. The older brothers get the inheritance—the sword, the armor, the horse. They ride out to fight the troll with every advantage. And the troll eats them. The youngest brother, Askeladden, gets whatever scraps his brothers leave behind. Everyone assumes he'll fail before he starts. The scraps aren't enough on their own. He has to be cunning.
The venture-backed startups got the inheritance: Google Cloud credits and the Google Places API. The sword that could slay the troll.
I got Photon, an open-source geocoder for OpenStreetMap. I got OSM itself, messy and inconsistent but free and open. And most importantly, I got open weights embedding models that had just gotten shockingly good.
The sword was a trap
Google Places works beautifully. 98% recall. Handles multilingual queries and spelling variations. If you have the credits, you can fight the troll.
But the sword has a cost that comes due later.
$32 per 1,000 requests. At scale, that's $276,000 per day. Over $100 million per year. And if you lock into Gemini for a discount, you surrender model choice. No Claude, no GPT, no open models. The sword demands loyalty.
The data isn't yours either. Google returns a Place ID you can cache, but that ID only works within their ecosystem. Every enrichment, every lookup routes back through their APIs. Forever.
The older brothers took the sword and rode out to fight the troll. They fought well. Until the credits ran out.
Lexical search can't handle an ambiguous world
I tried to make Photon work. Rebuilt indexes, added alternative names, tuned geographic biasing. It helped a little. Got from maybe 65% recall to 72%.
But that 28% failure rate wasn't solvable, if my AI agent missed the lexical match it didn't know if it was a real place or not.
The problem is vocabulary mismatch. My agent might ask for "Refugio Biella" (Spanish spelling). OSM has it as "Rifugio Biella" (Italian). Photon returned refugios in Spain because "refugio" matches Spanish huts better than "rifugio" matches the Italian one. The world doesn't spell itself consistently. Different languages, different transliterations, different local names for the same place. Lexical search demands exactness. Reality is ambiguous.
Brute force wasn't going to work. I needed a different angle.
Open data is enough
Wilson Lin built a search engine from scratch using neural embeddings. Not by out-resourcing Google, but by finding an alternative approach. Embeddings understand that "refugio" and "rifugio" and "mountain hut" are the same concept, even when the spellings don't match.
That was the glimpse. Someone else had crossed the field. Maybe I could too.
The trick was turning OSM's chaos into something embeddings could work with. Raw OSM data is tagged for database queries—amenity=alpine_hut, operator=SAC—not semantic search. So I had an LLM synthesize everything about each place into natural language: tags, alternative names, Wikipedia articles, website content. "Rifugio Biella" becomes "an alpine refuge in the Sesto Dolomites, also known as Seekofelhütte, offering overnight accommodation for hikers"
Now semantic search works. The embedding understands what the place is, not just what it's tagged. I combined this with approach with a lexical search. This ensemble search hits 96.6% recall, with better latency than Google Places.
| Recall | Latency | QPS | Cost (at scale) | |
|---|---|---|---|---|
| Google Places | 98% | ~100ms | unlimited | $100M+/year |
| Photon | 72% | ~30ms | ~1000 | ~$70/month |
| wplaces | 96.6% | ~40ms | ~200 | ~$190/month |
*Photon and wplaces QPS are per node.
The bread and cheese became the weapon.
The older brothers are gone
One of the VC-backed travel startups I watched hit their two-year mark and the credits ran out. They tried to escape Google's ecosystem. They couldn't. The product crumbled. They've pivoted away from travel planning entirely.
The others are still operating. Maybe they'll negotiate a sweetheart deal with Google. But even if they do, they're locked into Google's tooling. You can't differentiate yourself. You can't build anything Google hasn't sanctioned. The sword gets you into the fight. It doesn't let you win on your own terms.
I celebrated for a moment. Then got scared. It validated the need for what I'd built. But it also proved the danger. They had everything—funding, credits, the sword. And the troll still ate them.
Now it's my turn to fight the troll
The VC backing and cloud credits didn't fix travel bookings. Now it's my turn to see what I can do.
Travel bookings is a rent-seeking industry. Every site you click wants to convince you to let them take a 20% tax on whatever you book. Companies like Delta have introduced AI pricing algorithms that reprice flights when you're desperate. These things don't just cost travelers money. They take you away from the point of why you traveled.
You want to go somewhere and feel like a welcome guest. To pay the fair local price for your food and accommodation. The financial parts should feel like a transaction, not extortion.
Right now Wanderfugl is in private beta, but people are making real big trip plans with it. People are going on honeymoons, tacking on cultural trips to business travel. It's exciting to see people using this new way to navigate the world.
Booking is the next challenge. I want to help people pay the local price directly, not route everything through another middleman.
Something better than Google
I can do a lot better than 96.6% recall. The remaining failures are mostly data enrichment gaps—an alpine hut tagged only as amenity=restaurant that doesn't get "mountain hut" in its embedding. Fixable. There's no reason I can't get past what Google has.
What excites me is what AI agents can do for OSM data quality. The obviously wrong things—a website link that 404s, a restaurant that closed years ago, a misspelled name—haven't been fixed because OSM doesn't have money to pay someone to check. But these are simple AI agent actions. The data doesn't need to be rebuilt. It needs to be tended.
We need a community-run, excellent source of geodata. Not locked behind corporate licensing. Not controlled by a company that can change the terms whenever it wants. I think we can build something better than what Google has. We just need open data, open models, and a little cunning and we will get there.
If you're building AI agents that touch the physical world—travel, logistics, local search—and you're either bleeding money on Google or suffering with degraded quality, reach out: me@jonready.com.
Or try wplaces in action at wanderfugl.com.