01The constraint
The hard part wasn't finding listings. It was evaluating them. Listing photos never show what actually ruins an apartment: a building with an open bed-bug history, a bedroom that faces the Brooklyn-Queens Expressway, a "short walk" to the train that's really fourteen minutes. Most of that is knowable, since it sits in New York City's open data, but checking it meant the same routine on every listing: rats and roaches, what tenants report, distance to the BQE, the block itself, the subway walk. A stack of browser tabs, every time.
That's fifteen-plus minutes per apartment, in a market where good places go in a day or two, split between two people in two states. My partner was on the ground doing the tours; I was halfway across the country with an hour here and there. I needed a way to do real work on the search from a distance, and for both of us to see the same picture.
Before: rats & pests · tenant reports · BQE · the block · subway walk · gut call
Fifteen minutes a listing became three. Across a week, that's hours of research cut to a few minutes a day, so our time goes to what matters: contacting agents and building relationships for the places we want.
02The system
So instead of grinding through it, I looked at how the work actually happened. It splits cleanly in two. The repeatable part (screening, scoring, sorting) can run without either of us. The judgment calls (is this worth a tour? did it feel right in person?) need a human, and need to be shared. Scout automates the first part and makes the second part fast.
Twice a day a scheduled scan pulls in new listings and runs every check we used to run by hand:
- Rats, roaches & bed bugs. City rodent inspections, housing-code violations (roaches, mice, mold, hazardous conditions) and the landlord's own bed-bug filings, with rules for what counts as a real problem versus a passing note.
- What tenants report. Two years of 311 complaints at the building.
- The BQE. Straight-line distance to the expressway. Under 200 meters fails outright; up to 320 is flagged.
- The block. A neighborhood grade we built ourselves (more on that below).
- The subway. Walking time to every nearby station, not just the closest one.
All of it lands on one card per apartment. That card is the whole decision surface: if something doesn't help us say yes or no, it isn't on there.

03Our own neighborhood grade
Off-the-shelf walkability scores answer a generic question. Ours was narrower: is this block as good as the blocks we're competing for? So Scout grades every address on nine factors, each built from public data: subway access, safety (NYPD complaint reports nearby), groceries (licensed food stores within a 10-minute walk), restaurants, quiet (311 noise complaints), parks, nightlife, biking (Citi Bike docks and protected lanes) and culture.
- Subway18%
- Safety14%
- Groceries12%
- Restaurants12%
- Quiet10%
- Parks10%
- Nightlife10%
- Biking8%
- Culture6%
How much each factor counts. The grade sits next to the score; it doesn't feed into it.
The interesting part is the curve. Each factor becomes a percentile against a reference sample of about 180 random apartment buildings. The first version sampled all of Brooklyn, and everything we looked at came out an A. Re-sampling only the 13 zip codes renters actually fight over made the letters mean something. Now an A+ is the top 3% of sought-after Brooklyn, and a genuinely nice block usually lands in the B's. A grade that flatters everything is useless as a filter.
04The Chrome extension
Listings leave out exactly the things we care about most: whether pets are allowed, in-unit laundry, a second workspace, closets, outdoor space, a broker fee. Typing those in by hand would have rebuilt the problem I was trying to remove. So I built a Chrome extension that reads the listing page you're already on and sends those details to Scout, quoting the listing's own wording next to each value so you can check it.
It pairs with a step-through queue in the app. Scout lines up the best-scoring listings that are missing a detail; one click opens the listing, the extension reads it, and saving rescores the listing on the spot. Two rules keep it honest: it only acts when you click, or on a page opened from Scout (it never crawls), and a value someone entered by hand always beats what the extension read.

05A pipeline for a two-city search
Finding a good listing is half the job. Once tours, broker emails and applications start stacking up, things slip: who called back, which one she saw Thursday, whether we applied. That's a sales pipeline, and I've run plenty of those, so I built one. It's what makes the division of labor work: I screen, sort and queue from Colorado; she tours the shortlist and logs what she saw; we both see every stage change live.
Rented or off-market listings drop out on their own, and come back if they're relisted.

New matches arrive by email and phone push (pushes never include an address). "Did we ever hear back from that broker?" is now a glance, not a text thread.
06Our priorities, as numbers
The score isn't a black box. It's our household's actual tradeoffs, written down. Building health outweighs everything. A large outdoor space is worth about two-thirds of a second bedroom, because it doubles as a workspace and a patch of turf for the dog. In-unit laundry is worth roughly $250 a month to us, and laundry in the building about half that.
- Building health27%
- Space18%
- Subway11%
- Outdoor space11%
- Price8%
- Closets8%
- Laundry7%
- Pets5%
- BQE distance5%
How much each part of the score counts. A building with an active infestation lands at the bottom no matter what else it has, and an unresolved red flag caps the score at 7.

One early lesson changed the whole feel of it. At first, an unknown detail scored as the worst possible value, so confirming that an apartment didn't have a workspace didn't move anything. Moving unknowns to the middle of the scale meant every confirmed detail pushes the score the right way, up or down. Small rule, big difference in whether you trust the number.
07Calls worth talking about
One rule set, two copies, proven identical. The scorer lives in TypeScript, and the scan keeps a Python copy so it can still score if the scorer is down. A test fuzzes 20,000 random listings through both and must find zero differences before anything deploys. Getting to zero meant matching Python's rounding and summation quirks down to the last decimal.
Distrust the data where it's wrong. One fourteen-story building showed up as "low-rise" because the city's property records still listed the lot as vacant. Missing or vacant-lot records now say "Unknown" with a note, instead of a confident guess.
Respect the sources. The big listing site is never scraped. Its listings come in through its own alert emails, or get read from a page I already have open.
Shared, but private. Households can share listings, but each one's statuses, notes and details stay its own. Another household's entry shows up as a suggestion to accept, never a silent overwrite.
08The look
If I'm opening this thing every morning, it should be fun. So it's dressed as a Brooklyn block party: Knicks blue and orange on a sun-baked brownstone ground, jersey-trim stripes, sticker-style cards, a big score ring and a street-sign "BLOCK" grade. It's a heavy nod to Do the Right Thing, Spike Lee's five-star masterpiece and the hottest day ever put on film in Brooklyn.

Bungee for display, Figtree for reading. A completely different system from this site — on purpose.
09Results
We've used it every day since the first version. Making the call on a listing went from fifteen-plus minutes to three or less, and the 66 real listings it screened in that first week would have been roughly sixteen hours of tab-juggling at the old pace. Hours neither of us had. Now that time goes where it counts: contacting agents and building relationships for the places we actually want. And we stopped skipping the homework. Every listing gets the full check now, including the ones we'd have dismissed, or fallen for, on photos alone. And I get to pull my weight in a search happening halfway across the country.
10How it was built
About a week, start to live, pair-programming with Claude. I set the product direction, the priorities and every scoring value, used it daily on our real search, and fed what I found back into the next iteration. Claude wrote most of the code and tests to that direction. It started as a scheduled scan feeding a simple dashboard and, inside eight days, became a real stack: a Python scan on scheduled GitHub Actions, a Postgres database with per-household privacy rules, a shared scoring service, a one-page web app on Cloudflare, and the Chrome extension. Roughly 5,500 lines across Python, TypeScript, JavaScript and SQL, all on free, public data.
What's next: a settings page so each household can tune its own rules (today they live in the database), reading floor plans automatically, more broker sites for the extension, and opening the beta up beyond friends.
11Why it's here
Because it's how I work, start to finish. I hit a constraint (no full-time hours for a full-time search), mapped the process instead of grinding through it, and split it into the part a system should own and the part people should. Then I built the system and made it trustworthy: our real priorities as explicit numbers, a neighborhood grade calibrated against the actual competition, data problems handled in the open, a test that proves the scorer agrees with itself, and a shared pipeline so a two-city team never loses the thread. Same instincts I bring to B2B SaaS. This time the customers were two people and a dog.