real-estate-expert
Expert-level real estate systems, property management, MLS integration, CRM, virtual tours, and market analysis
What this skill does
# Real Estate Expert
Expert guidance for real estate systems, property management, Multiple Listing Service (MLS) integration, customer relationship management, virtual tours, and market analysis.
## Core Concepts
### Real Estate Systems
- Multiple Listing Service (MLS) integration
- Property Management Systems (PMS)
- Customer Relationship Management (CRM)
- Transaction management
- Document management
- Lease management
- Maintenance tracking
### PropTech Solutions
- Virtual tours and 3D walkthroughs
- AI-powered property valuation
- Digital signatures and e-closing
- Smart home integration
- IoT sensors for properties
- Blockchain for title management
- Augmented reality for staging
### Standards and Regulations
- RESO (Real Estate Standards Organization)
- Fair Housing Act compliance
- RESPA (Real Estate Settlement Procedures Act)
- Data privacy (GDPR, CCPA)
- ADA compliance for websites
- NAR Code of Ethics
## Property Listing System
```python
from dataclasses import dataclass
from datetime import datetime
from decimal import Decimal
from typing import List, Optional
from enum import Enum
class PropertyType(Enum):
SINGLE_FAMILY = "single_family"
CONDO = "condo"
TOWNHOUSE = "townhouse"
MULTI_FAMILY = "multi_family"
LAND = "land"
COMMERCIAL = "commercial"
class ListingStatus(Enum):
ACTIVE = "active"
PENDING = "pending"
SOLD = "sold"
WITHDRAWN = "withdrawn"
EXPIRED = "expired"
@dataclass
class Property:
"""Property information"""
property_id: str
mls_number: str
property_type: PropertyType
address: dict
listing_price: Decimal
bedrooms: int
bathrooms: float
square_feet: int
lot_size: float # acres
year_built: int
description: str
features: List[str]
photos: List[str]
status: ListingStatus
listing_date: datetime
listing_agent_id: str
coordinates: tuple # (latitude, longitude)
@dataclass
class ShowingRequest:
"""Property showing request"""
showing_id: str
property_id: str
buyer_agent_id: str
buyer_name: str
requested_date: datetime
duration_minutes: int
status: str # 'pending', 'confirmed', 'cancelled'
notes: str
class PropertyListingSystem:
"""Real estate listing management system"""
def __init__(self):
self.properties = {}
self.showings = []
self.saved_searches = {}
def create_listing(self,
property_data: dict,
agent_id: str) -> Property:
"""Create new property listing"""
property_id = self._generate_property_id()
mls_number = self._generate_mls_number()
property = Property(
property_id=property_id,
mls_number=mls_number,
property_type=PropertyType(property_data['property_type']),
address=property_data['address'],
listing_price=Decimal(str(property_data['price'])),
bedrooms=property_data['bedrooms'],
bathrooms=property_data['bathrooms'],
square_feet=property_data['square_feet'],
lot_size=property_data.get('lot_size', 0),
year_built=property_data['year_built'],
description=property_data['description'],
features=property_data.get('features', []),
photos=property_data.get('photos', []),
status=ListingStatus.ACTIVE,
listing_date=datetime.now(),
listing_agent_id=agent_id,
coordinates=property_data.get('coordinates', (0, 0))
)
self.properties[property_id] = property
# Notify matching saved searches
self._notify_saved_searches(property)
return property
def search_properties(self, criteria: dict) -> List[Property]:
"""Search properties based on criteria"""
results = []
for property in self.properties.values():
if property.status != ListingStatus.ACTIVE:
continue
# Price range
if 'min_price' in criteria:
if property.listing_price < Decimal(str(criteria['min_price'])):
continue
if 'max_price' in criteria:
if property.listing_price > Decimal(str(criteria['max_price'])):
continue
# Bedrooms
if 'min_bedrooms' in criteria:
if property.bedrooms < criteria['min_bedrooms']:
continue
# Bathrooms
if 'min_bathrooms' in criteria:
if property.bathrooms < criteria['min_bathrooms']:
continue
# Square footage
if 'min_sqft' in criteria:
if property.square_feet < criteria['min_sqft']:
continue
# Property type
if 'property_type' in criteria:
if property.property_type.value != criteria['property_type']:
continue
# Location-based search (within radius)
if 'location' in criteria and 'radius_miles' in criteria:
distance = self._calculate_distance(
property.coordinates,
criteria['location']
)
if distance > criteria['radius_miles']:
continue
results.append(property)
# Sort by price or other criteria
if criteria.get('sort_by') == 'price_asc':
results.sort(key=lambda p: p.listing_price)
elif criteria.get('sort_by') == 'price_desc':
results.sort(key=lambda p: p.listing_price, reverse=True)
elif criteria.get('sort_by') == 'newest':
results.sort(key=lambda p: p.listing_date, reverse=True)
return results
def schedule_showing(self,
property_id: str,
buyer_agent_id: str,
buyer_name: str,
requested_date: datetime) -> dict:
"""Schedule property showing"""
property = self.properties.get(property_id)
if not property:
return {'error': 'Property not found'}
if property.status != ListingStatus.ACTIVE:
return {'error': 'Property not available for showings'}
# Check availability
conflicts = self._check_showing_conflicts(property_id, requested_date)
if conflicts:
return {
'error': 'Time slot not available',
'conflicts': conflicts
}
showing = ShowingRequest(
showing_id=self._generate_showing_id(),
property_id=property_id,
buyer_agent_id=buyer_agent_id,
buyer_name=buyer_name,
requested_date=requested_date,
duration_minutes=30,
status='pending',
notes=''
)
self.showings.append(showing)
# Notify listing agent
self._notify_listing_agent(property.listing_agent_id, showing)
return {
'success': True,
'showing_id': showing.showing_id,
'status': 'pending_confirmation'
}
def calculate_price_per_sqft(self, property: Property) -> Decimal:
"""Calculate price per square foot"""
if property.square_feet == 0:
return Decimal('0')
price_per_sqft = property.listing_price / property.square_feet
return price_per_sqft.quantize(Decimal('0.01'))
def generate_cma(self,
subject_property: Property,
radius_miles: float = 1.0) -> dict:
"""Generate Comparative Market Analysis (CMA)"""
# Find comparable properties
comparables = []
for property in self.properties.values():
# Skip the subject property
if property.property_id == subject_property.property_id:
continue
# Similar property typRelated in domains
aerospace-expert
IncludedExpert-level aerospace systems, flight management, maintenance tracking, aviation safety, and aerospace software
automotive-expert
IncludedExpert-level automotive systems, connected vehicles, fleet management, telematics, ADAS, and automotive software
manufacturing-expert
IncludedExpert-level manufacturing systems, Industry 4.0, production optimization, quality control, and smart factory solutions
retail-expert
IncludedExpert-level retail systems, POS, inventory management, e-commerce, customer analytics, and omnichannel retail
insurance-expert
IncludedExpert-level insurance systems, underwriting, claims processing, actuarial analysis, risk assessment, and insurtech solutions
hospitality-expert
IncludedExpert-level hotel management, reservation systems, guest services, revenue management, and hospitality technology