Appearance
Market Analytics & History
Transparent rental market data to help tenants make informed decisions and landlords price competitively.
Price history
How it works
- Snapshot listing price whenever status changes (draft → active, price edit, etc.)
- Store in
price_historytable: listing_id, price, recorded_at - Display price timeline on listing detail page
- Flag price drops / increases
Data model
| Field | Type | Description |
|---|---|---|
| id | uuid | Primary key |
| listingId | uuid | Foreign key to listings |
| pricePerMonth | integer | Price in cents at this point |
| event | string | What triggered the snapshot (created, published, edited, status_change) |
| recordedAt | timestamp | When the snapshot was taken |
Days on market
- Calculate from
publishedAtto current date (orrentedAt) - Show on listing detail and in search results
- Listings on market >30 days get a subtle indicator
- Average days on market per neighborhood
Neighborhood statistics
Public stats per neighborhood:
- Average rent by bedroom count (studio, 1-bed, 2-bed, 3-bed, 4+)
- Median rent
- Number of active listings
- Average days on market
- Most common amenities
- Pet-friendly percentage
Updated daily or on-demand via background job.
Price trend charts
- Line charts showing rent trends over time
- Filterable by neighborhood, borough, bedroom count
- Comparison mode: overlay two neighborhoods
- Powered by aggregated price_history data
Public stats dashboard
New page at /stats with:
- City-wide overview (total listings, average rent, market activity)
- Borough breakdown table
- Neighborhood leaderboards (cheapest, most expensive, most listed)
- Interactive charts
Historical listing archive
- Rented and archived listings remain visible with a "no longer available" badge
- Helps tenants understand market pricing
- Building profiles show full listing history
- Opt-out for landlords who prefer privacy