Inspiration

Real estate agents rarely lose leads only because they miss a call. They lose them because the information collected during the call is incomplete, follow-ups are delayed, and the right property or agent is not identified quickly enough. PropertyCall Agent came from a simple question: what if the work continued automatically after the caller hung up? We wanted to build more than a voice assistant. We wanted an agent that could understand a real conversation and immediately turn it into useful, concrete work for a real estate team.

What it does

PropertyCall Agent answers property inquiries through a natural browser-based voice conversation. It identifies whether the caller wants to buy or rent and collects the important details: preferred location, budget, property type, bedrooms, moving timeline, financing status, viewing availability, and confirmed contact information. After the call, an autonomous Taskmaster workflow:

  • creates a structured lead;
  • searches the fictional property inventory;
  • ranks the best matches;
  • checks available real estate agents;
  • assigns the most suitable agent;
  • creates a follow-up task. The caller’s audio is never stored. The public demo uses fictional listings and agents, and the workflow can be followed live from the web application.

How we built it

We built the live conversation with Gemini 3.1 Flash Live, using bidirectional audio and real-time transcription. The voice runtime prepares the connection before the call starts, manages natural interruptions, distinguishes real speech from background noise, recovers from silence, assembles streaming transcript fragments, and waits for the final sentence to finish before ending the call. When the call is completed, the web service publishes a versioned event to Google Cloud Pub/Sub. A private Cloud Run worker receives that event and starts a bounded Gemini tool-calling loop. The downstream agent can normalize the lead, search listings, inspect available agents, create an assignment, schedule a callback, and verify that the full workflow was completed. We use Gemini 3.7 Flash first, followed by Gemini 3.6 Flash and Gemini 3.5 Flash when a model is temporarily unavailable or its quota is exhausted. A deterministic recovery workflow keeps the application operational if every model is unavailable. The frontend uses React, TypeScript, and Vite. The API is built with Fastify. Firestore stores the sessions and workflow results, Firebase Hosting serves the public application, and Secret Manager protects the permanent credentials.

Challenges we ran into

The hardest challenge was making the voice experience feel natural instead of merely functional. Streaming audio is unpredictable. Callers pause, interrupt the agent, change their answers, or make background noises that can be mistaken for speech. We had to prevent the agent from repeating questions, responding to false interruptions, waiting too long, or cutting off its final sentence. The second challenge was making the post-call agent perform real work. It was not enough to generate a summary. The agent needed to call tools, inspect their results, recover from missing prerequisites, and persist each action safely. We also had to handle duplicated Pub/Sub events, partially completed workflows, model quota limits, session isolation, and public access without exposing API keys.

Accomplishments that we're proud of

We are proud that the complete experience can be tested from a browser without registration or special hardware. The voice agent and the post-call Taskmaster have separate responsibilities: one handles the human conversation, while the other performs the operational work. Every important action is persisted and visible in the application. Retried events do not create duplicate leads, assignments, or follow-up tasks. The application also remains useful during temporary model outages. If every Gemini model is unavailable, the recovery workflow still creates the operational results and clearly marks them for review. Most importantly, the project demonstrates a complete transition from conversation to action rather than stopping at a transcript or summary.

What we learned

We learned that a reliable agentic product depends on much more than the model. Prompts are important, but tool design, timing, validation, state management, retries, idempotency, and observability are what make the system dependable. Voice interfaces are especially demanding because users notice every delay, repetition, and awkward interruption. Improving the audio runtime made as much difference as improving the agent instructions. We also learned that the best division of responsibilities is not to make one model do everything. The live model focuses on the caller, while the downstream agent focuses on completing business actions.

What's next for PropertyCall Agent

The next step is to connect PropertyCall Agent to real listing feeds, calendars, and real estate CRMs. We also want to add:

  • automatic viewing appointments;
  • SMS and email confirmations;
  • multilingual conversations;
  • configurable routing rules for each agency;
  • agent availability calendars;
  • lead scoring and follow-up priorities;
  • analytics for response time, lead completeness, and conversions. The long-term goal is to make PropertyCall Agent a dependable front desk and operations assistant for real estate teams not just during the call, but throughout the entire lead journey.

Built With

Share this project:

Updates

Submission history