Domi

Hunts for apartments in Mexico City, measures the area and distrusts what looks off

PersonalIn progressNext.jsPythonPub/SubFirestoreCloud RunTerraform

Problem

Every time I hunted for an apartment, I ended up with a Google Sheet ranked by gut feeling.

Listings are scattered across several sites, and what mattered most wasn’t in them: the area’s crime rate, how nice it is, or whether it works with a pet. Domi is my second try, after a CLI from February 2026: it gathers the listings, measures each area with open data and ranks them with the weights you choose.

How it works

  1. Listing siteslistings
  2. Crawlernormalize · dedupe
  3. Agentsjudgment · area · review
  4. Your deckranked by your weights
Cloud Run services connected through Pub/Sub
  1. 01A daily crawler collects listings, honoring robots.txt and one request every 2 to 4 seconds per site.
  2. 02A geo service measures each area with FGJ crime data and DENUE, and the agents flag signals worth checking.
  3. 03The ranking is a dot product between your weights and each listing’s scores.

Decisions

DECISION 01

Tested code does the ranking.

Crawler, deduplication, area indicators, distances and ranking are deterministic, tested code. No model is called per listing to rank.

DECISION 02

Domi never says “fraud”.

Domi shows “signals worth checking” with their evidence. Deciding whether to trust is up to you.

DECISION 03

If a source blocks, it gets switched off.

No paid proxies, no CAPTCHA tricks. Mexico City’s open data portal blocks US IPs, so the area job runs in the Querétaro region and uses direct downloads.

Result

73listings in the first crawlSource: first crawl, Oct 2026
No usage figures yet.When they exist, they’ll show up here with their source.

The backend and web app are deployed on Cloud Run, and the crawler runs every day at 5:00.

MY ROLEPersonal project.Product, agents, data and infrastructure.