Inspiration
Renting in an Indian city is fought over the phone. Adverts go stale within days, the rent in the listing isn't the rent on the call, maintenance and brokerage appear only after you've fallen for the flat, and none of it is knowable without ringing a broker, one listing at a time. We wanted the calls made for us, honestly, and the answers written down.
What it does
Khoj reads rental listings from NoBroker, RealEstateIndia, Zolo, Colive and more, and ranks them by what you would really pay each month: rent plus maintenance, not the headline number. Pick a listing, or type a broker's number, and a Call-e voice agent calls the broker. It says it's an AI, asks consent, and asks your questions is it still available, the real rent, the deposit, the brokerage. It switches language if the broker does.
The answers, the full transcript and an honesty report land on the listing. The honesty report compares what was said with what was advertised and quotes every mismatch. When you want to proof the flat exists, Khoj asks the broker for a live video from the property. They open a link on their phone and stream with location on, and a stream from near the address at the agreed time earns the Khoj Verified badge.
How we built it
Frontend: React 19, Vite and styled-components on Vercel, with Firebase Authentication for Google sign-in. Backend: FastAPI on Render, storing data in Firestore Enterprise through its MongoDB-compatible API. Calls: a fixed persona plus the customer's questions become one Call-e task, placed with create and wait. The returned transcript and structured result become answers and an honesty check. Listings: an HTTP page reader, with headless Chromium only as a fallback. Gemini extracts each listing into typed data, and ranking is plain arithmetic, not a model, so the order is reproducible. Live video: LiveKit, with short-lived publish-only tokens for the broker, signed webhooks, and a GPS distance check against the geocoded address. Tests: 271 offline tests, plus 14 live tests that connect to Live Kit and confirm a second participant actually receives decoded video frames.
Challenges we ran into
Portals fight back. 99acres, MagicBricks, Housing and OLX refuse automated readers, so we dropped them rather than show broken sources. NoBroker returns 410 Gone for "Bengaluru" and only answers to "Bangalore", so city names had to be mapped per portal. 512 MB servers. Launching Chromium on the Render instance got the process killed, and the platform then answered with no CORS headers, so every failure looked like a CORS error. We moved to an HTTP-first reader and a memory check before Chromium is ever launched. A retry that caused a storm. A client-side retry turned each failure into three requests, which triggered rate limiting, which looked like more failures. We removed it and moved backoff into the polling. SMS in India. A Twilio trial can't send free text to arbitrary numbers, and Indian SMS needs weeks of DLT registration. The verification link now goes through a one-tap WhatsApp hand-off. What "verified" is allowed to mean. Indoor GPS is often tens of meters out, so a location mismatch is shown with its distance and a human override, never as an automatic failure. The badge claims only "a live video near this address, around the agreed time."
Accomplishments that we're proud of
A voice agent is only useful in the real world if people can trust what it did. That meant more work on restraint than on talking what the agent must never say, when it must not call, and how little a badge is allowed to claim.
What's next for Khoj
The AI disclosure and consent request are enforced in code: the call script refuses to build without them. Every answer on a result traces back to the broker's own words in the transcript. The live video is tested end to end against real LiveKit infrastructure, not only the publishing side. Ranking on total monthly cost exposes exactly the hidden-maintenance trick the portals rely on.
What we learned
A production messaging sender, so verification links go out automatically Using the search's locality for listings added by number, so their live videos can be location-checked Server-side recording of live videos, so there's something to review afterwards More Indian languages Onboarding brokers so verified listings can be published on Khoj directly
Log in or sign up for Devpost to join the conversation.