Africa/Casablanca
ProjectsJuly 31, 2026

Daily Property Listing Feed from a Major Online Marketplace

image
The client needed a daily feed of new residential property listings across several districts, enriched with public valuation data, landing directly in a spreadsheet they already used. The source is a large online marketplace with strict anti-bot protections, so this had to be reliable enough to run unattended, every day, without silently losing rows or duplicating them on overlap.
  • Pulls every new listing posted since the last run across multiple districts, with a safety overlap window on the first run so nothing near the boundary gets missed.
  • Enriches each listing with detail-page data and public council valuation fields (capital value, decade built, last sale date).
  • Writes to two places: a durable dataset store as the permanent raw record, and an append-only Google Sheet via a service-account credential, so a spreadsheet failure never costs the raw data.
  • De-duplicates twice: once within each run, and again against everything already in the sheet, so re-runs and overlapping windows never create duplicate rows.
Frozen output schema: property attributes, valuation fields, and listing details, with real listing text and agent contacts redacted
The source site fingerprints and blocks naive HTTP clients, so requests are made through a client that matches a real browser's network fingerprint rather than routing through rotating proxies. On top of that: a concurrency cap, randomized delays between requests, and exponential backoff with jitter on rate-limit responses, so the scraper backs off automatically instead of getting blocked outright. Progress is tracked with a persisted watermark, the timestamp of the last successful run, so each day's run only fetches what's genuinely new rather than re-scraping the full catalog. Built and deployed as an Apify actor: containerized, scheduled to run once a day, with its output schema frozen and versioned so a downstream change to the spreadsheet format is a deliberate decision, not an accident. A hands-off daily pipeline that has been running in production, keeping the client's spreadsheet current without manual exports or a single duplicate row.

Related projects

AI Operations Agent for a Multi-Property Hotel Portfolio

AI Operations Agent for a Multi-Property Hotel Portfolio

Designed and shipped the first live agent of a multi-agent AI operations platform for a hotel management company: self-hosted orchestration, reverse Cloudflare tunnels, full CI/CD, on infrastructure I own end to end.
Automated Daily AI Report, Built for a Non-Technical Owner

Automated Daily AI Report, Built for a Non-Technical Owner

A self-serve daily reporting tool for an Amazon seller: Google Sheets in, an AI-written summary out, delivered by email on a schedule she controls herself. Built end to end on Cloudflare Workers for $5/month.
Kasb: A Desktop Earnings Tracker for a Fellow Freelancer

Kasb: A Desktop Earnings Tracker for a Fellow Freelancer

A local-first desktop app that turns a messy Upwork CSV export into real profit and loss: gross earnings, fees, connects ROI, and client breakdowns, with zero cloud and zero recurring cost.
The Legal Layer: AI Contract Review for a Legal Directory Platform

The Legal Layer: AI Contract Review for a Legal Directory Platform

Backend engineering on a members-only AI tool that explains a contract in plain English before you sign it, live at justisconnection.com/legal-layer.
24/7 AI Bot Platform with SaaS Dashboard and Multi-Bot Workflows

24/7 AI Bot Platform with SaaS Dashboard and Multi-Bot Workflows

Designed and built a full-stack SaaS dashboard and backend in Python to manage a 24/7 AI bot platform. Integrated OpenAI with Google Sheets, WordPress, and custom rewriting tools.