Logo
Search
API Docs

Real Estate Lead Qualification: Structured Output Template

Structured Data & Outputs

Real Estate Lead Qualification: Structured Output Template

Overview

This is a production-ready structured-output schema for qualifying real estate leads on a call — contact details, property search criteria, timeline, current situation, and an AI-assessed lead score. Attach it to an assistant the same way described in Structured Outputs (Post-Call Data Extraction). It's the full schema behind the one-line mention on Prebuilt Templates & Example Use Cases.


Full JSON Schema

{
  "name": "Real Estate Lead",
  "type": "ai",
  "description": "Qualify real estate leads and extract property preferences",
  "schema": {
    "type": "object",
    "properties": {
      "contact": {
        "type": "object",
        "properties": {
          "firstName": { "type": "string" },
          "lastName": { "type": "string" },
          "email": { "type": "string", "format": "email" },
          "phone": { "type": "string" },
          "preferredContactMethod": {
            "type": "string",
            "enum": ["phone", "email", "text", "any"]
          },
          "bestTimeToContact": {
            "type": "string",
            "enum": ["morning", "afternoon", "evening", "weekends", "any"]
          }
        },
        "required": ["firstName", "phone"]
      },
      "propertySearch": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": ["buy", "rent", "sell", "invest"]
          },
          "propertyType": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": ["single-family", "condo", "townhouse", "multi-family", "commercial", "land"]
            }
          },
          "locations": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "area": { "type": "string", "description": "Neighborhood, city, or region" },
                "schools": { "type": "boolean", "description": "Important to be near good schools" },
                "commute": { "type": "string", "description": "Commute requirements mentioned" }
              }
            }
          },
          "budget": {
            "type": "object",
            "properties": {
              "min": { "type": "number", "minimum": 0 },
              "max": { "type": "number" },
              "preApproved": { "type": "boolean", "description": "Whether they have mortgage pre-approval" }
            }
          },
          "features": {
            "type": "object",
            "properties": {
              "bedrooms": { "type": "integer", "minimum": 0 },
              "bathrooms": { "type": "number", "minimum": 0 },
              "squareFeet": { "type": "integer", "minimum": 0 },
              "garage": { "type": "boolean" },
              "pool": { "type": "boolean" },
              "yard": { "type": "boolean" },
              "mustHaves": {
                "type": "array",
                "items": { "type": "string" },
                "description": "List of must-have features"
              },
              "dealBreakers": {
                "type": "array",
                "items": { "type": "string" },
                "description": "List of deal-breakers"
              }
            }
          }
        },
        "required": ["type", "propertyType", "budget"]
      },
      "timeline": {
        "type": "object",
        "properties": {
          "urgency": {
            "type": "string",
            "enum": ["immediate", "1-3months", "3-6months", "6-12months", "browsing"]
          },
          "moveInDate": { "type": "string", "format": "date", "description": "Target move-in date if mentioned" },
          "reason": { "type": "string", "description": "Reason for moving/buying" }
        }
      },
      "currentSituation": {
        "type": "object",
        "properties": {
          "currentlyOwns": { "type": "boolean", "description": "Whether they currently own property" },
          "needToSell": { "type": "boolean", "description": "Need to sell before buying" },
          "firstTimeBuyer": { "type": "boolean" }
        }
      },
      "leadScore": {
        "type": "object",
        "properties": {
          "motivation": {
            "type": "string",
            "enum": ["high", "medium", "low"],
            "description": "Buyer/seller motivation level"
          },
          "qualified": { "type": "boolean", "description": "Whether lead seems qualified" },
          "followUpPriority": {
            "type": "string",
            "enum": ["hot", "warm", "cold"],
            "description": "Follow-up priority"
          }
        }
      }
    },
    "required": ["contact", "propertySearch", "timeline"]
  }
}

Required Fields by Level

SectionRequired FieldsPurpose
Top levelcontact, propertySearch, timelineEvery extraction must include these three sections.
contactfirstName, phoneMinimum viable lead contact info.
propertySearchtype, propertyType, budgetWhat they're looking for and roughly what they can spend.
timeline(none required)Urgency, move-in date, and reason for moving.
currentSituation(none required)Ownership status and buyer profile.
leadScore(none required)AI-assessed motivation and follow-up priority.

Key Design Highlights

  • The leadScore section lets the AI auto-assess motivation and assign a hot/warm/cold follow-up priority directly from the conversation, without a separate scoring step.
  • mustHaves and dealBreakers are free-form string arrays, so the schema doesn't need to anticipate every feature a buyer might mention.
  • propertySearch.budget.preApproved is a simple boolean that lets you quickly filter for mortgage-ready buyers when triaging leads.