Use case overview
You’re a property investor or tenant looking for 3-bedroom flats in Edinburgh with specific requirements. Rather than manually checking multiple letting agents multiple times a day, you’ll create an automated scraper that:- Monitors letting agents’ websites for new properties
- Filters results by your criteria (bedrooms, location, price range)
- Extracts structured data including address, description, pricing, and availability
- Runs on a schedule to catch new listings as soon as they appear
How it works
1
Create the scraping task
Define what data you want to extract and from which website.
2
Execute the task
Run the task with specific criteria to get current listings.
3
Schedule regular polling
Set up automated execution to catch new properties immediately.
Implementation
Step 1: Create the scraping task
First, create a task that can extract property data from a letting agent’s website. We’ll use Southside Management as an example. Let’s define our input schema, so we can filter the results by bedrooms/location/price range, and the output schema to ensure a consistent data structure in the application code.id and a status of not_ready.
Task creation response
Step 2: Wait for task to be ready
Check the task status until it’s ready for use:cURL
Task Ready
/tasks endpoint to be notified when it’s ready:
Step 3: Execute the task with your criteria
Now run the task with your filtering criteria:Property Results
Setting up automated polling
To catch new properties as soon as they’re listed, set up a scheduled system to run your task regularly:Python
Advanced configurations
Multiple letting agents
Create separate tasks for different letting agents and poll them all:Multi-agent polling setup
Multi-agent polling setup
Smart notifications
Integrate with notification services for immediate alerts:Webhook and email notifications
Webhook and email notifications
Best practices
Polling frequency
Poll frequently for competitive markets, but rate limit your requests to avoid being blocked.
Error handling
Implement retry logic with exponential backoff. Log failures and continue polling other letting agents if one fails.
Data storage
Store historical data to track market trends, price changes, and property availability patterns.
Filtering optimization
Start with broader criteria on API calls and shift filtering to your application logic. This reduces API calls while maintaining flexibility.
Troubleshooting
Task creation fails with validation error
Task creation fails with validation error
Cause: Invalid JSON schema in input_schema or output_schemaSolution: Validate your JSON schemas using an online validator before creating the task. Ensure all required fields are properly defined.
Task stays in 'not_ready' state
Task stays in 'not_ready' state
Cause: The website structure is too complex or has anti-bot protectionsSolution: Try simplifying your task description or contact support. Some websites may require special handling.
Empty results returned
Empty results returned
Cause: Your filtering criteria might be too restrictive, or the website has no matching propertiesSolution: Test with broader criteria first, then gradually narrow down. Check the website manually to confirm properties exist.
Inconsistent data formats
Inconsistent data formats
Cause: The website displays data inconsistently across different property listingsSolution: Make your output schema more flexible by making fields optional where appropriate, and handle data cleaning in your application.
Next steps
Once you have basic property polling working:- Add data persistence - Store results in a database to track price changes and availability
- Build a dashboard - Create a web interface to view and manage your property alerts
- Implement ML filtering - Use machine learning to score properties based on your preferences
- Scale to multiple cities - Expand your monitoring to other locations and letting agents
- Add market analytics - Track rental market trends and identify investment opportunities