AI-assisted data enrichment

Clean data,
on demand.

Messy sources in, data you can build on out. An AI-assisted pipeline verifies, deduplicates, and ranks every record — so what you get back is actually trustworthy.

raw input enriched record
"Café du Coin ?"
no phone · no hours
CLOSED_PERMANENTLY
lat? lng? …188km off
name:Café du Coin
status:operational
rank:0.87
geo:verified · 40m
deduped geo-validated ranked

You bring a source.
You get back records you can trust.

No scraping scripts to babysit, no RevOps team, no pile of half-cleaned CSVs. Point Zonzent at a source and describe the shape you need — the AI-assisted pipeline enriches, verifies, and ranks the rest.

raw source // OSM, Places, your CSV
enrich // fill gaps, cross-check
validate // distance, status, dupes
rank + write // structured, scored, done
Client 01 — live in production

Running today, powering a real app.

Zonzent isn't a demo. Lokozy — a curated city discovery app — is the first product built entirely on the pipeline. Every venue it shows was enriched, validated, and ranked by Zonzent.

lokozy · luxembourg city

Lokozy

A discovery app that helps you find the right place to eat, drink, and go — starting with Luxembourg City. Its entire venue dataset comes out of the Zonzent pipeline: cleaned, deduplicated, geo-verified, and scored.

Lokozy is client #1 — one instance of general-purpose infrastructure, not a bespoke tool. The next city is just a new config file.

Visit lokozy.com
300 +venues
enriched & launch-ready
1km
geo-match rejection threshold
0closed
closed venues shipped to users

How it works

Four stages, one config file.

Each record moves through a fixed pipeline. What changes between projects — city, entity type, output — lives in configuration, not code.

01

Scraper

Pulls raw entities from the source — OpenStreetMap, Places, or a CSV you hand over.

02

Enricher

Fills the gaps — hours, contact, attributes — and cross-checks each field against reality.

03

Places Enricher

Verifies each record against authoritative place data, bounded by a hard geographic rectangle.

04

Writer

Ranks, structures, and writes clean records to your store — deduped and scored.

Why it's trustworthy

The hard parts, handled.

Clean data isn't about pulling more rows. It's about knowing which rows are lying to you. A few decisions that keep the output honest:

01

Distance is the truth, not the name

A venue can match a name 100% and still be 188km away. Matching is validated by geography — a hard bounding box plus a 1km rejection threshold — never by name similarity alone.

02

A closed venue is worse than a missing one

Permanently and temporarily closed records are excluded before they ever reach an end user. Reopenings self-heal on the next run. 0 closed venues shipped.

03

Sources lie ~10% of the time

Open data carries junk — dead listings, wrong categories, out-of-area noise. The pipeline assumes this and filters for it rather than trusting the feed.


Where the AI does the work

Judgment, not just rules.

Some decisions can't be made by a regex. Is "Café du Coin" the same place as "Cafe du Coin (Ville)"? Is a bar tagged restaurant actually a restaurant? Is this listing closed, or just missing hours?

Zonzent puts a language model exactly where that judgment is needed — resolving entities, disambiguating categories, reading status — then hands the verdict back to the pipeline to validate against hard geographic and freshness checks.

Reasoning: Claude · bounded by geo + status rules · never the last word alone.

Pipeline asks
Two candidates for one venue:
· "Café du Coin"
· "Cafe du Coin (Ville)" — 40m away
Same place, or two?
Model reasons
Same entity. Name differs only by accent + branch suffix; 40m is within one building footprint. Merge, keep canonical name.
✓ merged · geo-confirmed 40m · then re-validated by rules

What it's for

Built for messy real-world data.

Anywhere the source is scattered, stale, or half-trustworthy and you need clean structured records to build on.

Location & discovery data

Venues, points of interest, local businesses — enriched, geo-verified, ranked. The dataset behind a discovery app or map.

Live — powering Lokozy

Company & prospect enrichment

A rough list of companies in, structured briefs out — profiles, signals, and context, without a RevOps team to run it.

Near-term

Your own messy dataset

Bring a source that's scattered or stale. Get back deduplicated, verified, confidence-scored records — cleaned to a schema you define.

Let's scope it

Config, not code

A new city is a new file.

City, entity type, bounding box, output collection — all configuration. The pipeline logic never changes. That's what makes the same infrastructure serve restaurants in one city and a completely different dataset in the next.

Point it somewhere new, set the bounds, run it.

# amsterdam.yaml
city: amsterdam
entity_type: restaurant
geo_bounds:
rect: [52.36, 4.85, 52.39, 4.93] max_match_distance_km: 1.0
output: nl/amsterdam/restaurant
# everything else stays the same.

Where this goes

Beyond one app.

The pipeline is general-purpose. Live capability first — everything below is the honest state, not a wishlist.

enrichment core

Clean, ranked location data

The engine running in production today.

Live
next city

Amsterdam & beyond

New config, new bounding box, same pipeline.

In progress
horizon

Prospect & company research

CSV in, enriched company briefs out — research without a RevOps team.

On the roadmap

Tell me your use case.

Most people arrive with a data problem already half-defined. The useful part is often reframing it into the thing actually worth building.

Start a conversation