Case study · Residential, commercial & agricultural projects

One machine behind eight project launches.

A Sydney developer group running residential releases of 200+ apartments alongside commercial storage and agricultural land holdings. Serious volume, serious spend, and a contact database that had grown one campaign at a time for two years.

Contact counts come from the CRM. The $750M+ figure estimates potential property value associated with campaign enquiries, not confirmed sales or total development value. Project names appear only where already public.

$750M+

estimated property pipeline, not settled sales

5,000

contacts restructured

890

leads on the flagship project

0

failed records in the migration

What the database looked like

  • Two years of campaigns, each with its own question set and no shared structure
  • Nearly 3,000 contacts with no project tag at all
  • No way to answer 'how many leads does this project have' with confidence
  • Bulk campaigns needing a marketer, a designer and a developer to leave the building

What it does now

  • One taxonomy: project, source and stage tags that mean the same thing everywhere
  • Every contact scored, sortable, and attached to a project
  • Sales-stage data reviewed alongside CRM contacts; automatic buyer matching awaits reliable contact access
  • The client writes a plain-English brief in ChatGPT and approves a branded send

What we built

One contact taxonomy across every project

Five thousand contacts collected across two years of Meta campaigns, each with its own question set, were normalised into one structure: canonical project tags, canonical source tags, and Meta form answers written to consistent fields instead of buried in campaign-specific blobs. A lead from a 2024 campaign and a lead from last week now answer the same questions in the same place.

Lead scoring the sales team can act on

A 0–100 score built from contactability, stated budget and timeframe, project fit, and recency. The point is not the number — it's that the list can be sorted, so the first call of the day goes to the person most likely to buy.

Sales-system visibility with human review

The developer's sales platform holds the truth about deposits and approvals. Its available feed lacks reliable buyer contact identifiers, so stage reporting stays separate from CRM contacts until a match can be reviewed by a person. Automatic buyer-level updates remain blocked on that access.

A custom GPT that runs the campaigns

The client works from ChatGPT. They ask for an audience in plain English — a project, a stage, a recency window — get counts back, then a fully branded email preview rendered server-side. Nothing sends without explicit approval, DND is respected, bulk sends need confirmation, and every send is logged with its sender identity.

Brand routing that can't be got wrong

Two brands run out of one system. The project determines the brand, the brand determines the sending identity, and an address that would embarrass the client is rejected outright rather than silently substituted.

Reporting that arrives without being asked

A weekly performance draft — spend, leads, appointments, stage movement — generated on a schedule and delivered for review, instead of rebuilt by hand every Monday morning.

The part most agencies skip

Anyone can run the ads. The expensive problem is what happens to the lead afterwards: which project it belongs to, whether anyone has spoken to it, whether the person has already paid a deposit somewhere else in the business. That is a data problem before it is a marketing problem, and it is why every campaign here starts from a database that can actually answer a question.

Every destructive change in the clean-up was reversible, previewed before it ran, and recorded with an undo. Nothing was applied to five thousand records on a hunch.

Want your database to answer questions?

Start with a paid working session. We map your lead path, your CRM stages and the handful of automations worth building first.