Every number on this site traces back to a named public source and a documented method. This page is that documentation - what's measured, where it comes from, where it's incomplete, and what's a straight fact versus an estimate.
Every listing comes from a property management company's own AppFolio, Buildium, or equivalent portal - never Zillow, Apartments.com, Realtor.com, or any other aggregator. Coordinates, rent, beds/baths, and availability are read directly off each portal's own listing data, not geocoded or guessed. Parking and laundry status use a labelled field when the manager filled one in (rare - see the on-page notice for the exact current count); otherwise they're read out of the manager's own description text and shown with a dashed outline, with their exact wording available on hover. A rent under a per-bedroom plausibility floor (typos, per-room rates, bait listings) is flagged and hidden by default rather than shown as real.
Station and bus-route geometry comes from each transit agency's own published GTFS feed (LA Metro; the MTA for New York), joined the same way a trip planner would. Walk and drive times are straight-line distance estimates - not routed, no traffic, no timetable - at 4.8 km/h walking and a fixed drive-speed model. They will run a little longer in practice than what's shown. Transit time is the better of a rail-based estimate or a bus-based estimate through the nearest stop, whichever is faster for that pair of points.
This is the part worth reading closely, and it changed twice during development as the method was checked against how real crime-data products actually work - the numbers you see now reflect the corrected version.
Only cities policed by these two agencies get a score at all. Torrance, Pasadena, Glendale, Gardena, Carson, Redondo Beach, Signal Hill, and every other city here without a comparable open data feed show "No data" rather than a guess. (Signal Hill has its own separate police department - it was mistakenly scored against Long Beach's data early on; that's been corrected.)
For each listing: count reported incidents within a 0.8 km radius (about a 10-minute walk, ~2 km²) over the trailing 12 months. Person-crime incidents count double toward the score - a purse-snatching and an aggravated assault aren't the same thing, and treating them as equal wasn't defensible once checked against how the field actually handles it. Then divide by the population living in that same radius (from the Census block data) and rank the result - incidents per 1,000 residents, not a raw count - into four bands relative to every other scored listing here: Safer, Moderate, Caution, Higher incidents.
Why per-capita and not a raw count. A dense area racks up more total incidents than a quiet one simply by having more people and more potential targets present - that's not the same as being more dangerous per resident. Checked this against six of the most commonly-used crime-data products (NeighborhoodScope, CrimeGrade.org, SpotCrime, DoorProfit, AreaVibes, Niche) and every one of them normalizes by population for exactly this reason. This site's primary crime data (the LAPD/LBPD feeds above) is the same kind of primary-source open data those products are themselves built from, at address-level resolution - the fix here was adopting their calculation, not their data.
A listing whose radius has too few residents nearby for a rate to mean anything (under 300 people - a park, an industrial strip, a stretch of coastline) shows "No data" rather than a wildly unstable number.
Where you see a ↓/↑/→ next to a safety band, that's a genuine trailing-12-months-vs-the-12-months-before comparison, currently Long Beach and Signal Hill’s surrounding area only. LAPD's own data isn't used for a trend yet: LAPD switched its records system to NIBRS on March 7, 2024, and the datasets used here show a multi-month reporting ramp (a few hundred incidents/month climbing to a genuine ~17-19k/month) as the switch was backfilled - comparing any two windows that touch that ramp would read as a fake citywide crime spike that's really just paperwork catching up. Long Beach's feed was checked the same way and is stable back through 2023, so its trend is real. A trend only gets a direction once there's at least 8 incidents combined across both windows nearby, and a swing under 15% is called "stable" rather than manufacturing a direction out of ordinary month-to-month noise.
Every Los Angeles listing is compared against a fixed reference point in Palms point, scored with the exact same radius, dataset, weighting, and per-capita method as every listing - not a separately-scaled number. You can point this benchmark at your own address instead from the gear icon next to the Safety Rating button; the incident count for a custom address is estimated from the nearest scored listing within 600m, clearly labelled as an estimate when that's what it is.
Preferred is a definition you set (bedrooms, baths, rent cap, square footage, parking, laundry, AC) via the gear icon - not a fixed rule. The badge on every card and the "Preferred" count in the sidebar both follow whatever you've set, live. Parking/Laundry mentioned filters keep only listings where the manager said anything at all about that topic (a labelled field or descriptive text), dropping total silence. Places of Interest are your own saved points (home, work, family, whatever matters) - drive/walk/transit times to each are estimated the same straight-line way as the transit numbers above, capped at 6 places so the card stays readable.
Listing data refreshes daily. That daily refresh re-scrapes every property manager's own portal and rebuilds the page - it deliberately does not re-run the crime, transit, geometry, or housing-type-classification steps, all of which involve either a live external data pull or a manual research pass; a page that looks freshly updated while quietly serving stale safety data would be worse than one that's honest about only refreshing what it safely can automatically. Those layers get updated by hand, at the pace their underlying sources actually change (crime data monthly-ish, transit projects rarely, housing type essentially never once classified).
No accounts, no tracking, no server. Everything runs as one static file - if you're reading the listings page, your browser already has everything it needs; nothing is sent anywhere as you filter, save, or set Places of Interest (those are stored only in your own browser).