← All ProjectsAutomation & Scraping

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