Alto Automation
Client: Skylets
A property management company was spending days manually uploading hundreds of listings. We built a scraper and an automated uploader that turned the whole process into a single command.
The Challenge
Operators were uploading each property listing and its images one-by-one through the Alto web UI. With hundreds of properties across 15+ UK cities, every batch update consumed days of repetitive copy-paste work.
Our Approach
We built two complementary tools that handle the full workflow:
- Selenium-driven scraper that crawls a 4-level hierarchy (cities, properties, rooms, images) with parallel headless browsers. Handles thousands of pages without manual intervention
- Site-agnostic architecture: adding a new accommodation website means writing one config file, not rebuilding the scraper
- Python CLI uploader that reads Excel spreadsheets, validates everything, then automates the full Alto upload workflow end-to-end
- Fuzzy matching to map image folders to spreadsheet entries, catching mismatches before any browser automation runs so bad data never makes it to production
- Incremental JSON persistence: if a run gets interrupted, it picks up where it left off instead of starting over
What It Achieved
- Turned days of manual uploading into a single CLI command. The team now runs batch updates in minutes instead of spending the better part of a week on them
- Scraped and organized thousands of images across multiple accommodation websites into a structured catalog by city, property, and room
- Caught data quality issues (missing images, misnamed folders, duplicate entries) automatically before anything touched the live platform
- Built for extensibility: adding a new source website takes one Python file, not a project
Tech Stack
Python 3.11+SeleniumlxmlopenpyxlPydanticrapidfuzzHeadless Chromiumargparse CLI
Have a process that needs automating?
Let's talk about what's eating up your team's time.
Book a discovery call