Case Study · Commercial Real Estate

Inside a half-built CRE database

An independent commercial real estate brokerage came to us with a missed-listings problem and a decade-old CRM. We expected a junk list. We found something else entirely.

Industry
Commercial Real Estate
Client
Independent CRE Brokerage
Outcome
Database transformation in progress
Date
April 2026

TL;DR

A working broker came to us behind on his year-end listing target. The top broker at his firm had four times his listings. He wanted to run more cold outreach. He had a database of roughly 14,000 contacts collected over years of inquiries, transactions, and platform imports. None of it was queryable.

We audited the database. The structure was there. It had never been finished. The asset he was sitting on was worth multiples of what he thought.

The challenge

A long-tenured commercial real estate broker came to us behind on his year-end income target. The principal of his firm had over four times his current listing count. The broker's instinct was that the answer was more cold outreach: more emails, more lists, more volume.

He had the raw material to do it. Roughly 14,000 contacts in his web-based CRM, accumulated through years of property inquiries, deal closings, conferences, mailers, and an import from a prior CRE-specific platform. He had two virtual assistants supporting outbound work. What he didn't have was any way to systematically work the data he'd collected, or know which 50 contacts in those 14,000 were the ones to talk to this quarter.

His suspicion was that the database was a junk list. We expected to find the same.

What we found

The database wasn't junk. It was something more interesting: an unfinished asset.

Identity and contact data were strong. 99% of contacts had names, 91% had phones, 87% had a company name attached. Whoever set the system up had also designed a thoughtful custom field schema for CRE prospecting: dedicated fields for asset class, county, sub-market, owner's home address, property holdings (15 slots), and even fields for spouses and aliases used for skip-tracing LLC owners.

The structure was right. The discipline to use it had never taken hold.

The fields that took effort to fill were essentially empty. The asset class field, designed to hold "office", "retail", "industrial", was filled on 5 contacts out of 14,870. The county field was filled on 357. Most of the 15 property-tracking slots were used on fewer than 1.5% of records.

Meanwhile, the same data lived in 253 unique tags, sprayed across contacts in inconsistent formats. Building size lived as 5001-10000 bldg area, but also as 5k less, and also as below 5000 bldg area — sometimes all three on the same record. Asset class lived as retail, but the contact often also had industrial and business/tenants attached. 129 of the 253 tags were used three times or fewer. Pure noise.

Property holdings, when they existed, lived as tab-separated free text in fields named "Property 1" through "Property 15" — meaning ~10,400 contacts had at least one property tracked, but the data couldn't be queried, joined, or sorted.

About a quarter of the contacts had no email at all, blocking outbound entirely for ~3,750 records.

Why this mattered before any cold email

The broker wanted to run more outreach. We told him outreach against this database wouldn't work, and explained why.

Cold email only works when three things are true:

  1. The email is deliverable. With unknown bounce rates on a multi-year-old list, a single send would have torched the brokerage's domain reputation and made future emails — including the ones to current clients — land in spam.
  2. The message is relevant. Personalization requires knowing the contact's role, the property they own, the asset class, the recent activity. All of that lived in tags so messy that filters returned contradictory results.
  3. The timing is right. Knowing who needs a broker in the next 90 days requires trigger signals — loan maturities, expired listings, tenure thresholds, tax delinquencies. None of these were tracked.

A larger volume of poorly-targeted cold email would not have gotten him more listings. It would have made everything worse. The data layer needed to come first.

The approach

We designed the engagement around restructuring the database in place — additive migration, never destructive.

The principle: assume existing workflows are load-bearing until proven otherwise. New structured fields are populated alongside existing tags. Both versions live in parallel during a validation period. Smart lists, templates, automations — none of them are touched until the broker has reviewed and signed off on what's being changed.

If the engagement stops at any point, the database is in a "more useful than it was" state. Never less.

What gets delivered

The work splits into a defined core, with optional add-ons depending on how far the engagement goes.

Core: the database transformation

  • Every email validated. Dead addresses flagged before they hurt the sender's reputation
  • Tag chaos normalized into a clean structured field schema (under 30 high-signal tags vs. the original 253)
  • Property holdings parsed from existing free-text fields into a structured records relation, joined to their owners
  • Identity enrichment via reverse lookup, recovering an estimated ~1,800 missing emails
  • Saved smart lists in the CRM for every high-value segment, refreshing as new data lands
  • A written schema documentation and playbook for how the broker's team uses it going forward

Optional: the intelligence layer

  • Trigger detection across the database: loan maturity, expired listings, tenure thresholds, tax delinquency
  • Per-contact intent scoring (0–100), refreshed monthly
  • A top-200 priority queue surfaced as a saved view inside the CRM

Optional: live agent integration

The hardest part of any data project isn't building it once — it's keeping it clean as new contacts get added by VAs, imports, web forms, and integrations. Without active maintenance, a clean database drifts back to its original state inside six to twelve months.

We can wire an OpenClaw agent directly into the broker's CRM with a custom skill that watches every new and updated contact in real time. It classifies new entries into the structured field schema, validates emails before they go live, fills in missing data through the same enrichment pipeline, and flags anomalies for human review. Same safety principles as the migration: read-first, never destructive, full audit trail, every change reversible.

What this unlocks

A queryable, segmentable, scoreable database. Smart lists like "industrial owners in the local market with building 5–10k sqft, tenure over 7 years, sorted by intent score" become one click. Cold email becomes a viable channel because the data underneath it is right. The broker walks into every conversation knowing why now.

The 6,852 contacts tagged as owners represent a meaningful pool of potential listings. If 5% have an active reason to engage a broker in the next 90 days, that's roughly 340 prospects. Surfacing the top 50 each month, with full property and trigger context, becomes a recurring listings pipeline.

Existing book of business gets defended too. Better follow-up data on existing relationships. Faster response on offers. Cleaner records when something needs to change.

Why most brokers don't see this

Brokers buy CRMs and use them as contact storage. The systems are sold to do far more, but actually using the structure requires data discipline most teams don't have time to enforce. So the database accumulates over years — tags layered over imports layered over manual edits — slowly filling up but never queryable.

The fix isn't another platform. It's finishing the job that started.

Generalizable lessons

Three things consistently true across CRMs we audit:

Most "messy CRMs" are actually unfinished CRMs. The schema is there, the discipline isn't. Cleaning is a smaller project than people expect. The hard work is sustaining the cleaning.

Tags are where data goes to die. They start useful, accumulate inconsistently, and become unfilterable. Anything that needs to be queried should be a structured field.

Cold outreach against a messy list is worse than no outreach. The deliverability damage outlasts the campaign. The data layer is a prerequisite, not a nice-to-have.

Could this work for your business?

If you've been collecting contacts for years and can't run a real query against your own database, you have the same problem.

Whether you're in commercial real estate, telecom, transportation, legal, or another vertical, the data layer comes first. We do this work in any industry where the CRM has accumulated meaning that isn't queryable yet.

Start the conversation

No pitch. No pressure. Just a straight conversation.

Thirty minutes with someone who's done this before, in their own business and at some of the largest organizations in the world. You'll leave with a clearer picture of where AI fits, whether or not we end up working together.