Real Estate Property Monitoring
Monitor real estate markets in real-time to capture price changes, new listings, and market opportunities before your competition. This guide shows you how to build automated property monitoring systems for investment, sales, and market research.
Prerequisites
- Supacrawler API key
- Real estate website URLs to monitor
- Email or webhook endpoint for notifications
Quick example
Monitor a property listing page for price changes and new inventory:
curl -X POST https://api.supacrawler.com/api/v1/watch \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://realty-site.com/austin-condos",
"frequency": "hourly",
"selector": ".property-price, .listing-card",
"notify_email": "[email protected]",
"notification_preference": "changes_only"
}'
Common monitoring scenarios
Price change detection
Monitor specific properties for price reductions or increases:
import requests
# Monitor luxury properties for price changes
luxury_properties = [
"https://luxury-homes.com/beverly-hills/123-mansion-dr",
"https://luxury-homes.com/malibu/456-ocean-view",
"https://luxury-homes.com/hollywood-hills/789-sunset-blvd"
]
for property_url in luxury_properties:
response = requests.post("https://api.supacrawler.com/api/v1/watch",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"url": property_url,
"frequency": "hourly",
"selector": ".price, .listing-price, .property-price",
"notify_email": "[email protected]",
"webhook_url": "https://realestate.com/api/price-alerts",
"include_image": True
}
)
print(f"Monitoring: {property_url}")
New listing alerts
Get notified immediately when new properties are listed:
# Monitor market areas for new inventory
market_areas = [
{
"name": "Downtown Austin",
"url": "https://austin-realty.com/downtown-condos",
"selector": ".new-listing, .just-listed"
},
{
"name": "Miami Beach",
"url": "https://miami-luxury.com/beach-properties",
"selector": ".property-card[data-status='new']"
}
]
for area in market_areas:
requests.post("https://api.supacrawler.com/api/v1/watch",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"url": area["url"],
"frequency": "every_30_minutes", # Fast for new listings
"selector": area["selector"],
"notify_email": f"{area['name'].lower().replace(' ', '-')}@realestate.com",
"notification_preference": "changes_only"
}
)
Market trend monitoring
Track overall market statistics and trends:
# Monitor market overview pages
market_stats = [
{
"market": "Denver Commercial",
"url": "https://denver-commercial.com/market-stats",
"selector": ".market-metrics, .inventory-count, .average-price"
},
{
"market": "Portland Rentals",
"url": "https://portland-rentals.com/market-overview",
"selector": ".rental-rates, .vacancy-rate, .market-trends"
}
]
for market in market_stats:
requests.post("https://api.supacrawler.com/api/v1/watch",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"url": market["url"],
"frequency": "daily",
"selector": market["selector"],
"notify_email": "[email protected]",
"webhook_url": f"https://realestate.com/api/market-data/{market['market']}"
}
)
CSS selectors for real estate sites
Real estate websites frequently update their layouts. Always inspect the target page and test selectors before deploying monitors.
- Name
Property cards
- Type
- .property-card, .listing-item, .home-card
- Description
Main property listing containers
- Name
Price elements
- Type
- .price, .listing-price, .property-price
- Description
Property price displays
- Name
New listings
- Type
- .new-listing, .just-listed, [data-status='new']
- Description
Recently added properties
- Name
Property details
- Type
- .beds, .baths, .sqft, .lot-size
- Description
Key property specifications
- Name
Status indicators
- Type
- .status, .availability, .listing-status
- Description
Sale/rental status displays
Best practices
Monitoring frequency
Choose appropriate frequencies based on market speed and property type:
- Every 15-30 minutes: Hot markets, luxury properties, investment opportunities
- Hourly: Standard residential monitoring, price change detection
- Daily: Market statistics, commercial properties, rental markets
- Weekly: Market trends, comparative analysis, research data
Reliable selectors
- Use stable CSS classes that identify core property information
- Avoid selectors dependent on dynamic content or advertising
- Test selectors across multiple page loads to ensure consistency
- Have backup selectors ready for when sites update their designs
Alert management
- Use different email addresses for different property types or markets
- Set up webhook endpoints for integration with CRM or notification systems
- Enable screenshots to provide visual confirmation of changes
- Filter notifications to avoid alert fatigue from minor updates
Integration examples
CRM integration
Set up property monitoring with automatic CRM lead creation:
import requests
import os
# Step 1: Create property monitoring with webhook
def setup_property_monitoring_with_crm():
"""Setup property monitoring that feeds directly into CRM"""
api_key = os.environ['SUPACRAWLER_API_KEY']
# Monitor high-value properties for your CRM
property_monitors = [
{
"url": "https://luxury-homes.com/beverly-hills-estates",
"market": "Beverly Hills Luxury",
"webhook_url": "https://your-crm.com/api/supacrawler-webhook"
},
{
"url": "https://investment-properties.com/multi-family-deals",
"market": "Investment Properties",
"webhook_url": "https://your-crm.com/api/supacrawler-webhook"
}
]
for monitor_config in property_monitors:
# Create Supacrawler watch job
response = requests.post("https://api.supacrawler.com/api/v1/watch",
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
},
json={
"url": monitor_config["url"],
"frequency": "hourly",
"selector": ".property-card, .new-listing, .price-change",
"notification_preference": "changes_only",
# CRM integration via webhook
"webhook_url": monitor_config["webhook_url"],
"webhook_headers": {
"X-Market": monitor_config["market"],
"X-Source": "property-monitoring",
"Authorization": "Bearer YOUR_CRM_API_KEY"
},
# Include rich data for CRM
"include_image": True,
"include_html": True,
"full_page": False
}
)
result = response.json()
if result.get('success'):
print(f"✅ {monitor_config['market']}: {result['watch_id']}")
else:
print(f"❌ Failed: {result.get('error')}")
# Step 2: CRM webhook handler
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/supacrawler-webhook', methods=['POST'])
def handle_property_alert():
"""Process Supacrawler property alerts into CRM leads"""
data = request.json
# Extract property details from Supacrawler data
property_info = {
'source_url': data.get('url'),
'change_type': data.get('change_type', 'unknown'),
'screenshot_url': data.get('screenshot_url'),
'market': data.get('headers', {}).get('X-Market', 'Unknown'),
'detected_at': data.get('timestamp'),
'changes': data.get('changes', [])
}
# Determine lead priority based on change type
if any('price' in change.lower() for change in property_info['changes']):
priority = 'high'
lead_type = 'price_reduction'
elif any('new' in change.lower() for change in property_info['changes']):
priority = 'urgent'
lead_type = 'new_listing'
else:
priority = 'normal'
lead_type = 'market_update'
# Create CRM lead
crm_lead = {
'source': 'property_monitoring',
'lead_type': lead_type,
'priority': priority,
'property_url': property_info['source_url'],
'market': property_info['market'],
'screenshot_evidence': property_info['screenshot_url'],
'notes': f"Automated alert: {', '.join(property_info['changes'])}",
'follow_up_date': property_info['detected_at']
}
# Send to CRM
crm_response = create_crm_lead(crm_lead)
return jsonify({
'status': 'processed',
'crm_lead_id': crm_response.get('id'),
'priority': priority
})
def create_crm_lead(lead_data):
"""Create lead in CRM system"""
return requests.post('https://your-crm.com/api/leads',
headers={'Authorization': 'Bearer YOUR_CRM_API_KEY'},
json=lead_data
)
# Step 3: Run the setup
setup_property_monitoring_with_crm()
Next steps
- Multi-market monitoring: Scale monitoring across different cities and property types
- Price analysis: Build historical price tracking and trend analysis
- Competitive intelligence: Monitor competitor listings and market activity
- Investment analysis: Automate ROI calculations and investment opportunity scoring
- Client alerts: Create custom client notification systems for specific criteria
Related resources
- Watch API Reference - Complete API documentation
- Webhook Integration - Set up real-time notifications
- CSS Selector Guide - Advanced selector techniques
- Real Estate Examples - More implementation examples