← All experiments

Finding a furnished rental in Bogotá, judged by Jev

Furnished rentals in Bogotá are scattered across several portals whose filters miss half the facts. I built a map that refreshes every morning and uses Jev to read each listing for what the filters cannot tell you.

  • Tools
  • Maps
  • Automation
  • Data

Updated19 Oct 2026

The problem

Finding a furnished whole apartment in Bogotá for a few months takes days of scrolling. The useful facts (is it really furnished, does the price include the building's admin fee, what lease term the owner asks for) are usually buried in the free-text description, not in the portal's fields.

What was out there

Each portal shows only part of the market, and their filters are unreliable. Ciencuadras's plain search pages ignore the furnished filter. Metrocuadrado's server sends only about the first 50 to 58 results per neighbourhood. On Fincaraíz the minimum contract field was empty on all 368 furnished small units checked, so lease terms appear only in descriptions. Searching for agencies that specialise in furnished flats returned only aggregators and Airbnb pages, none of them usable.

What I built

A map of furnished listings: three portals scraped every morning, plus a sample of Airbnb and a few hand-picked coliving operators that are checked for availability. Each listing can be liked, discarded or swiped, and the choices sync between devices. For portal listings, Jev reads each description and answers typed questions: furnished or not, lease term, whole place or room, whether utilities and admin are included, which of the amounts in the text is the furnished rent, and any red flags. It also scores the photos. A best-match score ranks the listings, and the app can learn a small adjustment from likes and discards once there are enough of them.

Street map of north Bogotá with several hundred pink dots, one per furnished rental listing, concentrated between the eastern hills and Avenida Carrera 30, from about Calle 50 north to Calle 127.
All 918 listings in the verified feed of 19 October 2026, each placed on the street grid from its address or map pin.
Detail card for a two-bedroom furnished apartment in Chicó Norte listed on Fincaraíz at 6.52 million pesos a month, split as rent 5.71M plus admin 0.81M, with three notes read by Jev: offered furnished or unfurnished so confirm the furnished price, furnished price taken from the description, and asks for a 12-month contract.
What Jev read from one listing's free text: which amount is the furnished rent, the admin fee and the lease term.

Equipment

How I built it

  1. Scraped Fincaraíz and Airbnb with scripts, and Ciencuadras with an isolated Playwright headless browser that applies the portal's real furnished filter, then merged them with hand-checked Metrocuadrado and coliving rows.
  2. Placed every listing on the street grid using OpenStreetMap street lines, letting a clear written address win only when the map pin agrees with it.
  3. Sent each new or changed description to Jev, cached by a hash of the text so unchanged listings are never sent twice.
  4. Built the app as a static site with MapLibre, published on GitHub Pages, with a small Cloudflare Worker to sync decisions between devices. Decisions never go into the public repository.
  5. Made the daily job careful: a scraper refuses to save when pagination is incomplete or the count drops sharply, and a portal listing counts as gone only after missing two complete runs (an Airbnb listing never counts as gone just for being absent).
  6. Had Codex and Claude Opus review the code independently and fixed every confirmed finding the same day.

Results

Accuracy test on 60 listings labelled blind by a separate Claude Opus worker, Jev against the old keyword rules (correct answers out of 60):

Question Jev Keyword rules
Furnished 58 52
Lease term 58 56
Utilities included 57 41
Admin fee 59 38
Furnished rent amount 60 58
Admin amount 60 59

Jev also picked the listing's own address correctly in 59 and whole place versus room in 60. The first full text run covered 689 listings with 827,000 tokens, for about US$0.035. The first photo run covered 824 listings with about 5 million tokens, for about US$0.21.

The verified feed on 2026-10-19 held 918 listings: 411 from Airbnb, 403 from Fincaraíz, 76 from Ciencuadras, 8 from Metrocuadrado and 20 from coliving and serviced-apartment operators.

What I learned

The cheap keyword rules did worst on money: they got the admin fee right in 38 of 60 listings and Jev in 59, because the same text often holds the unfurnished price, the furnished price and the fee.

The test has two limits: the gold labels were made by another model, not a person, and the sample was stratified using Jev's own categories.

A green workflow badge does not prove the data is fresh. One scraper failed on the first cloud run while the job still reported success, so I check each source's scrape time and the explicit warning step, and the app warns when a source is stale.

Lab notes

  1. Ciencuadras got daily discovery through an isolated headless browser, and a publishing step now checks the live feed against the committed data. The verified feed held 918 listings.

  2. I fixed all 15 findings of an independent Codex review (GPT-6 Astra), then moved furnished status, lease term, utilities and admin fees from keyword rules to Jev, checked both against 60 blind-labelled listings, and had Jev score up to five photos per listing.

  3. I collected furnished listings from Fincaraíz, Metrocuadrado, Ciencuadras and a sample of Airbnb monthly stays, placed each one on the city's street grid, and built a map app with like, discard and a swipe deck that refreshes on GitHub Actions at 06:00 Bogotá time.

© 2026 Johnattan García-Ruiz Last updated