Estate Sale Addresses, Caught Before They Vanish
Grabs the street address of every Houston area estate sale during the short window the listing site shows it.
The Problem
An estate sale usually means a house that somebody used to live in and that now needs a buyer. Listing sites like EstateSales.org publish these sales, but they hide the street address until a day or two before the sale and drop it again once the sale is over. Nobody keeps a running list of which houses have had one. To build that list you have to be on the site, at the right moment, for every sale, or the address is gone.
What It Does
Twice a week it opens the first three pages of Houston area in-person estate sale listings, sorted by end date, within a 100 mile radius. It pulls every individual sale link off those pages, usually 20 to 23. It then opens each sale page, finds the Google Maps link the site embeds once the address is public, and reads the street, city, state and zip straight out of that link. Anything that did not resolve to a Texas address is dropped. Each surviving address is appended to a Google Sheet with the date it was captured and the original listing URL. A small Apps Script on the sheet removes duplicates.
A real estate investor or wholesaler who wants an early signal on houses tied up in an estate, before they hit the market.
Outcome
From late May through mid September 2026 the sheet accumulated 171 addresses across 33 capture days, roughly five per run. Forty nine are in Houston proper, with the rest spread across Spring, Galveston, Cypress, Katy, Sugar Land and other suburbs. No marketing has been run against the list yet. So far it is a data asset, collected and waiting.
Screenshots
How It's Built
Generate Page URLs builds three listing URLs for EstateSales.org filtered to Houston, in-person, sorted by end date, 100 mile radius. Fetch Listing Page pulls each one. Extract TX Sale Links regexes every sale link out of the raw HTML across all three pages, skipping gallery links and the bare state index, and dedupes them in a Set within the run. Fetch Each Sale Page opens every sale with a 15 second timeout. Extract Address pulls the address block and the Google Maps link from the page. Build Full Address ignores the scraped text and instead parses the daddr parameter of the Maps link, splitting it into street, city, two letter state and five digit zip, and stamps the capture date. TX Only Filter keeps rows where state is TX or Texas. Add to Google Sheet appends address, city, state, zip, added and sales url to the leads tab, where a Google Apps Script dedupes the list.
By the numbers
- addresses captured
- 171
- capture period
- 2026-05-24 to 2026-09-11
- distinct capture days
- 33
- addresses per capture day
- 1 to 11, average 5.2
- sale links pulled per run
- 20 to 23
- addresses in Houston proper
- 49 of 171
- listing pages fetched per run
- 3
- search radius
- 100 miles
Key Decisions
Run Wednesday and Friday rather than daily.
Most sales land on the back end of the week, around the weekend, so a Friday run catches those once the address is public. Wednesday picks up the ones that don't. Between the two, every sale should get captured.
Fire at 09:08 in the morning.
Nothing else in the fleet runs at that time, so it gets a clean slot.
Use a 100 mile radius, sort by end date, fetch three pages.
The site is questionable about locations, so the preference is to over-pull into the surrounding areas and trim down in a later step. The goal here was as much data in and around Houston as possible, which is a big area.
Parse the address from the Google Maps link instead of the visible address text.
These sites are old school and squirrely. The Maps link is the one place the address shows up in a consistent, machine readable form.
Dedupe on the sheet side with a Google Apps Script instead of in n8n.
The append has no matching columns, so a sale still listed at the next run lands twice. A simple script on the sheet cleans that up.
Where else this applies
Any site that exposes a valuable field for a limited window and then hides it again fits this shape: a phone number shown only while a listing is live, a court docket that goes behind a login after 48 hours, a price visible only during an auction. The pattern is the same. Poll on a schedule tighter than the window, pull the field from wherever it is most reliably structured, and write it to a ledger you own.