11·Marketing
Listing & Campaign Intelligence
A weekly intelligence pipeline for a Dubai brokerage: collect what the market is listing, check the data before trusting it, score every listing for visibility, re-verify the biggest movers, and send a report only if the numbers survive their own quality gates. When they do not, it sends the alert instead.
ResultRan weekly to a single recipient at the brokerage.
[ Ask about this build ]01Discover
Why it exists.
A property portal is a ranked shelf. Where a listing sits on it decides whether anyone sees the property, and the brokerage was reading that position the way everyone does, by opening the site and scrolling. That answers the question for one listing, on one day, for whoever happened to look.
The pipeline answers it for the whole shelf, every week, without anyone opening a browser: what the market is listing, where each listing sits, what moved since last week, and how the brokerage places against the agencies it competes with. The hard part was never the collecting. It was building something that could run unattended for months and still be worth believing on a week nobody was watching.
02Define
The brief.
Tell a brokerage where its listings stand against the market each week, and be trustworthy enough that nobody has to check the numbers by hand.
03Develop
What it took
Skills behind it.
Primary discipline plus the support stack.
Skills demonstrated
- Data PipelinesPrimary
Five stages, each allowed to stop the next: collect from several sources in parallel, validate against schema and duplicates, score, re-verify the top movers with a second independent fetch, then report. The verification pass exists because a ranking that cannot be reproduced twice in a row is not a ranking.
- Backend EngineeringPrimary
Ran unattended on a schedule, which is a different engineering problem from running on demand: it has to decide on its own whether what it collected is worth sending, and be diagnosable weeks later by someone reading a log file rather than watching it work.
- Marketing & BDSecondary
The output is a competitive visibility picture rather than a data dump: where the brokerage placed against the agencies it competes with, which listings moved, and what to do about it, in a form a commercial reader can act on without opening a dashboard.
- ResearchSupporting
The scoring is a visibility proxy, not a claim to know a portal's ranking algorithm, and it is built and described as one. A proxy that is honest about being a proxy survives the platform changing its mind; a reverse-engineered ranking does not.
Develop · Build
How it came together.
- 01
Five stages, each allowed to stop the next
Collect from several sources at once, validate what came back against schema and duplicates, score every listing, re-verify the biggest movers, then report. The stages are gated rather than sequential: validation can refuse to hand data to scoring, and scoring can refuse to hand a week to the report. A pipeline that always produces output is a pipeline that will eventually produce confident nonsense.
Data Pipelines - 02
Re-fetch the movers, because a ranking should reproduce
The listings that moved most are the ones a reader will act on, and they are also the ones most likely to be an artefact of when the page was fetched. So the top movers get a second independent fetch and the two results are compared. Anything that will not reproduce is marked unverified rather than quietly reported, which turns the interesting numbers into the ones carrying the most evidence instead of the least.
Backend Engineering - 03
It sends the alert, not the report
When the quality gates fail, the job does not send a degraded report with a caveat at the top. It sends an alert saying the week is not trustworthy and why. That is the whole design position: a weekly report that is wrong once is worse than one that is missing once, because the wrong one gets believed and quoted in a meeting. The same guard covers an empty run, so a collection that silently returns nothing raises an alarm rather than an empty PDF.
Research - 04
Built to be diagnosed weeks later
Unattended jobs fail while nobody is watching, so the failure has to be legible afterwards to somebody reading a log rather than watching it run. That principle got tested the hard way: the job stopped for two months, and the logs it left behind were 116 bytes containing nothing but a start line, because of how the output was being captured rather than anything wrong with the work. Three genuine defects were sitting behind that silence, invisible until the logging was fixed. The lesson was not the bugs. It was that a job which cannot explain its own death buys you nothing by dying quietly.
Backend Engineering
04Deliver
What shipped.
Ran weekly to a single recipient at the brokerage. The last delivered edition covered 1,752 listings across 30 competing agencies. The collection layer still runs continuously against two portals; the weekly report is paused, because the brokerage has since left the platform the report was built to track it on.
The last delivered edition covered 1,752 listings across 30 competing agencies, with the brokerage placed 20th. The collection layer still runs continuously against two portals and passed every quality gate on its most recent full run, over four thousand listings across eleven communities in sale and rent. The weekly report itself is paused, and not because it broke: the brokerage has since left the portal the report was built to track it on, so the market half of the question still has an answer and the own-listings half no longer does. Retiring a report when its subject disappears is the same discipline as refusing to send one that will not survive its gates.
By the numbers
Listings, last edition
across 30 agencies
Stages, gated
collect to send
Cadence when live
one recipient
See also
Marketing
SEO · AEO · GEO Toolkit
An audit and scoring toolkit for staying visible in AI answers (ChatGPT, Perplexity, Claude) as well as Google search.
AI / ML
Data Centre
BARNES Dubai's internal data tooling: an entity-centric valuation platform and AVM, absorbed into a broker tool over ~840,000 ownership records.
