[object Object]

← back to Rentv

RENTV: persistent deal registry + per-deal change history — TK-10246

a15c8be05a8635e2f4c772e03e54b03969281ada · 2026-08-05 12:54:08 -0700 · Steve Abrams

Steve: keep a list of ALL deals in the rentv backend; every deal it finds is saved
so changes are visible over time. pull-deals.mjs previously OVERWROTE deals.json each
run — deals dropped off when their story rotated out, and field corrections silently
clobbered the old value with no trail.

- scripts/lib/deal-registry.mjs: append-only ledger keyed by deal id; never drops a
  deal; diffs a tracked field set on each pull and appends a created/changed revision
  with per-field from→to. Atomic write.
- pull-deals.mjs: records every parsed deal into the registry on each run.
- server.js: GET /api/deals/registry (all deals ever found + change count, filters)
  and GET /api/deals/:id/history (full change timeline), both adminOnly.
- public/deals-log.html: backend view — sortable/togglable columns, search-all,
  changed-only filter, created date+time, click a row → change-history timeline with
  field diffs. Linked from the backend hub.
- Proven live: first real pull recorded +15 new, 2 changed (Seattle→Tukwila; a null
  location filled to Inland Empire/CA), 45 total deals ever found.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit a15c8be05a8635e2f4c772e03e54b03969281ada
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Aug 5 12:54:08 2026 -0700

    RENTV: persistent deal registry + per-deal change history — TK-10246
    
    Steve: keep a list of ALL deals in the rentv backend; every deal it finds is saved
    so changes are visible over time. pull-deals.mjs previously OVERWROTE deals.json each
    run — deals dropped off when their story rotated out, and field corrections silently
    clobbered the old value with no trail.
    
    - scripts/lib/deal-registry.mjs: append-only ledger keyed by deal id; never drops a
      deal; diffs a tracked field set on each pull and appends a created/changed revision
      with per-field from→to. Atomic write.
    - pull-deals.mjs: records every parsed deal into the registry on each run.
    - server.js: GET /api/deals/registry (all deals ever found + change count, filters)
      and GET /api/deals/:id/history (full change timeline), both adminOnly.
    - public/deals-log.html: backend view — sortable/togglable columns, search-all,
      changed-only filter, created date+time, click a row → change-history timeline with
      field diffs. Linked from the backend hub.
    - Proven live: first real pull recorded +15 new, 2 changed (Seattle→Tukwila; a null
      location filled to Inland Empire/CA), 45 total deals ever found.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 data/deals-registry.json      | 2272 +++++++++++++++++++++++++++++++++++++++++
 public/backend.html           |    1 +
 public/deals-log.html         |  172 ++++
 scripts/lib/deal-registry.mjs |  128 +++
 scripts/pull-deals.mjs        |    9 +-
 server.js                     |   38 +-
 6 files changed, 2618 insertions(+), 2 deletions(-)

diff --git a/data/deals-registry.json b/data/deals-registry.json
new file mode 100644
index 00000000..f1a2a2ef
--- /dev/null
+++ b/data/deals-registry.json
@@ -0,0 +1,2272 @@
+{
+ "updated_at": "2026-08-05T19:53:22.976Z",
+ "total": 45,
+ "deals": {
+  "34086": {
+   "id": "34086",
+   "current": {
+    "id": "34086",
+    "title": "Oak Park Investments and Arise Investments Acquire Westlake Village Warehouse/Office Building in $19 Mil Transaction",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34086",
+    "image": "/img/news/news_20161_5785LinderoCanyonRdWstlkVillageDannySoroudiAriseJune22026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Office",
+    "city": null,
+    "state": null,
+    "amount": 19000000,
+    "amount_label": "$19.0M",
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "Oak Park Investments and Arise Investments, in partnership with Nelnet Real Estate Ventures, have acquired a 98. 1k sf warehouse facility in Westlake Village for $19."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Oak Park Investments and Arise Investments Acquire Westlake Village Warehouse/Office Building in $19 Mil Transaction",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34086",
+      "txn_type": "Sale",
+      "property_type": "Office",
+      "city": null,
+      "state": null,
+      "amount": 19000000,
+      "amount_label": "$19.0M",
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "Oak Park Investments and Arise Investments, in partnership with Nelnet Real Estate Ventures, have acquired a 98. 1k sf warehouse facility in Westlake Village for $19."
+     }
+    }
+   ]
+  },
+  "34169": {
+   "id": "34169",
+   "current": {
+    "id": "34169",
+    "title": "Seattle Area Res Community Refinanced with $82.5 Mil Loan from Mesa West Capital",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34169",
+    "image": "/img/news/news_20233_OlinFieldsEverettWABruceBeckJun242026.jpg",
+    "txn_type": "Financing",
+    "property_type": "Multifamily",
+    "city": "Seattle",
+    "state": "WA",
+    "amount": 82500000,
+    "amount_label": "$82.5M",
+    "size_label": "352 units · 16 acres",
+    "units": 352,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "A Harrison Street Asset Management and Security Properties joint venture has secured a refi loan of $82. 5 mil on Olin Fields, a 352-unit, garden-style apartment community in the Seattle suburb of Everett, WA."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Seattle Area Res Community Refinanced with $82.5 Mil Loan from Mesa West Capital",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34169",
+      "txn_type": "Financing",
+      "property_type": "Multifamily",
+      "city": "Seattle",
+      "state": "WA",
+      "amount": 82500000,
+      "amount_label": "$82.5M",
+      "size_label": "352 units · 16 acres",
+      "units": 352,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "A Harrison Street Asset Management and Security Properties joint venture has secured a refi loan of $82. 5 mil on Olin Fields, a 352-unit, garden-style apartment community in the Seattle suburb of Everett, WA."
+     }
+    }
+   ]
+  },
+  "34171": {
+   "id": "34171",
+   "current": {
+    "id": "34171",
+    "title": "Leading AI Firm Leases 1.1 msf of Space at Luke Field in Glendale, AZ",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34171",
+    "image": "/img/news/news_20236_7733LitchfieldRdGlendaleAZStaceyHershauerJun242026.jpg",
+    "txn_type": "Lease",
+    "property_type": "Industrial",
+    "city": "Glendale",
+    "state": "AZ",
+    "amount": 152000000,
+    "amount_label": "$152.0M",
+    "size_label": "140 acres",
+    "units": null,
+    "sqft": null,
+    "address": "13543 A and 13543 B Northern Ave",
+    "occupancy_pct": 100,
+    "year_built": null,
+    "summary": "There have been two full-building leases to report at Luke Field, a 2. 4 msf development from Lincoln Property Company in Glendale, AZ."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Leading AI Firm Leases 1.1 msf of Space at Luke Field in Glendale, AZ",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34171",
+      "txn_type": "Lease",
+      "property_type": "Industrial",
+      "city": "Glendale",
+      "state": "AZ",
+      "amount": 152000000,
+      "amount_label": "$152.0M",
+      "size_label": "140 acres",
+      "units": null,
+      "sqft": null,
+      "address": "13543 A and 13543 B Northern Ave",
+      "occupancy_pct": 100,
+      "year_built": null,
+      "summary": "There have been two full-building leases to report at Luke Field, a 2. 4 msf development from Lincoln Property Company in Glendale, AZ."
+     }
+    }
+   ]
+  },
+  "34172": {
+   "id": "34172",
+   "current": {
+    "id": "34172",
+    "title": "Haven Housing buys 264-Unit Res Community in Austin Metro Area",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34172",
+    "image": "/img/news/news_20237_15001StrathavenPassPflugervilleTXElliottGolanConnectJun262026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Austin",
+    "state": "TX",
+    "amount": null,
+    "amount_label": null,
+    "size_label": "264 units",
+    "units": 264,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": 2018,
+    "summary": "Haven Housing has acquired Wells Park Apartments, a 264-unit garden-style apartment community in Pflugerville, TX, a growing suburb of Austin.  Haven Housing is the affordable and multifamily housing platform of BH Properties."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Haven Housing buys 264-Unit Res Community in Austin Metro Area",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34172",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Austin",
+      "state": "TX",
+      "amount": null,
+      "amount_label": null,
+      "size_label": "264 units",
+      "units": 264,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": 2018,
+      "summary": "Haven Housing has acquired Wells Park Apartments, a 264-unit garden-style apartment community in Pflugerville, TX, a growing suburb of Austin.  Haven Housing is the affordable and multifamily housing platform of BH Properties."
+     }
+    }
+   ]
+  },
+  "34174": {
+   "id": "34174",
+   "current": {
+    "id": "34174",
+    "title": "MG Properties Acquires Two Multifamily Properties in Gresham, OR in Deals Totaling $60.8 Mil",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34174",
+    "image": "/img/news/news_20239_ParksideApartmentsGreshamORPaulKasebergMGPropJune262026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Gresham",
+    "state": "OR",
+    "amount": 60800000,
+    "amount_label": "$60.8M",
+    "size_label": "337 units · 32 acres",
+    "units": 337,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "San Diego-based MG Properties purchased two multifamily communities totaling 337 units in Gresham, OR in deals worth just over $60 mil.  The acquisitions were of Mountain High Apartments for $18."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "MG Properties Acquires Two Multifamily Properties in Gresham, OR in Deals Totaling $60.8 Mil",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34174",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Gresham",
+      "state": "OR",
+      "amount": 60800000,
+      "amount_label": "$60.8M",
+      "size_label": "337 units · 32 acres",
+      "units": 337,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "San Diego-based MG Properties purchased two multifamily communities totaling 337 units in Gresham, OR in deals worth just over $60 mil.  The acquisitions were of Mountain High Apartments for $18."
+     }
+    }
+   ]
+  },
+  "34177": {
+   "id": "34177",
+   "current": {
+    "id": "34177",
+    "title": "Holland Partner Group Closes $105 Mil Bay Area Res Buy",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34177",
+    "image": "/img/news/news_20242_1432WestSanCarlosSt.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "San Jose",
+    "state": "CA",
+    "amount": 105000000,
+    "amount_label": "$105.0M",
+    "size_label": "218 units",
+    "units": 218,
+    "sqft": null,
+    "address": "1432 West San Carlos St",
+    "occupancy_pct": null,
+    "year_built": 2015,
+    "summary": "In a significant NoCal res trade, Holland Partner Group has purchased Meridian at Midtown, a 218-unit luxury apartment complex in San Jose.  The asset was sold by Essex Property Trust in a deal valued at around $105 mil ($482k/unit)."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Holland Partner Group Closes $105 Mil Bay Area Res Buy",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34177",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "San Jose",
+      "state": "CA",
+      "amount": 105000000,
+      "amount_label": "$105.0M",
+      "size_label": "218 units",
+      "units": 218,
+      "sqft": null,
+      "address": "1432 West San Carlos St",
+      "occupancy_pct": null,
+      "year_built": 2015,
+      "summary": "In a significant NoCal res trade, Holland Partner Group has purchased Meridian at Midtown, a 218-unit luxury apartment complex in San Jose.  The asset was sold by Essex Property Trust in a deal valued at around $105 mil ($482k/unit)."
+     }
+    }
+   ]
+  },
+  "34180": {
+   "id": "34180",
+   "current": {
+    "id": "34180",
+    "title": "Kennedy Wilson and Jamison Form Partnership to Develop 4,000 Units of Affordable Housing in Los Angeles",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34180",
+    "image": "/img/news/news_20244_350SHopeBruceBeckJune302026.jpg",
+    "txn_type": "Development",
+    "property_type": "Office",
+    "city": "Los Angeles",
+    "state": "CA",
+    "amount": null,
+    "amount_label": null,
+    "size_label": "4,000 units",
+    "units": 4000,
+    "sqft": null,
+    "address": "350 S. Figueroa St",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "Kennedy Wilson and L. A."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Kennedy Wilson and Jamison Form Partnership to Develop 4,000 Units of Affordable Housing in Los Angeles",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34180",
+      "txn_type": "Development",
+      "property_type": "Office",
+      "city": "Los Angeles",
+      "state": "CA",
+      "amount": null,
+      "amount_label": null,
+      "size_label": "4,000 units",
+      "units": 4000,
+      "sqft": null,
+      "address": "350 S. Figueroa St",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "Kennedy Wilson and L. A."
+     }
+    }
+   ]
+  },
+  "34181": {
+   "id": "34181",
+   "current": {
+    "id": "34181",
+    "title": "Redwood West and Panattoni Buy The Pike Destination Center in Long Beach",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34181",
+    "image": "/img/news/news_20245_95SPineAveLongBeachJessicaSpauldingJun302026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Retail",
+    "city": "Long Beach",
+    "state": "CA",
+    "amount": 20000000,
+    "amount_label": "$20.0M",
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": "95 S. Pine Ave",
+    "occupancy_pct": 91,
+    "year_built": 2003,
+    "summary": "Redwood West, in partnership with Panattoni, has acquired The Pike, a 394. 6k sf waterfront retail, dining, and entertainment lifestyle center in Long Beach."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Redwood West and Panattoni Buy The Pike Destination Center in Long Beach",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34181",
+      "txn_type": "Sale",
+      "property_type": "Retail",
+      "city": "Long Beach",
+      "state": "CA",
+      "amount": 20000000,
+      "amount_label": "$20.0M",
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": "95 S. Pine Ave",
+      "occupancy_pct": 91,
+      "year_built": 2003,
+      "summary": "Redwood West, in partnership with Panattoni, has acquired The Pike, a 394. 6k sf waterfront retail, dining, and entertainment lifestyle center in Long Beach."
+     }
+    }
+   ]
+  },
+  "34186": {
+   "id": "34186",
+   "current": {
+    "id": "34186",
+    "title": "Santa Clara Industrial Property Trades for $25.75 Mil",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34186",
+    "image": "/img/news/news_20250_651MartinAveSClaraGraceLewisJLLJul12026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Industrial",
+    "city": "Santa Clara",
+    "state": "CA",
+    "amount": 25750000,
+    "amount_label": "$25.8M",
+    "size_label": "7.17 acres",
+    "units": null,
+    "sqft": null,
+    "address": "651 Martin Ave",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "In a Bay Area development purchase, Lift Partners acquired a 7. 17-acre infill site in Santa Clara for $25."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Santa Clara Industrial Property Trades for $25.75 Mil",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34186",
+      "txn_type": "Sale",
+      "property_type": "Industrial",
+      "city": "Santa Clara",
+      "state": "CA",
+      "amount": 25750000,
+      "amount_label": "$25.8M",
+      "size_label": "7.17 acres",
+      "units": null,
+      "sqft": null,
+      "address": "651 Martin Ave",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "In a Bay Area development purchase, Lift Partners acquired a 7. 17-acre infill site in Santa Clara for $25."
+     }
+    }
+   ]
+  },
+  "34188": {
+   "id": "34188",
+   "current": {
+    "id": "34188",
+    "title": "Chino Distribution Facility Leased by Auto Parts Distributor in $42 Mil Deal",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34188",
+    "image": "/img/news/news_20252_16380EuclidAveChinoElisabethManvilleSmartJul22026.jpg",
+    "txn_type": "Lease",
+    "property_type": "Industrial",
+    "city": "Chino",
+    "state": "CA",
+    "amount": 42000000,
+    "amount_label": "$42.0M",
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": "16380 Euclid Ave",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "An auto parts distribution company, believed to be Titanium Plus Auto Parts, has inked a lease for a 522. 3k sf distribution facility in Chino for $42 mil."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Chino Distribution Facility Leased by Auto Parts Distributor in $42 Mil Deal",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34188",
+      "txn_type": "Lease",
+      "property_type": "Industrial",
+      "city": "Chino",
+      "state": "CA",
+      "amount": 42000000,
+      "amount_label": "$42.0M",
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": "16380 Euclid Ave",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "An auto parts distribution company, believed to be Titanium Plus Auto Parts, has inked a lease for a 522. 3k sf distribution facility in Chino for $42 mil."
+     }
+    }
+   ]
+  },
+  "34195": {
+   "id": "34195",
+   "current": {
+    "id": "34195",
+    "title": "Borstein Enterprises Picks Up 282k sf OC Industrial Asset",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34195",
+    "image": "/img/news/news_20256_15339BarrancaPkwyIrvineSavannahDurbinCWJul62026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Industrial",
+    "city": "Irvine",
+    "state": "CA",
+    "amount": null,
+    "amount_label": null,
+    "size_label": "16.2 acres",
+    "units": null,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "Borstein Enterprises has acquired Barranca Business Park, a 13-building industrial business park totaling 282k sf of space on 16. 2 acres of land in Irvine."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Borstein Enterprises Picks Up 282k sf OC Industrial Asset",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34195",
+      "txn_type": "Sale",
+      "property_type": "Industrial",
+      "city": "Irvine",
+      "state": "CA",
+      "amount": null,
+      "amount_label": null,
+      "size_label": "16.2 acres",
+      "units": null,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "Borstein Enterprises has acquired Barranca Business Park, a 13-building industrial business park totaling 282k sf of space on 16. 2 acres of land in Irvine."
+     }
+    }
+   ]
+  },
+  "34196": {
+   "id": "34196",
+   "current": {
+    "id": "34196",
+    "title": "Rubicon Point Partners Spends $53 Mil on Silicon Valley Medical/Office Property",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34196",
+    "image": "",
+    "txn_type": "Sale",
+    "property_type": "Office",
+    "city": "Silicon Valley",
+    "state": "CA",
+    "amount": 53000000,
+    "amount_label": "$53.0M",
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": 93,
+    "year_built": null,
+    "summary": "In a recent Bay Area office trade, Rubicon Point Partners purchased Wolfe Square, a 118k sf Class A asset in Cupertino, for $53 mil ($449/sf).  The two-building, multi-tenant office/medical property is located at 10050 and 10080 N."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Rubicon Point Partners Spends $53 Mil on Silicon Valley Medical/Office Property",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34196",
+      "txn_type": "Sale",
+      "property_type": "Office",
+      "city": "Silicon Valley",
+      "state": "CA",
+      "amount": 53000000,
+      "amount_label": "$53.0M",
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": 93,
+      "year_built": null,
+      "summary": "In a recent Bay Area office trade, Rubicon Point Partners purchased Wolfe Square, a 118k sf Class A asset in Cupertino, for $53 mil ($449/sf).  The two-building, multi-tenant office/medical property is located at 10050 and 10080 N."
+     }
+    }
+   ]
+  },
+  "34199": {
+   "id": "34199",
+   "current": {
+    "id": "34199",
+    "title": "Leasing Assignment for 650k sf San Francisco Office Tower Awarded to CBRE",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34199",
+    "image": "/img/news/news_20259_415NatomaSFranciscoIrineSpivakCBREJun162026.jpg",
+    "txn_type": "Lease",
+    "property_type": "Office",
+    "city": "San Francisco",
+    "state": "CA",
+    "amount": null,
+    "amount_label": null,
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "The Meridian Group and Fenway Capital Advisors have awarded the leasing assignment for 415 Natoma, a 25-story, 650k sf Class A office tower in San Francisco’s SoMa neighborhood, to CBRE.  Delivered in 2022 as the trophy office component of the 5M mixed-use development, 415 Natoma is the newest high-rise office tower in"
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Leasing Assignment for 650k sf San Francisco Office Tower Awarded to CBRE",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34199",
+      "txn_type": "Lease",
+      "property_type": "Office",
+      "city": "San Francisco",
+      "state": "CA",
+      "amount": null,
+      "amount_label": null,
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "The Meridian Group and Fenway Capital Advisors have awarded the leasing assignment for 415 Natoma, a 25-story, 650k sf Class A office tower in San Francisco’s SoMa neighborhood, to CBRE.  Delivered in 2022 as the trophy office component of the 5M mixed-use development, 415 Natoma is the newest high-rise office tower in"
+     }
+    }
+   ]
+  },
+  "34202": {
+   "id": "34202",
+   "current": {
+    "id": "34202",
+    "title": "SummerHill Apartment Communities Breaks Ground on New 251-Unit Bay Area Res Development",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34202",
+    "image": "/img/news/news_20260_11ElcaminoRealSMateoAnneMonaghanJul72026.jpg",
+    "txn_type": "Development",
+    "property_type": "Multifamily",
+    "city": "Bay Area",
+    "state": "CA",
+    "amount": null,
+    "amount_label": null,
+    "size_label": "251 units · 2.2 acres",
+    "units": 251,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "SummerHill Apartment Communities has broken ground on 11 El Camino Real, a new 251-unit multifamily rental community in San Mateo County.  The development, which includes 38 essential affordable homes at various income levels, brings a contemporary, pedestrian-oriented design to a prominent 2."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "SummerHill Apartment Communities Breaks Ground on New 251-Unit Bay Area Res Development",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34202",
+      "txn_type": "Development",
+      "property_type": "Multifamily",
+      "city": "Bay Area",
+      "state": "CA",
+      "amount": null,
+      "amount_label": null,
+      "size_label": "251 units · 2.2 acres",
+      "units": 251,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "SummerHill Apartment Communities has broken ground on 11 El Camino Real, a new 251-unit multifamily rental community in San Mateo County.  The development, which includes 38 essential affordable homes at various income levels, brings a contemporary, pedestrian-oriented design to a prominent 2."
+     }
+    }
+   ]
+  },
+  "34203": {
+   "id": "34203",
+   "current": {
+    "id": "34203",
+    "title": "The Bascom Group Pays Over $53 Mil for OC Res Community",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34203",
+    "image": "/img/news/news_20261_6968CampusDrBuenaParkJerryFinkBascomJul132026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Buena Park",
+    "state": "CA",
+    "amount": 53000000,
+    "amount_label": "$53.0M",
+    "size_label": "183 units · 8.7 acres",
+    "units": 183,
+    "sqft": null,
+    "address": "6968 Campus Dr",
+    "occupancy_pct": null,
+    "year_built": 1985,
+    "summary": "The Bascom Group LLC has acquired Castlewood Park Apartments, a low-density, 183-unit value-add apartment community in Buena Park, for $53. 125 mil, or $290k per unit."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-07-23T04:07:13.798Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "The Bascom Group Pays Over $53 Mil for OC Res Community",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34203",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Buena Park",
+      "state": "CA",
+      "amount": 53000000,
+      "amount_label": "$53.0M",
+      "size_label": "183 units · 8.7 acres",
+      "units": 183,
+      "sqft": null,
+      "address": "6968 Campus Dr",
+      "occupancy_pct": null,
+      "year_built": 1985,
+      "summary": "The Bascom Group LLC has acquired Castlewood Park Apartments, a low-density, 183-unit value-add apartment community in Buena Park, for $53. 125 mil, or $290k per unit."
+     }
+    }
+   ]
+  },
+  "34204": {
+   "id": "34204",
+   "current": {
+    "id": "34204",
+    "title": "Oceanside Res Community Trades for $77.5 Mil",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34204",
+    "image": "/img/news/news_20262_3851SherbourneDrOceansideDANKIRKSEYClaudiaLipmannCBREJul142026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Oceanside",
+    "state": "CA",
+    "amount": 77500000,
+    "amount_label": "$77.5M",
+    "size_label": "240 units · 14.24 acres",
+    "units": 240,
+    "sqft": null,
+    "address": "3851 Sherbourne Dr",
+    "occupancy_pct": null,
+    "year_built": 1975,
+    "summary": "Sunterra, a 240-unit multifamily community in Oceanside, has traded hands in a $77. 5 mil ($323k/unit) transaction."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Oceanside Res Community Trades for $77.5 Mil",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34204",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Oceanside",
+      "state": "CA",
+      "amount": 77500000,
+      "amount_label": "$77.5M",
+      "size_label": "240 units · 14.24 acres",
+      "units": 240,
+      "sqft": null,
+      "address": "3851 Sherbourne Dr",
+      "occupancy_pct": null,
+      "year_built": 1975,
+      "summary": "Sunterra, a 240-unit multifamily community in Oceanside, has traded hands in a $77. 5 mil ($323k/unit) transaction."
+     }
+    }
+   ]
+  },
+  "34208": {
+   "id": "34208",
+   "current": {
+    "id": "34208",
+    "title": "Eagle Partners and The Vistria Group Spend $132 Mil on Garden Grove Mixed-Income Res Community",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34208",
+    "image": "/img/news/news_20267_12091BayportStGardenGroveCOSTARAnnieNoebelCornersCommJul142026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Garden Grove",
+    "state": "CA",
+    "amount": 132000000,
+    "amount_label": "$132.0M",
+    "size_label": "402 units",
+    "units": 402,
+    "sqft": null,
+    "address": "12091 Bayport St",
+    "occupancy_pct": null,
+    "year_built": 1968,
+    "summary": "Eagle Partners and The Vistria Group have purchased Crystal View Apartments, a 402-unit apartment mixed-income workforce housing community located in Garden Grove, for $132. 5 mil, or $329."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Eagle Partners and The Vistria Group Spend $132 Mil on Garden Grove Mixed-Income Res Community",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34208",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Garden Grove",
+      "state": "CA",
+      "amount": 132000000,
+      "amount_label": "$132.0M",
+      "size_label": "402 units",
+      "units": 402,
+      "sqft": null,
+      "address": "12091 Bayport St",
+      "occupancy_pct": null,
+      "year_built": 1968,
+      "summary": "Eagle Partners and The Vistria Group have purchased Crystal View Apartments, a 402-unit apartment mixed-income workforce housing community located in Garden Grove, for $132. 5 mil, or $329."
+     }
+    }
+   ]
+  },
+  "34210": {
+   "id": "34210",
+   "current": {
+    "id": "34210",
+    "title": "BKM Capital Partners Boosts Pac Northwest Holdings with Purchase of 400k sf Industrial Buy in Washington",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34210",
+    "image": "/img/news/news_20270_SouthcenterWestBusinessParkTukwilaWASuleAygorenConnectJul142026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Industrial",
+    "city": "Tukwila",
+    "state": "WA",
+    "amount": 4000000,
+    "amount_label": "$4.0M",
+    "size_label": "21 units · 19 acres",
+    "units": 21,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": 84,
+    "year_built": null,
+    "summary": "BKM Capital Partners has acquired a five-building Metro Seattle industrial portfolio.  The assets, located in the market’s premier South King County industrial corridor, were acquired on behalf of BKM Industrial Value Fund III."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 2,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "BKM Capital Partners Boosts Pac Northwest Holdings with Purchase of 400k sf Industrial Buy in Washington",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34210",
+      "txn_type": "Sale",
+      "property_type": "Industrial",
+      "city": "Seattle",
+      "state": "WA",
+      "amount": 4000000,
+      "amount_label": "$4.0M",
+      "size_label": "21 units · 19 acres",
+      "units": 21,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": 84,
+      "year_built": null,
+      "summary": "BKM Capital Partners has acquired a five-building Metro Seattle industrial portfolio.  The assets, located in the market’s premier South King County industrial corridor, were acquired on behalf of BKM Industrial Value Fund III."
+     }
+    },
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "changed",
+     "changes": [
+      {
+       "field": "city",
+       "from": "Seattle",
+       "to": "Tukwila"
+      }
+     ],
+     "snapshot": {
+      "title": "BKM Capital Partners Boosts Pac Northwest Holdings with Purchase of 400k sf Industrial Buy in Washington",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34210",
+      "txn_type": "Sale",
+      "property_type": "Industrial",
+      "city": "Tukwila",
+      "state": "WA",
+      "amount": 4000000,
+      "amount_label": "$4.0M",
+      "size_label": "21 units · 19 acres",
+      "units": 21,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": 84,
+      "year_built": null,
+      "summary": "BKM Capital Partners has acquired a five-building Metro Seattle industrial portfolio.  The assets, located in the market’s premier South King County industrial corridor, were acquired on behalf of BKM Industrial Value Fund III."
+     }
+    }
+   ]
+  },
+  "34214": {
+   "id": "34214",
+   "current": {
+    "id": "34214",
+    "title": "Intercontinental Real Estate Corporation Closes $69 Mil Retail Buy in Washington",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34214",
+    "image": "/img/news/news_20274_1402LakeTappsPkwySEAuburnWABruceBeckJul152026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Retail",
+    "city": "Auburn",
+    "state": "WA",
+    "amount": 69000000,
+    "amount_label": "$69.0M",
+    "size_label": "13,000 SF · 12.61 acres",
+    "units": null,
+    "sqft": 13000,
+    "address": "1402 Lake Tapps Pkwy",
+    "occupancy_pct": 100,
+    "year_built": 2002,
+    "summary": "Intercontinental Real Estate Corporation has acquired Lakeland Town Center, a 125. 2k sf grocery-anchored retail center located in the Seattle/Tacoma suburb of Auburn, WA, for $69."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Intercontinental Real Estate Corporation Closes $69 Mil Retail Buy in Washington",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34214",
+      "txn_type": "Sale",
+      "property_type": "Retail",
+      "city": "Auburn",
+      "state": "WA",
+      "amount": 69000000,
+      "amount_label": "$69.0M",
+      "size_label": "13,000 SF · 12.61 acres",
+      "units": null,
+      "sqft": 13000,
+      "address": "1402 Lake Tapps Pkwy",
+      "occupancy_pct": 100,
+      "year_built": 2002,
+      "summary": "Intercontinental Real Estate Corporation has acquired Lakeland Town Center, a 125. 2k sf grocery-anchored retail center located in the Seattle/Tacoma suburb of Auburn, WA, for $69."
+     }
+    }
+   ]
+  },
+  "34216": {
+   "id": "34216",
+   "current": {
+    "id": "34216",
+    "title": "Meta Housing Well Underway with 300-Unit Res Community in Woodland Hills",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34216",
+    "image": "/img/news/news_20277_21300WOxnardStWHillsHollyJenvyJul152026.jpg",
+    "txn_type": "Development",
+    "property_type": "Multifamily",
+    "city": "Woodland Hills",
+    "state": "CA",
+    "amount": null,
+    "amount_label": null,
+    "size_label": "300 units · 400 SF",
+    "units": 300,
+    "sqft": 400,
+    "address": "21300 W. Oxnard St",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "Meta Housing, with R. D."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Meta Housing Well Underway with 300-Unit Res Community in Woodland Hills",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34216",
+      "txn_type": "Development",
+      "property_type": "Multifamily",
+      "city": "Woodland Hills",
+      "state": "CA",
+      "amount": null,
+      "amount_label": null,
+      "size_label": "300 units · 400 SF",
+      "units": 300,
+      "sqft": 400,
+      "address": "21300 W. Oxnard St",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "Meta Housing, with R. D."
+     }
+    }
+   ]
+  },
+  "34218": {
+   "id": "34218",
+   "current": {
+    "id": "34218",
+    "title": "Camden Property Trust Buys Gilbert, AZ Res Community in $124 Mil Deal",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34218",
+    "image": "/img/news/news_20278_3150ERayRdGilbertKimHoidalCBREJul132026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Gilbert",
+    "state": "AZ",
+    "amount": 124000000,
+    "amount_label": "$124.0M",
+    "size_label": "320 units",
+    "units": 320,
+    "sqft": null,
+    "address": "3150 E Ray Rd",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "In a major Arizona multifamily trade, Camden Property Trust acquired The Tyler, a 320-unit multifamily community located in the Agritopia master-planned community in Gilbert.  The asset was sold by StreetLights Residential in a deal worth $124."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Camden Property Trust Buys Gilbert, AZ Res Community in $124 Mil Deal",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34218",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Gilbert",
+      "state": "AZ",
+      "amount": 124000000,
+      "amount_label": "$124.0M",
+      "size_label": "320 units",
+      "units": 320,
+      "sqft": null,
+      "address": "3150 E Ray Rd",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "In a major Arizona multifamily trade, Camden Property Trust acquired The Tyler, a 320-unit multifamily community located in the Agritopia master-planned community in Gilbert.  The asset was sold by StreetLights Residential in a deal worth $124."
+     }
+    }
+   ]
+  },
+  "34224": {
+   "id": "34224",
+   "current": {
+    "id": "34224",
+    "title": "Shorenstein Buys 77k sf Bay Area Office Building",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34224",
+    "image": "/img/news/news_20283_550AllertonRedwoodCityNickTrombolaNWMKJul162026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Office",
+    "city": "Bay Area",
+    "state": "CA",
+    "amount": null,
+    "amount_label": null,
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": 81,
+    "year_built": null,
+    "summary": "Shorenstein has closed on a Bay Area office buy, acquiring 550 Allerton, a 76. 6k sf, Class A property in the heart of Downtown Redwood City."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Shorenstein Buys 77k sf Bay Area Office Building",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34224",
+      "txn_type": "Sale",
+      "property_type": "Office",
+      "city": "Bay Area",
+      "state": "CA",
+      "amount": null,
+      "amount_label": null,
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": 81,
+      "year_built": null,
+      "summary": "Shorenstein has closed on a Bay Area office buy, acquiring 550 Allerton, a 76. 6k sf, Class A property in the heart of Downtown Redwood City."
+     }
+    }
+   ]
+  },
+  "34225": {
+   "id": "34225",
+   "current": {
+    "id": "34225",
+    "title": "CentrePoint Properties Spends $30 Mil on Trio of Colorado Retail Assets",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34225",
+    "image": "",
+    "txn_type": "Sale",
+    "property_type": "Retail",
+    "city": "Inland Empire",
+    "state": "CA",
+    "amount": 30000000,
+    "amount_label": "$30.0M",
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "CentrePoint Properties has purchased a three-property Colorado retail portfolio, including Cottonwood Square in Parker, Bristol Pointe in Aurora and Foothill Green in Littleton.  The assets were sold by Western Centers Inc in a $30."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 2,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "CentrePoint Properties Spends $30 Mil on Trio of Colorado Retail Assets",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34225",
+      "txn_type": "Sale",
+      "property_type": "Retail",
+      "city": null,
+      "state": null,
+      "amount": 30000000,
+      "amount_label": "$30.0M",
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "CentrePoint Properties has purchased a three-property Colorado retail portfolio, including Cottonwood Square in Parker, Bristol Pointe in Aurora and Foothill Green in Littleton.  The assets were sold by Western Centers Inc in a $30."
+     }
+    },
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "changed",
+     "changes": [
+      {
+       "field": "city",
+       "from": null,
+       "to": "Inland Empire"
+      },
+      {
+       "field": "state",
+       "from": null,
+       "to": "CA"
+      }
+     ],
+     "snapshot": {
+      "title": "CentrePoint Properties Spends $30 Mil on Trio of Colorado Retail Assets",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34225",
+      "txn_type": "Sale",
+      "property_type": "Retail",
+      "city": "Inland Empire",
+      "state": "CA",
+      "amount": 30000000,
+      "amount_label": "$30.0M",
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "CentrePoint Properties has purchased a three-property Colorado retail portfolio, including Cottonwood Square in Parker, Bristol Pointe in Aurora and Foothill Green in Littleton.  The assets were sold by Western Centers Inc in a $30."
+     }
+    }
+   ]
+  },
+  "34226": {
+   "id": "34226",
+   "current": {
+    "id": "34226",
+    "title": "Carson Distribution Facility Acquired by WareSpace in a $23 Mil Deal",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34226",
+    "image": "/img/news/news_20285_860SandhillAveCarsonElisabethManvilleSmartJul162026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Industrial",
+    "city": "Carson",
+    "state": "CA",
+    "amount": 23000000,
+    "amount_label": "$23.0M",
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": "860 Sandhill Ave",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "A 90. 5k sf, industrial distribution facility in the city of Carson traded hands in a $23 mil ($254/sf) transaction."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Carson Distribution Facility Acquired by WareSpace in a $23 Mil Deal",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34226",
+      "txn_type": "Sale",
+      "property_type": "Industrial",
+      "city": "Carson",
+      "state": "CA",
+      "amount": 23000000,
+      "amount_label": "$23.0M",
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": "860 Sandhill Ave",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "A 90. 5k sf, industrial distribution facility in the city of Carson traded hands in a $23 mil ($254/sf) transaction."
+     }
+    }
+   ]
+  },
+  "34227": {
+   "id": "34227",
+   "current": {
+    "id": "34227",
+    "title": "MG Properties Buys 188-Unit Portland Res Asset",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34227",
+    "image": "/img/news/news_20286_TupeloAlleyPortlandPaulKaseburgMGPropJul162026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Portland",
+    "state": "OR",
+    "amount": null,
+    "amount_label": null,
+    "size_label": "188 units",
+    "units": 188,
+    "sqft": null,
+    "address": "3850 N. Mississippi Ave",
+    "occupancy_pct": null,
+    "year_built": 2009,
+    "summary": "MG Properties has acquired Tupelo Alley, a 188-unit mixed use apartment community in Portland, OR.  Located at 3850 N."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "MG Properties Buys 188-Unit Portland Res Asset",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34227",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Portland",
+      "state": "OR",
+      "amount": null,
+      "amount_label": null,
+      "size_label": "188 units",
+      "units": 188,
+      "sqft": null,
+      "address": "3850 N. Mississippi Ave",
+      "occupancy_pct": null,
+      "year_built": 2009,
+      "summary": "MG Properties has acquired Tupelo Alley, a 188-unit mixed use apartment community in Portland, OR.  Located at 3850 N."
+     }
+    }
+   ]
+  },
+  "34233": {
+   "id": "34233",
+   "current": {
+    "id": "34233",
+    "title": "Tailwind Investment Group Spends $65 Mil on Two Sacramento Res Properties",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34233",
+    "image": "/img/news/news_20291_6633ValleyHiDrSacramentoDavidHulmeTailwindJul182026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Sacramento",
+    "state": "CA",
+    "amount": 65000000,
+    "amount_label": "$65.0M",
+    "size_label": "419 units",
+    "units": 419,
+    "sqft": null,
+    "address": "4350 Galbrath Dr",
+    "occupancy_pct": 94,
+    "year_built": null,
+    "summary": "Tailwind Investment Group has acquired two multifamily properties totaling 419 units in Sacramento for a combined price of $65 mil.  The properties include Bent Tree Apartments (208 units) and California Place Apartments (211 units)."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Tailwind Investment Group Spends $65 Mil on Two Sacramento Res Properties",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34233",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Sacramento",
+      "state": "CA",
+      "amount": 65000000,
+      "amount_label": "$65.0M",
+      "size_label": "419 units",
+      "units": 419,
+      "sqft": null,
+      "address": "4350 Galbrath Dr",
+      "occupancy_pct": 94,
+      "year_built": null,
+      "summary": "Tailwind Investment Group has acquired two multifamily properties totaling 419 units in Sacramento for a combined price of $65 mil.  The properties include Bent Tree Apartments (208 units) and California Place Apartments (211 units)."
+     }
+    }
+   ]
+  },
+  "34235": {
+   "id": "34235",
+   "current": {
+    "id": "34235",
+    "title": "Retail Portfolio in Downtown Long Beach Fetches $30 Mil",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34235",
+    "image": "/img/news/news_20293_MosiacLongBeachAnneMonaghanJul202026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Retail",
+    "city": "Long Beach",
+    "state": "CA",
+    "amount": 30000000,
+    "amount_label": "$30.0M",
+    "size_label": "4.8 acres",
+    "units": null,
+    "sqft": null,
+    "address": "50 East 4th St",
+    "occupancy_pct": 78,
+    "year_built": null,
+    "summary": "Mosaic, a six building, 148. 4k sf retail portfolio spanning multiple city blocks in Downtown Long Beach, traded hands in a recent $30 mil ($202/sf transaction."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Retail Portfolio in Downtown Long Beach Fetches $30 Mil",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34235",
+      "txn_type": "Sale",
+      "property_type": "Retail",
+      "city": "Long Beach",
+      "state": "CA",
+      "amount": 30000000,
+      "amount_label": "$30.0M",
+      "size_label": "4.8 acres",
+      "units": null,
+      "sqft": null,
+      "address": "50 East 4th St",
+      "occupancy_pct": 78,
+      "year_built": null,
+      "summary": "Mosaic, a six building, 148. 4k sf retail portfolio spanning multiple city blocks in Downtown Long Beach, traded hands in a recent $30 mil ($202/sf transaction."
+     }
+    }
+   ]
+  },
+  "34236": {
+   "id": "34236",
+   "current": {
+    "id": "34236",
+    "title": "The Swig Company Obtains Refi on Office High-Rise in San Francisco’s Financial District",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34236",
+    "image": "/img/news/news_20294_220MontgomeryStSFNancyAmaralA2N2Jul162026.jpg",
+    "txn_type": "Financing",
+    "property_type": "Office",
+    "city": "San Francisco",
+    "state": "CA",
+    "amount": 95000000,
+    "amount_label": "$95.0M",
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": "220 Montgomery St",
+    "occupancy_pct": null,
+    "year_built": 1891,
+    "summary": "RENTV. com - Commercial real estate news and property information window."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "The Swig Company Obtains Refi on Office High-Rise in San Francisco’s Financial District",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34236",
+      "txn_type": "Financing",
+      "property_type": "Office",
+      "city": "San Francisco",
+      "state": "CA",
+      "amount": 95000000,
+      "amount_label": "$95.0M",
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": "220 Montgomery St",
+      "occupancy_pct": null,
+      "year_built": 1891,
+      "summary": "RENTV. com - Commercial real estate news and property information window."
+     }
+    }
+   ]
+  },
+  "34238": {
+   "id": "34238",
+   "current": {
+    "id": "34238",
+    "title": "Gilbert, AZ Multifamily Community Refinanced with New Loan for $51.8 Mil",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34238",
+    "image": "/img/news/news_20296_4353EElliotRdGilbertAZDarcieGiacchettoJul212026.jpg",
+    "txn_type": "Financing",
+    "property_type": "Multifamily",
+    "city": "Gilbert",
+    "state": "AZ",
+    "amount": 51800000,
+    "amount_label": "$51.8M",
+    "size_label": "236 units · 986 SF",
+    "units": 236,
+    "sqft": 986,
+    "address": "4353 E. Elliot Rd.",
+    "occupancy_pct": 97,
+    "year_built": 2025,
+    "summary": "A joint venture between Phoenix Capital Management and P. B."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Gilbert, AZ Multifamily Community Refinanced with New Loan for $51.8 Mil",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34238",
+      "txn_type": "Financing",
+      "property_type": "Multifamily",
+      "city": "Gilbert",
+      "state": "AZ",
+      "amount": 51800000,
+      "amount_label": "$51.8M",
+      "size_label": "236 units · 986 SF",
+      "units": 236,
+      "sqft": 986,
+      "address": "4353 E. Elliot Rd.",
+      "occupancy_pct": 97,
+      "year_built": 2025,
+      "summary": "A joint venture between Phoenix Capital Management and P. B."
+     }
+    }
+   ]
+  },
+  "34239": {
+   "id": "34239",
+   "current": {
+    "id": "34239",
+    "title": "Fresno Multifamily Sale Works Out to $177k per Unit",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34239",
+    "image": "/img/news/news_20297_585WestSierraAveFresnoDaveEbelingJul212026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Fresno",
+    "state": "CA",
+    "amount": 177000,
+    "amount_label": "$177,000",
+    "size_label": "248 units · 878 SF",
+    "units": 248,
+    "sqft": 878,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "In a Fresno multifamily trade, Maroa Park Apartments, a 248-unit community, was purchased by a private investor for $44 mil ($177. 4k/unit)."
+   },
+   "first_seen": "2026-07-23T04:07:13.798Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 2,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-07-23T04:07:13.798Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Fresno Multifamily Sale Works Out to $177k per Unit",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34239",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Fresno",
+      "state": "CA",
+      "amount": 177000,
+      "amount_label": "$177,000",
+      "size_label": "248 units · 878 SF",
+      "units": 248,
+      "sqft": 878,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "In a Fresno multifamily trade, Maroa Park Apartments, a 248-unit community, was purchased by a private investor for $44 mil ($177. 4k/unit)."
+     }
+    }
+   ]
+  },
+  "34245": {
+   "id": "34245",
+   "current": {
+    "id": "34245",
+    "title": "Velo3D Leases 289k sf Bay Area Manufacturing Facility",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34245",
+    "image": "/img/news/news_20302_711ChallengerStLivermoreKaylaCastroColliersJul212026.jpg",
+    "txn_type": "Lease",
+    "property_type": "Industrial",
+    "city": "Livermore",
+    "state": "CA",
+    "amount": 55800000,
+    "amount_label": "$55.8M",
+    "size_label": "40 acres",
+    "units": null,
+    "sqft": null,
+    "address": "711 Challenger St",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "Velo3D has leased a 288. 7k sf facility in Livermore, CA in a $55."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Velo3D Leases 289k sf Bay Area Manufacturing Facility",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34245",
+      "txn_type": "Lease",
+      "property_type": "Industrial",
+      "city": "Livermore",
+      "state": "CA",
+      "amount": 55800000,
+      "amount_label": "$55.8M",
+      "size_label": "40 acres",
+      "units": null,
+      "sqft": null,
+      "address": "711 Challenger St",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "Velo3D has leased a 288. 7k sf facility in Livermore, CA in a $55."
+     }
+    }
+   ]
+  },
+  "34248": {
+   "id": "34248",
+   "current": {
+    "id": "34248",
+    "title": "SFF Realty Buys 104k sf Silicon Valley Office/R&D Property",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34248",
+    "image": "/img/news/news_20306_384SantaTrinitaAveSunnyvaleNickTrombolaNWMKJul232026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Office",
+    "city": "Sunnyvale. Located",
+    "state": null,
+    "amount": null,
+    "amount_label": null,
+    "size_label": "26 SF · 4.6 acres",
+    "units": null,
+    "sqft": 26,
+    "address": "384 Santa Trinita Ave",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "SFF Realty recently acquired a four-story, 104. 5k sf, Class A office/R&D building in Sunnyvale."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "SFF Realty Buys 104k sf Silicon Valley Office/R&D Property",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34248",
+      "txn_type": "Sale",
+      "property_type": "Office",
+      "city": "Sunnyvale. Located",
+      "state": null,
+      "amount": null,
+      "amount_label": null,
+      "size_label": "26 SF · 4.6 acres",
+      "units": null,
+      "sqft": 26,
+      "address": "384 Santa Trinita Ave",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "SFF Realty recently acquired a four-story, 104. 5k sf, Class A office/R&D building in Sunnyvale."
+     }
+    }
+   ]
+  },
+  "34251": {
+   "id": "34251",
+   "current": {
+    "id": "34251",
+    "title": "Granite Towers Equity Group Buys 229-Unit Texas Multifamily Asset",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34251",
+    "image": "/img/news/news_20309_2525PrestonRdPlanoKellyMcGarryNWMKJul152026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Office",
+    "city": "Plano",
+    "state": "TX",
+    "amount": null,
+    "amount_label": null,
+    "size_label": "229 units",
+    "units": 229,
+    "sqft": null,
+    "address": "2525 Preston Road",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "Granite Towers Equity Group purchased Hathaway at Willow Bend, a 229-unit multifamily community located at 2525 Preston Road in Plano, TX.  The property was sold by S2 Capital."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Granite Towers Equity Group Buys 229-Unit Texas Multifamily Asset",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34251",
+      "txn_type": "Sale",
+      "property_type": "Office",
+      "city": "Plano",
+      "state": "TX",
+      "amount": null,
+      "amount_label": null,
+      "size_label": "229 units",
+      "units": 229,
+      "sqft": null,
+      "address": "2525 Preston Road",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "Granite Towers Equity Group purchased Hathaway at Willow Bend, a 229-unit multifamily community located at 2525 Preston Road in Plano, TX.  The property was sold by S2 Capital."
+     }
+    }
+   ]
+  },
+  "34255": {
+   "id": "34255",
+   "current": {
+    "id": "34255",
+    "title": "CapRock Partners Signs Tenant at 1.27 msf Facility in Visalia",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34255",
+    "image": "",
+    "txn_type": "Lease",
+    "property_type": "Office",
+    "city": "Inland Empire",
+    "state": "CA",
+    "amount": null,
+    "amount_label": null,
+    "size_label": "6,600 SF · 75 acres",
+    "units": null,
+    "sqft": 6600,
+    "address": "4001 N. Pl",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "Building 1 at CapRock Central Point III, a four-building, 2. 7 msf speculative industrial development in Visalia, has been fully leased to an undisclosed global corporate tenant."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "CapRock Partners Signs Tenant at 1.27 msf Facility in Visalia",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34255",
+      "txn_type": "Lease",
+      "property_type": "Office",
+      "city": "Inland Empire",
+      "state": "CA",
+      "amount": null,
+      "amount_label": null,
+      "size_label": "6,600 SF · 75 acres",
+      "units": null,
+      "sqft": 6600,
+      "address": "4001 N. Pl",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "Building 1 at CapRock Central Point III, a four-building, 2. 7 msf speculative industrial development in Visalia, has been fully leased to an undisclosed global corporate tenant."
+     }
+    }
+   ]
+  },
+  "34256": {
+   "id": "34256",
+   "current": {
+    "id": "34256",
+    "title": "Washington Industrial Facility Sells in $174 Mil Transaction",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34256",
+    "image": "/img/news/news_20313_6920192ndStreetEFredericksonWASavannahDurbanCWJul272026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Industrial",
+    "city": "Frederickson",
+    "state": "WA",
+    "amount": 174000000,
+    "amount_label": "$174.0M",
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": 2024,
+    "summary": "A 782. 8k sf industrial facility in Frederickson, WA traded hands in a recent $174 mil ($222/sf) transaction."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Washington Industrial Facility Sells in $174 Mil Transaction",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34256",
+      "txn_type": "Sale",
+      "property_type": "Industrial",
+      "city": "Frederickson",
+      "state": "WA",
+      "amount": 174000000,
+      "amount_label": "$174.0M",
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": 2024,
+      "summary": "A 782. 8k sf industrial facility in Frederickson, WA traded hands in a recent $174 mil ($222/sf) transaction."
+     }
+    }
+   ]
+  },
+  "34260": {
+   "id": "34260",
+   "current": {
+    "id": "34260",
+    "title": "Oxnard Independent Living Facility Lands New Owner",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34260",
+    "image": "/img/news/news_20318_ClearwateratRiverparkOxnardKristenMurphyJLLJul282026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Retail",
+    "city": "Inland Empire",
+    "state": "CA",
+    "amount": null,
+    "amount_label": null,
+    "size_label": "136 units · 809 SF · 3.8 acres",
+    "units": 136,
+    "sqft": 809,
+    "address": "750 Clyde River Pl",
+    "occupancy_pct": null,
+    "year_built": 2018,
+    "summary": "Clearwater at Riverpark, a 136-unit Class A independent living community in Oxnard, was acquired by an unnamed S&P 500 company focused on senior housing.  Built in 2018 within the master-planned Riverpark development, Clearwater at Riverpark is located at 750 Clyde River Place."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Oxnard Independent Living Facility Lands New Owner",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34260",
+      "txn_type": "Sale",
+      "property_type": "Retail",
+      "city": "Inland Empire",
+      "state": "CA",
+      "amount": null,
+      "amount_label": null,
+      "size_label": "136 units · 809 SF · 3.8 acres",
+      "units": 136,
+      "sqft": 809,
+      "address": "750 Clyde River Pl",
+      "occupancy_pct": null,
+      "year_built": 2018,
+      "summary": "Clearwater at Riverpark, a 136-unit Class A independent living community in Oxnard, was acquired by an unnamed S&P 500 company focused on senior housing.  Built in 2018 within the master-planned Riverpark development, Clearwater at Riverpark is located at 750 Clyde River Place."
+     }
+    }
+   ]
+  },
+  "34261": {
+   "id": "34261",
+   "current": {
+    "id": "34261",
+    "title": "The Dinerstein Companies and PGIM Score $81 Mil Refi on Recently Completed Denver Area Multifamily Development",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34261",
+    "image": "/img/news/news_20319_7800EParkviewAveDenverBrandonBeckDBRJul282026.jpg",
+    "txn_type": "Financing",
+    "property_type": "Multifamily",
+    "city": "Denver",
+    "state": "CO",
+    "amount": 81000000,
+    "amount_label": "$81.0M",
+    "size_label": "330 units",
+    "units": 330,
+    "sqft": null,
+    "address": "7800 E Parkview Ave",
+    "occupancy_pct": 85,
+    "year_built": null,
+    "summary": "Atlas Peakview, a recently completed 330-unit multifamily community in the Denver suburb of Centennial, has been refinanced with a new $81 mil short-term, first-mortgage loan provided by Mesa West Capital.  The property, delivered in 2025, is owned by a joint venture between The Dinerstein Companies and PGIM."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "The Dinerstein Companies and PGIM Score $81 Mil Refi on Recently Completed Denver Area Multifamily Development",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34261",
+      "txn_type": "Financing",
+      "property_type": "Multifamily",
+      "city": "Denver",
+      "state": "CO",
+      "amount": 81000000,
+      "amount_label": "$81.0M",
+      "size_label": "330 units",
+      "units": 330,
+      "sqft": null,
+      "address": "7800 E Parkview Ave",
+      "occupancy_pct": 85,
+      "year_built": null,
+      "summary": "Atlas Peakview, a recently completed 330-unit multifamily community in the Denver suburb of Centennial, has been refinanced with a new $81 mil short-term, first-mortgage loan provided by Mesa West Capital.  The property, delivered in 2025, is owned by a joint venture between The Dinerstein Companies and PGIM."
+     }
+    }
+   ]
+  },
+  "34264": {
+   "id": "34264",
+   "current": {
+    "id": "34264",
+    "title": "Santa Monica Multifamily Property Fetches $928k per Unit",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34264",
+    "image": "/img/news/news_20322_901OceanAveSMonicaAnneMonaghanCBREJul282026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Santa Monica",
+    "state": "CA",
+    "amount": 928000,
+    "amount_label": "$928,000",
+    "size_label": "28 units",
+    "units": 28,
+    "sqft": null,
+    "address": "901 Ocean Ave",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "A 28-unit coastal multifamily investment property located along Santa Monica’s Ocean Avenue corridor sold for $23. 46 mil, with the buyer assuming approximately $2."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Santa Monica Multifamily Property Fetches $928k per Unit",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34264",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Santa Monica",
+      "state": "CA",
+      "amount": 928000,
+      "amount_label": "$928,000",
+      "size_label": "28 units",
+      "units": 28,
+      "sqft": null,
+      "address": "901 Ocean Ave",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "A 28-unit coastal multifamily investment property located along Santa Monica’s Ocean Avenue corridor sold for $23. 46 mil, with the buyer assuming approximately $2."
+     }
+    }
+   ]
+  },
+  "34265": {
+   "id": "34265",
+   "current": {
+    "id": "34265",
+    "title": "Longpoint Partners Closes $34.6 Mil AZ Industrial Buy",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34265",
+    "image": "/img/news/news_20323_250EElliotRdChandlerAZSavannahDurbanJul282026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Industrial",
+    "city": "Inland Empire",
+    "state": "CA",
+    "amount": 34600000,
+    "amount_label": "$34.6M",
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": "3191 N. Washington St",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "Longpoint Partners has purchased Eastpoint I & II, a two-building, 136. 6k sf institutional-quality industrial business park in the highly sought-after Chandler submarket of Phoenix."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Longpoint Partners Closes $34.6 Mil AZ Industrial Buy",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34265",
+      "txn_type": "Sale",
+      "property_type": "Industrial",
+      "city": "Inland Empire",
+      "state": "CA",
+      "amount": 34600000,
+      "amount_label": "$34.6M",
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": "3191 N. Washington St",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "Longpoint Partners has purchased Eastpoint I & II, a two-building, 136. 6k sf institutional-quality industrial business park in the highly sought-after Chandler submarket of Phoenix."
+     }
+    }
+   ]
+  },
+  "34269": {
+   "id": "34269",
+   "current": {
+    "id": "34269",
+    "title": "Sentinel Real Estate Buys 293-Unit Res Property in Folsom, CA",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34269",
+    "image": "/img/news/news_20328_1550BroadstonePkwyFolsomOliviaValloneCBREJul302026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Folsom",
+    "state": "CA",
+    "amount": null,
+    "amount_label": null,
+    "size_label": "293 units",
+    "units": 293,
+    "sqft": null,
+    "address": "1550 Broadstone Pkwy",
+    "occupancy_pct": 96,
+    "year_built": 2020,
+    "summary": "New York-based Sentinel Real Estate has acquired Talavera, a 293-unit apartment community in Folsom, CA.  We�re told that Talavera was the first asset to become available in the Folsom submarket in four years."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Sentinel Real Estate Buys 293-Unit Res Property in Folsom, CA",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34269",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Folsom",
+      "state": "CA",
+      "amount": null,
+      "amount_label": null,
+      "size_label": "293 units",
+      "units": 293,
+      "sqft": null,
+      "address": "1550 Broadstone Pkwy",
+      "occupancy_pct": 96,
+      "year_built": 2020,
+      "summary": "New York-based Sentinel Real Estate has acquired Talavera, a 293-unit apartment community in Folsom, CA.  We�re told that Talavera was the first asset to become available in the Folsom submarket in four years."
+     }
+    }
+   ]
+  },
+  "34272": {
+   "id": "34272",
+   "current": {
+    "id": "34272",
+    "title": "PCCP and Stonemont Acquire 5.9 msf Industrial Portfolio",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34272",
+    "image": "",
+    "txn_type": "Sale",
+    "property_type": "Industrial",
+    "city": "Inland Empire",
+    "state": "CA",
+    "amount": null,
+    "amount_label": null,
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": 95,
+    "year_built": null,
+    "summary": "A joint venture between PCCP and Stonemont has acquired a 38-asset, 5. 9 msf industrial portfolio diversified across 14 U."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "PCCP and Stonemont Acquire 5.9 msf Industrial Portfolio",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34272",
+      "txn_type": "Sale",
+      "property_type": "Industrial",
+      "city": "Inland Empire",
+      "state": "CA",
+      "amount": null,
+      "amount_label": null,
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": 95,
+      "year_built": null,
+      "summary": "A joint venture between PCCP and Stonemont has acquired a 38-asset, 5. 9 msf industrial portfolio diversified across 14 U."
+     }
+    }
+   ]
+  },
+  "34274": {
+   "id": "34274",
+   "current": {
+    "id": "34274",
+    "title": "GO Industrial Starts Work on 1.1 msf Industrial Facility in Phoenix",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34274",
+    "image": "/img/news/news_20332_9797WBuckeyeRdPhnxSavannahDurbanCWJul272026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Industrial",
+    "city": "Phoenix",
+    "state": "AZ",
+    "amount": null,
+    "amount_label": null,
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": "9797 W. Buckeye Rd",
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "GO Industrial has broken ground on a 1. 1 msf industrial building in Phoenix."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "GO Industrial Starts Work on 1.1 msf Industrial Facility in Phoenix",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34274",
+      "txn_type": "Sale",
+      "property_type": "Industrial",
+      "city": "Phoenix",
+      "state": "AZ",
+      "amount": null,
+      "amount_label": null,
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": "9797 W. Buckeye Rd",
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "GO Industrial has broken ground on a 1. 1 msf industrial building in Phoenix."
+     }
+    }
+   ]
+  },
+  "34276": {
+   "id": "34276",
+   "current": {
+    "id": "34276",
+    "title": "Gemdale USA Secures $90 Mil in New Financing on 538k sf San Diego Life Science Campus",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34276",
+    "image": "/img/news/news_20334_ApertureDelMarSDIANPATZKERPHOTOJustinaRubinsteinJul232026.jpg",
+    "txn_type": "Financing",
+    "property_type": "Medical/Life Science",
+    "city": "San Diego",
+    "state": "CA",
+    "amount": 90000000,
+    "amount_label": "$90.0M",
+    "size_label": null,
+    "units": null,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "Gemdale USA has obtained a $90 mil mezzanine bridge loan for Aperture Del Mar, a newly constructed, 538k sf Class A life science campus in San Diego.  The financing, provided by Breakthrough Properties and Tishman Speyer, will be used to refinance an existing loan."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Gemdale USA Secures $90 Mil in New Financing on 538k sf San Diego Life Science Campus",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34276",
+      "txn_type": "Financing",
+      "property_type": "Medical/Life Science",
+      "city": "San Diego",
+      "state": "CA",
+      "amount": 90000000,
+      "amount_label": "$90.0M",
+      "size_label": null,
+      "units": null,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "Gemdale USA has obtained a $90 mil mezzanine bridge loan for Aperture Del Mar, a newly constructed, 538k sf Class A life science campus in San Diego.  The financing, provided by Breakthrough Properties and Tishman Speyer, will be used to refinance an existing loan."
+     }
+    }
+   ]
+  },
+  "34282": {
+   "id": "34282",
+   "current": {
+    "id": "34282",
+    "title": "Step Up Housing Acquires Two California Multifamily Communities in Deals Totaling $91 Mil",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34282",
+    "image": "/img/news/news_20339_6430VernerAveSacramentoJulieChaseAug32026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Sacramento",
+    "state": "CA",
+    "amount": 91000000,
+    "amount_label": "$91.0M",
+    "size_label": "406 units · 669 SF",
+    "units": 406,
+    "sqft": 669,
+    "address": "6430 Verner Ave",
+    "occupancy_pct": 95,
+    "year_built": 1987,
+    "summary": "Step Up Housing recently acquired two California multifamily communities totaling 406 units -- Copper Creek, a 268-unit community in Sacramento, and Terramonte at Foothill, a 138-unit community in Pomona – for a combined price of $91. 35 mil."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Step Up Housing Acquires Two California Multifamily Communities in Deals Totaling $91 Mil",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34282",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Sacramento",
+      "state": "CA",
+      "amount": 91000000,
+      "amount_label": "$91.0M",
+      "size_label": "406 units · 669 SF",
+      "units": 406,
+      "sqft": 669,
+      "address": "6430 Verner Ave",
+      "occupancy_pct": 95,
+      "year_built": 1987,
+      "summary": "Step Up Housing recently acquired two California multifamily communities totaling 406 units -- Copper Creek, a 268-unit community in Sacramento, and Terramonte at Foothill, a 138-unit community in Pomona – for a combined price of $91. 35 mil."
+     }
+    }
+   ]
+  },
+  "34284": {
+   "id": "34284",
+   "current": {
+    "id": "34284",
+    "title": "Colrich Closes $52 Mil AZ Apartment Buy",
+    "url": "https://www.rentv.com/content/homepage/mainnews/news/34284",
+    "image": "/img/news/news_20342_Avia266MesaAZKimHoidalCBREAug32026.jpg",
+    "txn_type": "Sale",
+    "property_type": "Multifamily",
+    "city": "Mesa",
+    "state": "AZ",
+    "amount": 52000000,
+    "amount_label": "$52.0M",
+    "size_label": "267 units",
+    "units": 267,
+    "sqft": null,
+    "address": null,
+    "occupancy_pct": null,
+    "year_built": null,
+    "summary": "San Diego-based ColRich acquired Avia 266, a 267-unit multifamily community in Mesa, AZ, in a $52. 4 mil ($196k/unit) transaction, including the assumption of an existing HUD loan."
+   },
+   "first_seen": "2026-08-05T19:53:22.976Z",
+   "last_seen": "2026-08-05T19:53:22.976Z",
+   "seen_count": 1,
+   "revisions": 1,
+   "history": [
+    {
+     "ts": "2026-08-05T19:53:22.976Z",
+     "event": "created",
+     "snapshot": {
+      "title": "Colrich Closes $52 Mil AZ Apartment Buy",
+      "url": "https://www.rentv.com/content/homepage/mainnews/news/34284",
+      "txn_type": "Sale",
+      "property_type": "Multifamily",
+      "city": "Mesa",
+      "state": "AZ",
+      "amount": 52000000,
+      "amount_label": "$52.0M",
+      "size_label": "267 units",
+      "units": 267,
+      "sqft": null,
+      "address": null,
+      "occupancy_pct": null,
+      "year_built": null,
+      "summary": "San Diego-based ColRich acquired Avia 266, a 267-unit multifamily community in Mesa, AZ, in a $52. 4 mil ($196k/unit) transaction, including the assumption of an existing HUD loan."
+     }
+    }
+   ]
+  }
+ }
+}
\ No newline at end of file
diff --git a/public/backend.html b/public/backend.html
index e9e9e894..d1db7f9e 100644
--- a/public/backend.html
+++ b/public/backend.html
@@ -40,6 +40,7 @@
     <a class="card" href="/desk-admin"><div class="ico">✍️</div><b>Desk Admin</b><span>Add / withdraw sublease inventory</span></a>
     <a class="card" href="/admin/pr-intelligence"><div class="ico">📡</div><b>CRE PR Intelligence</b><span>CA/AZ press-contact research · letters · replies</span></a>
     <a class="card" href="/closings"><div class="ico">🏠</div><b>Property Closings</b><span>Every reported closed sale · address · date · price</span></a>
+    <a class="card" href="/deals-log.html"><div class="ico">📒</div><b>Deals Log</b><span>Every deal ever found from rentv.com + per-deal change history</span></a>
   </div>
 
   <div class="sect">Build &amp; Dashboards</div>
diff --git a/public/deals-log.html b/public/deals-log.html
new file mode 100644
index 00000000..820e3be1
--- /dev/null
+++ b/public/deals-log.html
@@ -0,0 +1,172 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>RENTV — Deals Log · every deal ever found + change history</title>
+<style>
+  :root{ --a:#c8102e; --ink:#14171a; --sub:#5b636b; --ln:#e4e7ea; --bg:#fff; --wa:#f5f6f8; --ok:#1a7f37; --chg:#b8860b; }
+  *{box-sizing:border-box}
+  body{margin:0;background:var(--wa);color:var(--ink);font:14px/1.5 'Inter',system-ui,-apple-system,sans-serif}
+  header{background:var(--bg);border-bottom:2px solid var(--a);padding:14px 22px;position:sticky;top:0;z-index:10;display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
+  header h1{font:700 19px/1 'Playfair Display',Georgia,serif;margin:0}
+  header h1 span{color:var(--a)}
+  header .meta{font-size:12px;color:var(--sub)} header .meta b{color:var(--ink)}
+  .bar{background:var(--bg);border-bottom:1px solid var(--ln);padding:11px 22px;display:flex;gap:10px;flex-wrap:wrap;align-items:center;position:sticky;top:49px;z-index:9}
+  .bar input[type=text]{flex:1;min-width:220px;padding:8px 11px;border:1px solid var(--ln);border-radius:8px;font-size:13px}
+  .bar select,.bar button{padding:7px 10px;border:1px solid var(--ln);border-radius:8px;background:var(--bg);font-size:12px;cursor:pointer}
+  .bar .chip{padding:6px 11px;border:1px solid var(--ln);border-radius:16px;background:var(--bg);font-size:12px;cursor:pointer;user-select:none}
+  .bar .chip.on{border-color:var(--a);color:var(--a);background:rgba(200,16,46,.06)}
+  .cols{padding:8px 22px;background:var(--bg);border-bottom:1px solid var(--ln);font-size:11px;color:var(--sub);display:flex;gap:12px;flex-wrap:wrap;align-items:center}
+  .cols label{display:inline-flex;align-items:center;gap:4px;cursor:pointer}
+  .wrap{padding:16px 22px 60px}
+  table{width:100%;border-collapse:collapse;background:var(--bg);font-size:13px}
+  th,td{text-align:left;padding:9px 11px;border-bottom:1px solid var(--ln);vertical-align:top}
+  th{position:sticky;top:96px;background:var(--wa);font-size:11px;text-transform:uppercase;letter-spacing:.4px;color:var(--sub);cursor:pointer;user-select:none;white-space:nowrap}
+  th.asc::after{content:' ▲';color:var(--a)} th.desc::after{content:' ▼';color:var(--a)}
+  tbody tr{cursor:pointer} tbody tr:hover td{background:var(--wa)}
+  td.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
+  .tag{display:inline-block;padding:1px 7px;border-radius:10px;font-size:11px;font-weight:600;background:var(--wa);border:1px solid var(--ln)}
+  .chgbadge{display:inline-block;min-width:20px;text-align:center;padding:1px 7px;border-radius:10px;font-size:11px;font-weight:700;background:rgba(184,134,11,.12);color:var(--chg)}
+  .chgbadge.zero{background:var(--wa);color:var(--sub);font-weight:400}
+  .when{font-size:11px;color:var(--sub);white-space:nowrap}
+  .drill{color:var(--a);text-decoration:underline dotted;text-underline-offset:2px}
+  .empty{padding:60px;text-align:center;color:var(--sub)}
+  #ov{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:60;align-items:flex-start;justify-content:center;padding:40px 14px;overflow-y:auto}
+  #ov.on{display:flex}
+  #modal{width:min(720px,96vw);background:var(--bg);border-radius:12px;padding:20px 22px;position:relative}
+  #modal h3{margin:0 0 3px;font:700 18px/1.25 'Playfair Display',Georgia,serif}
+  #modal .maddr{color:var(--sub);font-size:12px;margin-bottom:12px}
+  #modal .x{position:absolute;top:12px;right:14px;background:none;border:0;font-size:22px;cursor:pointer;color:var(--sub)}
+  .tl{border-left:2px solid var(--ln);margin-left:6px;padding-left:16px}
+  .ev{position:relative;padding:8px 0}
+  .ev::before{content:'';position:absolute;left:-23px;top:13px;width:9px;height:9px;border-radius:50%;background:var(--a)}
+  .ev.created::before{background:var(--ok)}
+  .ev .ts{font-size:11px;color:var(--sub)}
+  .ev .lbl{font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.4px}
+  .ev.created .lbl{color:var(--ok)} .ev.changed .lbl{color:var(--chg)}
+  .diff{font-size:12.5px;margin:3px 0 0;padding-left:2px}
+  .diff .f{color:var(--sub)} .diff .from{color:#b00;text-decoration:line-through} .diff .to{color:var(--ok);font-weight:600}
+</style>
+</head>
+<body>
+<header>
+  <h1>REN<span>TV</span> · Deals Log</h1>
+  <span class="meta" id="hmeta">loading…</span>
+  <span class="meta" style="margin-left:auto"><a href="/backend.html" style="color:var(--a)">← backend</a></span>
+</header>
+<div class="bar">
+  <input type="text" id="q" placeholder="search every field — title, city, state, address, summary… (space = AND)">
+  <select id="fType"><option value="">All property types</option></select>
+  <select id="fTxn"><option value="">All deal types</option></select>
+  <span class="chip" id="cChanged" title="Only deals whose fields have changed since first found">✎ Changed only</span>
+  <button id="reset" title="Clear filters + sort">↺ Reset</button>
+</div>
+<div class="cols" id="cols"></div>
+<div class="wrap"><table id="tbl"><thead><tr id="head"></tr></thead><tbody id="body"><tr><td class="empty">loading…</td></tr></tbody></table></div>
+
+<div id="ov"><div id="modal"><button class="x" onclick="closeOv()">✕</button><div id="mbody"></div></div></div>
+
+<script>
+const $=s=>document.querySelector(s), $$=s=>Array.from(document.querySelectorAll(s));
+const esc=s=>String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');
+// created date AND time in the admin's local tz (Steve HARD rule for admin cards), full ISO in title=
+function fmtDT(v){ if(!v) return ''; const d=new Date(v); if(isNaN(d)) return ''; return d.toLocaleString(undefined,{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'}); }
+function dtCell(v){ const s=fmtDT(v); return s?`<span class="when" title="${esc(v)}">${esc(s)}</span>`:'—'; }
+const money=v=>v==null?'—':'$'+(+v).toLocaleString();
+
+// COLUMNS — start tight (Steve rule), togglable, persisted.
+const COLS=[
+  {k:'title',   l:'Deal',        def:1, cell:d=>`<b>${esc(d.title||'—')}</b>${d.address?`<div class="when">${esc(d.address)}</div>`:''}`},
+  {k:'txn_type',l:'Txn',         def:1, cell:d=>d.txn_type?`<span class="tag">${esc(d.txn_type)}</span>`:'—'},
+  {k:'property_type',l:'Type',   def:1, cell:d=>d.property_type?`<span class="tag">${esc(d.property_type)}</span>`:'—'},
+  {k:'loc',     l:'Location',    def:1, cell:d=>esc([d.city,d.state].filter(Boolean).join(', ')||'—'), sort:d=>`${d.state||''} ${d.city||''}`},
+  {k:'amount',  l:'Amount',      def:1, num:1, cell:d=>esc(d.amount_label||money(d.amount)), sort:d=>d.amount||0},
+  {k:'size_label',l:'Size',      def:0, cell:d=>esc(d.size_label||'—')},
+  {k:'changes', l:'Changes',     def:1, num:1, cell:d=>`<span class="chgbadge ${d.changes?'':'zero'}">${d.changes||0}</span>`, sort:d=>d.changes||0},
+  {k:'revisions',l:'Revisions',  def:0, num:1, cell:d=>d.revisions||1, sort:d=>d.revisions||1},
+  {k:'seen_count',l:'Seen×',     def:0, num:1, cell:d=>d.seen_count||1, sort:d=>d.seen_count||1},
+  {k:'first_seen',l:'First found',def:1, cell:d=>dtCell(d.first_seen), sort:d=>d.first_seen||''},
+  {k:'last_seen',l:'Last found', def:1, cell:d=>dtCell(d.last_seen), sort:d=>d.last_seen||''},
+];
+const VIS=(function(){let s={};try{s=JSON.parse(localStorage.getItem('rentvDealCols')||'{}')}catch(e){}const o={};COLS.forEach(c=>o[c.k]=(c.k in s)?!!s[c.k]:!!c.def);return o})();
+function saveVis(){try{localStorage.setItem('rentvDealCols',JSON.stringify(VIS))}catch(e){}}
+let ALL=[], SORT={k:'last_seen',dir:-1};
+const F={q:'',type:'',txn:'',changed:false};
+
+function buildCols(){
+  $('#cols').innerHTML='<b>Columns:</b> '+COLS.map(c=>`<label><input type="checkbox" data-c="${c.k}" ${VIS[c.k]?'checked':''}>${esc(c.l)}</label>`).join('');
+}
+function visCols(){ return COLS.filter(c=>VIS[c.k]); }
+function buildHead(){
+  $('#head').innerHTML=visCols().map(c=>{const s=SORT.k===c.k?(SORT.dir>0?' asc':' desc'):'';return `<th data-k="${c.k}" class="${c.num?'num':''}${s}">${esc(c.l)}</th>`;}).join('');
+}
+function passF(d){
+  if(F.type&&(d.property_type||'').toLowerCase()!==F.type.toLowerCase()) return false;
+  if(F.txn&&(d.txn_type||'').toLowerCase()!==F.txn.toLowerCase()) return false;
+  if(F.changed&&!(d.changes>0)) return false;
+  if(F.q){ const hay=Object.values(d).map(v=>v==null?'':String(v)).join(' ').toLowerCase();
+    if(!F.q.split(/\s+/).filter(Boolean).every(t=>hay.includes(t))) return false; }
+  return true;
+}
+function sortRows(rows){
+  const c=COLS.find(x=>x.k===SORT.k)||COLS[0]; const g=c.sort||(d=>d[c.k]);
+  return rows.slice().sort((a,b)=>{let x=g(a),y=g(b);
+    const xn=(typeof x==='number'),yn=(typeof y==='number');
+    if(!xn) x=String(x==null?'':x).toLowerCase(); if(!yn) y=String(y==null?'':y).toLowerCase();
+    if(x<y) return -SORT.dir; if(x>y) return SORT.dir; return 0;});
+}
+function render(){
+  buildHead();
+  const rows=sortRows(ALL.filter(passF));
+  const cols=visCols();
+  $('#body').innerHTML = rows.length? rows.map(d=>`<tr data-id="${esc(d.id)}">`+cols.map(c=>`<td class="${c.num?'num':''}">${c.cell(d)}</td>`).join('')+`</tr>`).join('')
+    : '<tr><td class="empty" colspan="'+cols.length+'">no deals match these filters.</td></tr>';
+  $('#hmeta').innerHTML=`<b>${rows.length}</b> of <b>${ALL.length}</b> deals ever found · <b>${ALL.filter(d=>d.changes>0).length}</b> with changes`;
+}
+
+// ── change-history drill-down (Steve: every datum drills to deeper data) ──
+async function openHistory(id){
+  const ov=$('#ov'), mb=$('#mbody'); ov.classList.add('on'); mb.innerHTML='<p class="empty">loading history…</p>';
+  let h; try{ h=await (await fetch('/api/deals/'+encodeURIComponent(id)+'/history')).json(); }catch(e){ mb.innerHTML='<p class="empty">could not load history</p>'; return; }
+  if(h.error){ mb.innerHTML='<p class="empty">'+esc(h.error)+'</p>'; return; }
+  const c=h.current||{};
+  const evs=(h.history||[]).slice().reverse().map(ev=>{
+    const diffs=(ev.changes||[]).map(ch=>`<div class="diff"><span class="f">${esc(ch.field)}:</span> <span class="from">${esc(ch.from==null?'∅':ch.from)}</span> → <span class="to">${esc(ch.to==null?'∅':ch.to)}</span></div>`).join('');
+    return `<div class="ev ${ev.event}"><div class="ts">${esc(fmtDT(ev.ts))}</div><div class="lbl">${ev.event==='created'?'✚ First found':'✎ Changed'}</div>${diffs||(ev.event==='created'?'<div class="diff f">initial capture</div>':'')}</div>`;
+  }).join('');
+  mb.innerHTML=`<h3>${esc(c.title||'Deal '+h.id)}</h3>
+    <div class="maddr">${esc([c.city,c.state].filter(Boolean).join(', '))}${c.address?' · '+esc(c.address):''} · ${esc(c.amount_label||money(c.amount))} · ${esc(c.txn_type||'')} ${esc(c.property_type||'')}
+      ${c.url?`· <a class="drill" href="${esc(c.url)}" target="_blank" rel="noopener noreferrer">source ↗</a>`:''}</div>
+    <div class="when" style="margin-bottom:10px">First found ${esc(fmtDT(h.first_seen))} · last found ${esc(fmtDT(h.last_seen))} · seen ${h.seen_count}× · ${h.revisions} revision(s)</div>
+    <div class="tl">${evs||'<p class="empty">no history</p>'}</div>`;
+}
+function closeOv(){ $('#ov').classList.remove('on'); }
+$('#ov').addEventListener('click',e=>{ if(e.target.id==='ov') closeOv(); });
+document.addEventListener('keydown',e=>{ if(e.key==='Escape') closeOv(); });
+
+// ── wiring ──
+$('#body').addEventListener('click',e=>{ const tr=e.target.closest('tr[data-id]'); if(tr) openHistory(tr.dataset.id); });
+$('#head').addEventListener('click',e=>{ const th=e.target.closest('th[data-k]'); if(!th) return; const k=th.dataset.k;
+  if(SORT.k===k) SORT.dir*=-1; else { SORT.k=k; SORT.dir=(k==='first_seen'||k==='last_seen'||k==='amount'||k==='changes'||k==='revisions'||k==='seen_count')?-1:1; } render(); });
+$('#cols').addEventListener('change',e=>{ const cb=e.target.closest('input[data-c]'); if(!cb) return; VIS[cb.dataset.c]=cb.checked; saveVis(); render(); });
+$('#q').addEventListener('input',()=>{ clearTimeout(window._t); window._t=setTimeout(()=>{F.q=$('#q').value.trim().toLowerCase();render();},150); });
+$('#fType').addEventListener('change',()=>{F.type=$('#fType').value;render();});
+$('#fTxn').addEventListener('change',()=>{F.txn=$('#fTxn').value;render();});
+$('#cChanged').addEventListener('click',()=>{F.changed=!F.changed;$('#cChanged').classList.toggle('on',F.changed);render();});
+$('#reset').addEventListener('click',()=>{F.q='';F.type='';F.txn='';F.changed=false;$('#q').value='';$('#fType').value='';$('#fTxn').value='';$('#cChanged').classList.remove('on');SORT={k:'last_seen',dir:-1};render();});
+
+async function boot(){
+  buildCols();
+  let d; try{ d=await (await fetch('/api/deals/registry')).json(); }catch(e){ $('#body').innerHTML='<tr><td class="empty">failed to load registry — admin login required.</td></tr>'; return; }
+  ALL=d.deals||[];
+  const types=[...new Set(ALL.map(x=>x.property_type).filter(Boolean))].sort();
+  const txns=[...new Set(ALL.map(x=>x.txn_type).filter(Boolean))].sort();
+  $('#fType').innerHTML='<option value="">All property types</option>'+types.map(t=>`<option>${esc(t)}</option>`).join('');
+  $('#fTxn').innerHTML='<option value="">All deal types</option>'+txns.map(t=>`<option>${esc(t)}</option>`).join('');
+  render();
+}
+boot();
+</script>
+</body>
+</html>
diff --git a/scripts/lib/deal-registry.mjs b/scripts/lib/deal-registry.mjs
new file mode 100644
index 00000000..35d55379
--- /dev/null
+++ b/scripts/lib/deal-registry.mjs
@@ -0,0 +1,128 @@
+// deal-registry.mjs — the PERSISTENT ledger of every CRE deal RENTV has ever found,
+// with a per-deal CHANGE HISTORY (Steve 2026-08-05, TK-10246: "keep list of all deals in
+// the rentv backend. Every deal should be saved to see changes. every deal it finds").
+//
+// pull-deals.mjs parses the LIVE rentv.com news window into deal cards and OVERWRITES
+// data/deals.json each run — so a deal drops off the moment its story rotates out of the
+// window, and a corrected field (amount/occupancy/…) silently clobbers the old value with
+// no trail. This registry fixes both: it NEVER drops a deal, and every time a deal's fields
+// change it appends a diff’d revision so the change is visible over time.
+//
+// Store: data/deals-registry.json — keyed by deal id. Each entry keeps the CURRENT deal,
+// first/last-seen timestamps, a seen counter, and a history[] of created/changed events.
+// Atomic write (tmp + rename), serialized so concurrent cron pulls can't interleave a
+// half-written file. Pure JSON — matches the codebase idiom (deals.json/news.json).
+import { readFileSync, writeFileSync, renameSync, mkdirSync } from 'node:fs';
+import { dirname, join } from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const HERE = dirname(fileURLToPath(import.meta.url));
+const DATA = join(HERE, '..', '..', 'data');
+const REGISTRY = join(DATA, 'deals-registry.json');
+
+// Fields that constitute a MEANINGFUL change (a new revision). Volatile/derived fields not
+// in this list (e.g. a re-localized image path) don't spam the history on their own.
+const TRACKED = ['title', 'url', 'txn_type', 'property_type', 'city', 'state', 'amount',
+  'amount_label', 'size_label', 'units', 'sqft', 'address', 'occupancy_pct', 'year_built', 'summary'];
+
+function load() {
+  try {
+    const j = JSON.parse(readFileSync(REGISTRY, 'utf8'));
+    if (j && typeof j === 'object' && j.deals && typeof j.deals === 'object') return j;
+  } catch { /* first run or corrupt → fresh */ }
+  return { updated_at: null, total: 0, deals: {} };
+}
+
+function saveAtomic(reg) {
+  mkdirSync(DATA, { recursive: true });
+  const tmp = REGISTRY + '.tmp';
+  writeFileSync(tmp, JSON.stringify(reg, null, 1));
+  renameSync(tmp, REGISTRY);
+}
+
+// Compare a stored deal against an incoming one; return the list of {field, from, to} that changed.
+function diffDeal(prev, next) {
+  const changes = [];
+  for (const f of TRACKED) {
+    const a = prev == null ? undefined : prev[f];
+    const b = next == null ? undefined : next[f];
+    // normalize null/undefined/'' so a missing field doesn't read as a change every run
+    const na = a === '' || a === undefined ? null : a;
+    const nb = b === '' || b === undefined ? null : b;
+    if (na !== nb) changes.push({ field: f, from: na, to: nb });
+  }
+  return changes;
+}
+
+// A trimmed snapshot stored per history event — the tracked fields only (keeps history compact).
+function snap(deal) {
+  const o = {};
+  for (const f of TRACKED) if (deal[f] !== undefined) o[f] = deal[f] === '' ? null : deal[f];
+  return o;
+}
+
+/**
+ * Record a batch of freshly-found deals into the persistent registry.
+ * NEW id      → added with first_seen + a 'created' history event.
+ * KNOWN id, fields changed → 'changed' history event with the field diffs; current updated.
+ * KNOWN id, no change       → just last_seen + seen_count bumped (no history spam).
+ * A deal is NEVER removed — the registry is the append-only master list of everything found.
+ *
+ * @param {Array<object>} deals  parsed deal cards (must each have an `id`)
+ * @param {string} [nowISO]      timestamp to stamp (defaults to now)
+ * @returns {{added:number, changed:number, unchanged:number, total:number}}
+ */
+export function recordDeals(deals, nowISO) {
+  const now = nowISO || new Date().toISOString();
+  const reg = load();
+  let added = 0, changed = 0, unchanged = 0;
+
+  for (const d of deals || []) {
+    if (!d || d.id == null) continue;
+    const id = String(d.id);
+    const existing = reg.deals[id];
+    if (!existing) {
+      reg.deals[id] = {
+        id, current: d, first_seen: now, last_seen: now, seen_count: 1, revisions: 1,
+        history: [{ ts: now, event: 'created', snapshot: snap(d) }],
+      };
+      added++;
+      continue;
+    }
+    existing.seen_count = (existing.seen_count || 0) + 1;
+    existing.last_seen = now;
+    const changes = diffDeal(existing.current, d);
+    if (changes.length) {
+      existing.current = d;
+      existing.revisions = (existing.revisions || 1) + 1;
+      existing.history.push({ ts: now, event: 'changed', changes, snapshot: snap(d) });
+      changed++;
+    } else {
+      // keep current fresh for non-tracked fields (e.g. re-localized image) without a history entry
+      existing.current = { ...existing.current, ...d };
+      unchanged++;
+    }
+  }
+
+  reg.total = Object.keys(reg.deals).length;
+  reg.updated_at = now;
+  saveAtomic(reg);
+  return { added, changed, unchanged, total: reg.total };
+}
+
+// Read helpers for the server / backend view.
+export function readRegistry() { return load(); }
+export function listDeals() {
+  const reg = load();
+  // newest-first by last_seen; each entry flattened for a list view + a change count
+  return Object.values(reg.deals)
+    .map((e) => ({ ...e.current, id: e.id, first_seen: e.first_seen, last_seen: e.last_seen,
+      seen_count: e.seen_count, revisions: e.revisions, changes: (e.history?.length || 1) - 1 }))
+    .sort((a, b) => String(b.last_seen).localeCompare(String(a.last_seen)));
+}
+export function dealHistory(id) {
+  const reg = load();
+  const e = reg.deals[String(id)];
+  return e ? { id: e.id, current: e.current, first_seen: e.first_seen, last_seen: e.last_seen,
+    seen_count: e.seen_count, revisions: e.revisions, history: e.history } : null;
+}
diff --git a/scripts/pull-deals.mjs b/scripts/pull-deals.mjs
index 4842a26c..7fecf9a4 100644
--- a/scripts/pull-deals.mjs
+++ b/scripts/pull-deals.mjs
@@ -12,6 +12,7 @@ import { dirname, join } from 'node:path';
 import { fileURLToPath } from 'node:url';
 import { createRequire } from 'node:module';
 import { parseLocation } from './lib/parse-location.mjs';
+import { recordDeals } from './lib/deal-registry.mjs';
 const HERE = dirname(fileURLToPath(import.meta.url));
 const DATA = join(HERE, '..', 'data'); mkdirSync(DATA, { recursive: true });
 // Localize deal-card photos into public/img/news/ — the Deals grid serves them locally,
@@ -130,10 +131,16 @@ try {
   }
   // Download each remote photo locally and rewrite image → /img/news/<file> (fail → '' placeholder).
   for (const d of deals) { d.image = await localizeImage(d.image); }
-  const payload = { source: 'rentv.com — live deal listings', fetched_at: new Date().toISOString(), count: deals.length, deals };
+  const nowISO = new Date().toISOString();
+  const payload = { source: 'rentv.com — live deal listings', fetched_at: nowISO, count: deals.length, deals };
   writeFileSync(join(DATA, 'deals.json'), JSON.stringify(payload, null, 1));
+  // PERSIST every deal found into the append-only registry + change history (TK-10246). deals.json
+  // stays the live/current window; the registry is the master list that never drops a deal and
+  // records each field change over time.
+  const reg = recordDeals(deals, nowISO);
   const withAmt = deals.filter((d) => d.amount).length;
   console.log(`OK: parsed ${deals.length} deal listings (${withAmt} with $ amount)`);
+  console.log(`registry: +${reg.added} new · ${reg.changed} changed · ${reg.unchanged} unchanged · ${reg.total} total deals ever found`);
 } catch (e) {
   console.error('deals pull failed:', e.message, '— last-good deals.json kept');
   process.exitCode = 1;
diff --git a/server.js b/server.js
index 11f208fe..59af8a0a 100644
--- a/server.js
+++ b/server.js
@@ -94,7 +94,7 @@ footer:not(#rentv-footer){display:none!important}
   <div class="rf-bar"><span>© 2026 RENTV.com — Commercial Real Estate News across the Western U.S.</span><span>All rights reserved.</span></div>
 </footer>`;
 // Internal/admin shells never get the customer footer.
-const INTERNAL_PAGE = /(^|\/)(admin|versions|consulting|press|desk|desk-admin|audience|social|backend|summit-leads)(\.html)?$|\/(admin|versions|consulting|press)\//i;
+const INTERNAL_PAGE = /(^|\/)(admin|versions|consulting|press|desk|desk-admin|audience|social|backend|deals-log|summit-leads)(\.html)?$|\/(admin|versions|consulting|press)\//i;
 function sendPage(res, absFile) {
   let html;
   try { html = fs.readFileSync(absFile, 'utf8'); }
@@ -182,6 +182,42 @@ app.get('/api/deals', (req, r) => {
   r.json({ source: data.source, fetched_at: data.fetched_at, count: deals.length, deals: deals.slice(0, limit) });
 });
 
+// ── Deal REGISTRY: the persistent master list of EVERY deal ever found + change history
+//    (TK-10246, Steve 2026-08-05). Written by scripts/lib/deal-registry.mjs on every pull;
+//    never drops a deal, records each field change. Admin/backend surface — the live public
+//    /api/deals above stays the current window. Filters: ?type= ?txn= ?q= ?changed=1 (only
+//    deals that have been revised) ?since=ISO (first_seen/last_seen after) ?limit. ──
+app.get('/api/deals/registry', adminOnly, (req, r) => {
+  const reg = readJSON('deals-registry.json', { deals: {}, total: 0, updated_at: null });
+  let rows = Object.values(reg.deals || {}).map((e) => ({
+    ...(e.current || {}), id: e.id,
+    first_seen: e.first_seen, last_seen: e.last_seen,
+    seen_count: e.seen_count || 1, revisions: e.revisions || 1,
+    changes: Math.max(0, (Array.isArray(e.history) ? e.history.length : 1) - 1),
+  }));
+  const { type, txn, q, changed, since } = req.query;
+  if (type) rows = rows.filter((d) => (d.property_type || '').toLowerCase() === String(type).toLowerCase());
+  if (txn) rows = rows.filter((d) => (d.txn_type || '').toLowerCase() === String(txn).toLowerCase());
+  if (changed === '1' || changed === 'true') rows = rows.filter((d) => d.changes > 0);
+  if (since) rows = rows.filter((d) => String(d.last_seen) >= String(since));
+  if (q) {
+    const n = String(q).toLowerCase();
+    rows = rows.filter((d) => `${d.title} ${d.city} ${d.state} ${d.address} ${d.summary}`.toLowerCase().includes(n));
+  }
+  rows.sort((a, b) => String(b.last_seen).localeCompare(String(a.last_seen)));
+  const limit = Math.min(parseInt(req.query.limit, 10) || rows.length, 5000);
+  r.json({ updated_at: reg.updated_at, total: reg.total || rows.length, count: rows.length, deals: rows.slice(0, limit) });
+});
+
+// One deal's full CHANGE TIMELINE — created + every revision with per-field diffs.
+app.get('/api/deals/:id/history', adminOnly, (req, r) => {
+  const reg = readJSON('deals-registry.json', { deals: {} });
+  const e = (reg.deals || {})[String(req.params.id)];
+  if (!e) return r.status(404).json({ error: 'deal not found in registry' });
+  r.json({ id: e.id, current: e.current, first_seen: e.first_seen, last_seen: e.last_seen,
+    seen_count: e.seen_count || 1, revisions: e.revisions || 1, history: e.history || [] });
+});
+
 // ── Newsletter capture: append-only local JSONL (NO external send-to-list). ──
 const SUBS = path.join(DATA, 'subscribers.jsonl');
 const MAX_SUBS = 50000; // hard ceiling — guards against disk-fill / append abuse

← 9ea3fd53 Boomer voice fix: re-clone from verified 7/31 VO (VOICE_ID c  ·  back to Rentv  ·  RENTV: deals+registry ride the 20-min news cron (auto-accumu 955211ec →