← Case studies

Case Study · Green Light Offer · Real Estate Investment

Green Light Offer

Green Light Offer wanted dashboards they could trust. We fixed the data first.

A real estate investment team runs three departments - acquisitions, dispositions, and title and closing - on Salesforce, and every KPI they looked at was quietly wrong: lead ownership overwritten by intake staff, twenty-second dials counted as conversations, no idea how complete a deal record was. In 98 hours we fixed each one at the source, then built the reporting layer on top.

98 hrs
from kickoff to production, fixed scope
20
reports rebuilt against corrected data
4
dashboards: ACQ, DISPO, TC, company-wide
120s
the one number that now defines a real conversation
Book a Free Consultation Free · 30 minutes · a senior architect, not a rep

Industry

Real estate investment

Platform

Salesforce Sales Cloud + Flow + Apex

Timeline

Ten weeks

Outcome

KPIs the leadership team can act on

Built withSales CloudSalesforce FlowApexCustom MetadataReports & Dashboards

The challenge

Green Light Offer: a fast-moving property business with numbers nobody believed

Green Light Offer buys and resells properties through an inbound sales floor split into acquisitions, dispositions, and title and closing. They run on Salesforce with a real estate CRM package and a call-tracking phone system, and they had dashboards - the problem was what the dashboards were measuring. "New Leads" counted outbound calls instead of leads. Per-agent charts hid company totals. Ratios displayed as 1, .5, and 0 instead of percentages. Underneath, the data feeding those charts had structural problems no chart could fix.

Lead ownership kept getting overwritten

Leads were created by intake staff, so the "original owner" field pointed at whoever typed them in - and every reassignment wiped the previous value. Long-term reporting on who actually worked a lead was impossible.

A twenty-second dial counted as a conversation

Contact-rate metrics treated every logged call the same. There was no distinction between a real conversation and a voicemail, so the floor's most important efficiency number meant nothing.

Nobody knew how complete a deal record was

Transactions and opportunities had dozens of fields and no way to see what was missing. A static formula would break every time the field list changed - which it did constantly.

Everyone saw everyone's numbers

The home page showed the same dashboards to every user. An acquisitions agent had no personal view, and department leads had no department view.

It worked in sandbox and failed in production

A second active flow in production was firing first and blocking the new ownership logic - the kind of drift that only shows up after go-live.

The architecture

Fix the fields, then build the charts

The order mattered. We corrected the three sources of bad data - lead ownership, contact qualification, record completeness - with flows and Apex that enforce the rules automatically, then rebuilt the reporting layer on top of data that was finally true.

Sources

Inbound leads
Call logs
Transactions & opportunities
Agent activity

Corrected in Salesforce

Sales Cloud
Record-triggered Flows
Apex completeness engine

Outcomes

True original lead owner
Meaningful-contact rate
Completion % on every record
Role-aware dashboards

What we built

Original Lead Owner, locked at first real assignment

A before-save flow stamps the first genuine acquisitions agent assigned to a lead - skipping intake users and queues - and never overwrites it, including through round-robin assignment. Diagnosing why it failed in production (a conflicting active flow) was part of the job.

"Meaningfully Contacted" defined by one hard number

A checkbox on Lead and Contact that flips only when a logged call exceeds 120 seconds, and does not re-trigger on later calls. Repointed to the call-duration field the client's phone system had actually been writing to for years, not the Salesforce default.

A record-completeness engine that admins can extend

Completion % on every transaction, calculated by invocable Apex and configured through custom metadata - the client adds a field to the calculation by creating a metadata record, no code change. Historical records were backfilled in production.

Opportunity completeness, bulk-safe

A trigger-based version for opportunities that recalculates only when a field flips between blank and filled, so a value simply changing from 6 to 8 costs nothing.

Twenty reports, four dashboards, one standard

Individual and department dashboards for acquisitions, dispositions, and title and closing, plus a company performance dashboard - with company totals, agent comparisons as bars, real percentages, and inventory counted as properties rather than dollars.

A home page that knows who you are

Dynamic component visibility shows each user their department's dashboards and their own numbers; an admin-only dashboard covers the CRM package itself.

The KPIs leadership asked for

Speed to Lead, Meaningful Contact Rate, Average Days in Title and Closing, Days in Assignment by month, quarter, and year, Transaction Closing Rate, Cancelled Title-Issue Deals, and Projected versus Actual Profit.

How we did it

Why we fixed the fields before we touched a single chart

When a sales floor says its dashboards are wrong, the tempting move is to rebuild the dashboards. We did the opposite. A dashboard is only ever as honest as the fields underneath it, and three of Green Light Offer's most important fields were structurally broken: the original lead owner was being overwritten on every reassignment, a twenty-second dial counted the same as a real conversation, and there was no way to tell how complete a deal record was. Rebuild the charts on top of that and you get prettier lies. So the first phase was entirely below the surface.

Lead ownership was the subtle one. Because leads are created under intake users' accounts, the "owner" field pointed at whoever typed the lead in, and every round-robin reassignment wiped the last real value. We built a before-save flow that stamps the first genuine acquisitions agent assigned to a lead, skips intake users and queues entirely, and never overwrites itself afterward. It passed in the sandbox and failed in production, which turned out to be its own lesson: a second, older active flow was firing first and blocking ours. Finding that conflict was as much of the job as writing the flow.

The completeness engine was built to survive change. Rather than a static formula that breaks every time the team adds a field, we drove it with custom metadata, so an administrator adds a field to the calculation by creating a record, not by calling us. The opportunity version runs as a bulk-safe trigger that only recalculates when a field actually flips between blank and filled, so a value merely changing from six to eight costs nothing. Meanwhile the contact-qualification rule was reduced to one hard number, 120 seconds, pointed at the call-duration field the client's phone system had genuinely been writing to for years rather than the Salesforce default.

Only then did we rebuild the reporting layer: twenty reports and department dashboards for acquisitions, dispositions, and title and closing, a consolidated company view, and a role-aware home page where each user sees their own numbers and their department's. Because the data underneath was finally true, the KPIs the team had asked for for months - Speed to Lead, Meaningful Contact Rate, Projected versus Actual Profit - were numbers leadership could act on rather than argue about.

How we delivered

Ten weeks, start to finish

1

Diagnose the data

Mid-December: traced why ownership, contact rate, and completeness could not be trusted, and set up a fresh sandbox.

2

Fix at the source

Late December: ownership flow, 120-second contact rule, and the completeness engine built and tested.

3

Rebuild reporting

Late December: twenty reports and the department and company dashboards on corrected data.

4

Production and backfill

January: deployed, historical completion percentages backfilled, the production-only flow conflict found and fixed, role-aware home page live.

5

Refine with the floor

February: metrics revised on client feedback - Speed to Lead, Projected versus Actual Profit - and completeness extended to every opportunity field.

The results

What changed for the business

MetricBeforeAfter
Original lead ownerOverwritten on every reassignmentLocked to the first real agent
Contact rateAny dial countedOnly calls over 120 seconds
Record completenessUnknownLive % on every transaction and opportunity
ReportingWrong counts, per-agent noise20 reports, 4 dashboards, company totals
Home pageSame view for everyoneRole-aware by department and user
Engagement98 hours, fixed scope, every task demoed on video

Dashboards you do not trust? The data underneath is usually the problem.

Book a free 30-minute scoping call. We will look at how your leads, calls, and records are actually captured, and hand you a fixed-scope plan to make the numbers true, at no cost.

Client identifying details have been anonymized at the client's request. Metrics reflect the outcomes of a real engagement.

Ask me anything