My rental alert's big feature already existed, so I rebuilt it
It started as 'Rightmove, but faster' until I found Rightmove already sends instant alerts. Now it searches three sites and shows each home once.

If you've rented in London you'll know how it goes. A decent flat appears in the morning, and by the afternoon the agent has more viewings booked than they can fit in and isn't taking any more. Being early matters more than almost anything else you can do.
For a while I've had a personal n8n workflow watching my own search. It checked a couple of sites every 15 minutes and pinged me on Telegram when something new showed up. Friends kept asking if they could have it too, so last week I turned it into a public site, Doorstep, and this is mostly about the bit I got wrong first.
Version one was "Rightmove, but faster"
The first pitch was speed. Rightmove alerts used to be a daily email, so a 15-minute check felt like a real edge, and I built everything around that one promise: the form, the double opt-in, the alert email, the landing page.
Then I sat down to make the comparison table for that landing page, and to get a screenshot I set up a fresh Rightmove alert. They offer instant alerts now, push and email, as soon as a home is listed. My headline feature was something the biggest site in the country already did, for free, and probably had done for a while.
It was a mildly embarrassing evening. But I'd much rather find that out from my own comparison table than from the first person who signed up and wrote back to tell me.
So I asked a different question, which was what a renter still has to do by hand, and once I looked at it properly the answer was obvious. Each portal's alert only covers that portal. Agents list on Rightmove, OnTheMarket and sometimes both, landlords list directly on OpenRent, and to be thorough you need three alerts, three accounts, and the patience to work out that the flat in two different emails is actually the same flat. That's the product: one alert, several sites, and each home shown once.
Three sites, one list
Doorstep now checks Rightmove, OnTheMarket and OpenRent every 15 minutes for each saved search. Every site gets a small adapter that turns a search (area, radius, minimum and maximum rent, bedrooms, move date) into that site's URL format, and turns whatever comes back into one shape:
type Listing = {
source: "rightmove" | "onthemarket" | "openrent";
url: string;
rentPcm: number;
beds: number;
street: string;
postcodeDistrict: string;
agent?: string;
firstSeen: string;
};
I did try more. Zoopla, PrimeLocation and a couple of others sit behind Cloudflare's bot protection and return 403 to a request from a server, and I'm not going to fight that. Gumtree's radius search didn't behave consistently enough to trust, and SpareRoom is mostly rooms, which is a different search altogether. Three sources that work properly are better than six that sometimes do.
The part I enjoyed most was spotting the same home across sites. There's no shared ID between them. The photos are different, the titles are different ("2 bed flat" against "Two bedroom apartment"), and the full address is often hidden until you enquire. What turned out to be stable enough is a fingerprint of three things:
const fingerprint = (l: Listing) =>
[l.beds, l.rentPcm, normaliseStreet(l.street)].join("|");
normaliseStreet lowercases the street, drops house and flat numbers, and expands or strips "Rd", "St", "Ave" and friends so that "Ballards Ln" and "Ballards Lane" come out the same. The same number of beds at the same rent on the same street is almost always the same flat. Occasionally it'll merge two different flats on one street at one price, but that's rare, and when it happens you see one card that links to both, which isn't the end of the world.
Each email then shows a home once, with "via Rightmove · also on OpenRent" underneath, so you can choose where to enquire. Sometimes the landlord-direct listing is the better way in.
The first real test was on 18 October, a 1-mile search around N12. Rightmove on its own had 3 new lets. Across all three sites there were 13 distinct homes, and 2 of those were listed on more than one site. That gap is the whole argument for the thing, and it's what the site leads with now instead of speed.
How it's put together
There's nothing clever in the stack. A Next.js front end serves the site and the signup form, n8n runs the 15-minute schedule, calls the adapters, dedupes and sends the emails, and Postgres on my self-hosted Supabase holds the searches, subscribers and fingerprints already sent. Signing up is double opt-in by email, with no accounts or passwords, and every alert has a one-click stop link.
Each subscriber's state is just the set of fingerprints they've already been sent, and a new listing is anything not in that set. That keeps the logic easy to think about, and it means a restart never sends anyone old homes again.
The disk incident
The first night after launch the box hit 96% disk. The load average had climbed, and Firecrawl (which also runs there) had fallen over because its message queue couldn't write anything.
The culprit was n8n. By default it saves execution data for every successful run, and my older personal workflow had been saving the full HTML of a search results page, around 2 MB, every 15 minutes, for months. The SQLite database had grown past 3 GB. The fix was one setting on the workflow, to stop saving data for successful executions. Failed runs still keep theirs, which is the only time I ever look anyway. Then I vacuumed the database with n8n stopped, and the box calmed down. On a laptop that default would never have mattered. On a small server it eventually catches up with you.
What still stops a proper launch
Two things. The first is email volume. Alerts go out through a Gmail account for now, which caps at roughly 500 messages a day. That's fine for friends and a few dozen people, and nowhere near enough beyond that, so before I share it widely it needs a proper sending domain through something like Resend, with SPF and DKIM set up so the alerts don't end up in spam.
The second is terms of use. Property portals generally don't allow automated access in their terms. Doorstep is gentle about it (one request per search every 15 minutes, no bulk crawling, and every card links straight back to the listing on their site rather than copying it), but I don't think that makes it fine, and if a site asks me to stop, I'll stop. It's a portfolio project and a personal tool first.
If you're renting in north London and want to try it, it's at doorstep.kishankanejiiya.tech. Next on my list is sorting out the sending domain.
First published on my blog. Cover photo: David Smith, CC BY-SA 2.0, via Wikimedia Commons (source).
About the author
- Full stack engineer in London with 5+ years on production web platforms. I lead AI-assisted modernisation at Xanda: React and Go for the UK energy market, a government claims portal, and moving old Java and C++ systems onto the cloud. Outside work I run a small home server behind a Cloudflare Tunnel with a handful of public tools on it: Doorstep (rental alerts across Rightmove, OnTheMarket and OpenRent), SeenSooner (NHS A&E and planned-care waits), GridPulse (live GB grid carbon), Sift (LLM ticket triage that survives model failures) and AI Radar (a news digest written hourly by an n8n workflow). I write here about React and Next.js upgrades, Node, coding with AI agents, and the CVEs I've had to patch. Originals live at blogs.kishankanejiiya.tech.
Comments
Join the discussionNo comments yet. Be the first to comment.




