How to Build an AI Property Listing Description Generator
Generate compelling property listing descriptions using AI.
Jay Banlasan
The AI Systems Guy
An AI property listing description generator for real estate turns raw property data into buyer-ready copy in seconds. I built this for a real estate client who was spending 30 minutes per listing writing descriptions. Now they fill in the property details and get three description variations back instantly.
The key is structured input. Feed the AI property specs, neighborhood highlights, and buyer persona, and the output reads like it was written by a top-producing agent.
What You Need Before Starting
- Python 3.8+
- Anthropic API key
- A spreadsheet or form for property details input
- MLS data or manual property specs
Step 1: Define the Property Input Schema
PROPERTY_TEMPLATE = {
"address": "",
"price": "",
"bedrooms": 0,
"bathrooms": 0,
"sqft": 0,
"lot_size": "",
"year_built": 0,
"property_type": "", # single-family, condo, townhouse
"features": [], # pool, garage, renovated kitchen
"neighborhood": "",
"school_district": "",
"buyer_persona": "", # young family, retiree, investor
}
Step 2: Build the Description Generator
import anthropic
from dotenv import load_dotenv
load_dotenv()
def generate_listing_description(property_data, style="professional"):
client = anthropic.Anthropic()
features_text = ", ".join(property_data.get("features", []))
prompt = f"""Write a property listing description for:
Address: {property_data['address']}
Price: {property_data['price']}
Bedrooms: {property_data['bedrooms']} | Bathrooms: {property_data['bathrooms']}
Square Feet: {property_data['sqft']}
Year Built: {property_data['year_built']}
Type: {property_data['property_type']}
Features: {features_text}
Neighborhood: {property_data['neighborhood']}
School District: {property_data['school_district']}
Target Buyer: {property_data['buyer_persona']}
Style: {style}"""
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system="""You are a top-producing real estate agent writing MLS listing descriptions.
Rules:
- Lead with the strongest selling point
- Paint a picture of the lifestyle, not just the specs
- Include specific details (granite counters, not just "updated kitchen")
- Keep it under 200 words
- No ALL CAPS words
- No exclamation marks
- Match the tone to the target buyer""",
messages=[{"role": "user", "content": prompt}]
)
return response.content[0].text
Step 3: Generate Multiple Variations
def generate_listing_variations(property_data, count=3):
styles = ["professional", "warm and inviting", "concise and data-driven"]
variations = []
for i in range(min(count, len(styles))):
desc = generate_listing_description(property_data, style=styles[i])
variations.append({
"style": styles[i],
"description": desc
})
return variations
Step 4: Process from CSV
import csv
def process_listings_csv(input_file, output_file):
with open(input_file) as f:
reader = csv.DictReader(f)
listings = list(reader)
results = []
for listing in listings:
listing["features"] = listing.get("features", "").split("|")
print(f"Generating for {listing['address']}...")
variations = generate_listing_variations(listing, count=2)
results.append({
"address": listing["address"],
"descriptions": variations
})
with open(output_file, "w") as f:
writer = csv.writer(f)
writer.writerow(["Address", "Style", "Description"])
for r in results:
for v in r["descriptions"]:
writer.writerow([r["address"], v["style"], v["description"]])
print(f"Wrote {len(results)} listings to {output_file}")
Step 5: Run It
if __name__ == "__main__":
sample = {
"address": "123 Oak Street, Austin TX",
"price": "$485,000",
"bedrooms": 3,
"bathrooms": 2,
"sqft": 1850,
"lot_size": "0.25 acres",
"year_built": 2018,
"property_type": "single-family",
"features": ["quartz countertops", "covered patio", "smart thermostat", "two-car garage"],
"neighborhood": "Mueller",
"school_district": "Austin ISD",
"buyer_persona": "young professional couple"
}
variations = generate_listing_variations(sample)
for v in variations:
print(f"\n--- {v['style'].upper()} ---")
print(v["description"])
What to Build Next
Add a compliance checker that scans generated descriptions for Fair Housing violations (terms like "perfect for families" or "walking distance to church") and flags them before publishing.
Related Reading
- AI in Real Estate Operations - how AI transforms real estate workflows
- AI for Content Creation at Scale - scaling content generation
- AI in Property Management - broader property management automation
Want this system built for your business?
Get a free assessment. We will map every system your business needs and show you the ROI.
Get Your Free Assessment