Back to works
AI & DataExperiment

Neighbourhood Housing Tracker

An n8n workflow that scrapes housing listings, syncs new and sold records into Airtable, and sends recurring summary and error alerts.

Neighbourhood Housing Tracker cover image

Built an n8n workflow to monitor local housing listings, compare scraped records against Airtable, classify changes, and send summary and error alerts on a recurring schedule.

Context

I built this while selling an apartment and trying to track neighborhood pricing more systematically. The original process was more manual: scrape or copy information, update records, and try to notice what had changed since the last check.

That worked at small scale, but it was not reliable enough for repeated use. I wanted a workflow that could run on a schedule, keep the dataset current, and highlight what actually changed without requiring manual comparison every time.

What the workflow does

On each run, the workflow:

  • scrapes listing data from housing pages
  • extracts structured fields from the scraped content
  • normalizes listing IDs so records can be matched consistently
  • compares scraped listings against existing Airtable records
  • classifies records into new, existing, and sold
  • inserts new records directly into Airtable
  • updates sold records when previously tracked listings disappear from the source set
  • sends a summary email for successful runs
  • sends an error alert if the workflow fails

Why it became more complex than expected

At first, this looked like a straightforward automation upgrade. In practice, the complexity came from reliability and edge cases rather than from the high-level idea.

Scraping introduces inconsistent inputs. Records need to be compared across runs. Missing or mismatched IDs can create duplicate or incorrect states. Once OpenAI extraction was added, token usage also became a design constraint rather than just an implementation detail.

That meant the real work was not only “get the data,” but also:

  • decide how to sort and compare records without missing edge cases
  • make sure information is passed accurately from one node to the next
  • keep API usage cost-conscious when using a personal OpenAI key
  • add rate limits and operational safeguards so the workflow behaves predictably over time

Technical decisions

  • I used o4-mini as a pragmatic model choice because it was accurate enough for the job while keeping token cost under control.
  • I matched records through normalized numeric listing_id values to make comparison logic more stable.
  • I treated sold listings as a comparison problem: if a tracked Airtable record no longer appears in the scraped result set, it is classified and updated accordingly.
  • I kept summary and error notifications separate so normal reporting and failure handling would not interfere with each other.
  • I used Codex during implementation to work through node logic, data handoff, and edge cases faster, while keeping the workflow design decisions intentional.

Outcome

At a glance: n8n workflow canvas
At a glance: n8n workflow canvas

The result is a working internal automation that replaced a more fragile Python and Google Sheets process with a more structured system in n8n. It runs every two days, keeps the dataset current, and saves time on recurring tracking.

Just as importantly, it made the process more inspectable: instead of manually checking what changed, I now have a workflow that explicitly classifies changes and reports on them.

What I learned

This project reinforced that the hard part of automation is often not the first successful run, but making the system reliable enough to trust repeatedly. Scraping, token cost, branching logic, and node-to-node data accuracy all become real product and engineering decisions once a workflow has to keep working over time.

Tools & Methods

Data AnalysisWorkflow DesignAutomationn8nAirtableAPI IntegrationCodexPython

Let's talk

Working on something complex?

Good judgment, real problem, difficult environment — I'd like to hear about it.