Inspiration
Every New Yorker has signed a lease and only later found out about the bar downstairs that's loud until 4am, or the heat that fails in January. The city already records all of this in 311 complaints and restaurant health inspections, but renters never check it before signing.
What it does
Apartment Scout is an AI agent that turns NYC open data into honest rental advice:
Reads listing screenshots: paste a StreetEasy screenshot and Mistral Large 4's vision reads the address and unit (it even infers the floor), then runs a full report. Lease Report: key findings with real numbers, the likely cause, questions to ask the landlord, and a Lease Risk score from 1 to 10. Listing Lie Detector: paste a listing's marketing copy and it fact-checks every claim ("quiet," "well-maintained," "great restaurants downstairs") against city data, with ✅/⚠️/❌ verdicts and an overall Honesty Score. Plain-English concerns: "I'm a light sleeper. Is there loud music at night?" runs a semantic search over complaints using Mistral embeddings. Recommendations: "Which buildings on the Lower East Side are quietest?" ranks buildings by noise and deep-dives the top pick.
Example: 190 Orchard St has 200 commercial noise complaints and about 28 loud-music complaints after 10pm, so a listing calling it a "quiet, peaceful block" gets ❌ FALSE and an Honesty Score of 2.5/10.
How we built it
Elasticsearch Serverless: 50,000 NYC 311 complaints (Mar–Oct 2026) and 10,000 restaurant inspections, loaded with Python using keyword, date and geo_point mappings and cleaned addresses. Mistral Embed inside Elastic: a mistral-embed inference endpoint powers a semantic_text field over 8,600+ complaints, enabling meaning-based search combined with exact building filters. Mistral Large 4 inside Elastic: a chat_completion inference endpoint serves as the reasoning model for the agent, including vision for reading listing screenshots. Elastic Agent Builder: six custom ES|QL tools (building complaints, late-night noise between 10pm and 6am, restaurants in the building, Mistral semantic search, zip overview, quietest buildings). The agent chooses and combines them.
Challenges we ran into
311 complaint text is short and bureaucratic ("HEAT/HOT WATER – APARTMENT ONLY"), so semantic search alone was imprecise. Combining it with exact building filters fixed that. The agent also initially reached for generic built-in tools and wrote its own queries; restricting it to our tested custom tools made its answers much more accurate. Finally, buildings with zero complaints don't appear in 311 data at all, so recommendations rank buildings that have an active record, and the agent says so.
Accomplishments that we're proud of
It answers questions a general chatbot can't. A chatbot can say the Lower East Side is loud; Apartment Scout says which building, when, and whether the listing is lying, with every number traceable to real city records. This was also my first hackathon!
What we learned
How to run Mistral models directly inside Elasticsearch through inference endpoints, how to build ES|QL tools for Agent Builder, and that grounding an agent in tested, narrow tools beats letting it improvise queries.
What's next for Apartment Scout
A radius search to catch the bar next door using geo_point, a day-of-week "sleep forecast," and voice questions with Mistral's Voxtral.
Built With
- elastic-agent-builder
- elasticsearch
- esql
- mistral-embed
- mistral-large-4
- mistral-vision
- nyc-open-data
Log in or sign up for Devpost to join the conversation.