Real Estate Investment · Deal SourcingFour Disconnected Tools, Now One System
Adana Capital — industrial & outdoor-storage acquisitions · adanacap.com ↗
- 358 → 1,178
- Properties the buy box lets into the enrichment queue, once the score layered on top of it was deleted
- 61.5s → 10s
- Ingesting a ~500-row CoStar export. The path it replaced timed out with 449 of 489 rows written and no summary returned
- 0 of 532
- CoStar listings that arrived carrying an email address. Every contact is looked up afterwards, at about 2.2¢ each
How it used to work
A saved search exported by hand, a CRM the rows were re-typed into, Instantly, and SimpleTexting. Four tools, and the same broker living in three of them.
CoStar export · one row
Dwayne Ferro · Ferro Yard Holdings
(214) 555-0148 · no email address
re-typed by hand, three times
The CRM
- name
- Dwayne Ferro
- phone
- (214) 555-0148
- missing
Instantly
- name
- D. Ferro
- dferro@ferro… (guessed)
- phone
- missing
SimpleTexting
- phone
- (214) 555-0148
- name
- missing
Three answers, one broker
update any one of them and the other two were quietly wrong
Run the saved search on CoStar. Export it. Re-type the rows into a CRM. Copy the good ones again into an Instantly list, and the phone numbers into SimpleTexting. Every step between those tools was a person copying a row, and the copy was the only thing holding them together, so the same broker existed in three places at once, with nothing anywhere saying which one was current.
The same contact, three times
CRM, email tool, SMS tool. Update one and the other two were quietly wrong.
Not one email in the export
Zero of 532 CoStar listings carried an address. Every one had to be found by hand.
A shortlist nobody could defend
Which properties made the cut depended on who did the exporting that week.
No answer to “where does this stand?”
Four tools, four partial answers, and no way to tell which was current.
How it works now
One record per property, one buy box that passes or fails, and one person who says go.
Coverage decides which ceiling applies. The ceiling decides everything else.
FAR under 10%
price ÷ land SF
under $17 PLSF
A land play. The building is nearly incidental, so value the dirt.
FAR 10–18%
price ÷ land SF
under $23 PLSF
Still land-led, but the improvement is worth something.
FAR over 18%
price ÷ building SF
under $120 PSFB
A building play. You are buying the box, so value the box.
There is no near-miss band. A property at 105% of its ceiling is over it, and a third outcome was a side door back into the pipeline. And there is no score: this is the whole judgement.
Getting the listings
Export, then re-type into the CRM
Drop the export in a folder and it ingests itself
Deciding what to chase
A judgement call, made fresh every week
One buy box: which FAR band, then that band’s ceiling
The shortlist
A 1–10 score nobody could defend
Pass or fail, and the one line that says why
A listing with no price
Dropped, with nothing to score it on
Kept, because asking the broker the price is the point
Finding the email
Looked up by hand, one broker at a time
Looked up in batches, about 2.2¢ a verified address
Sending
Log into Instantly and rebuild the list
Approved targets land in the list they were approved into
Before anything sends
Whoever built the list decided
At Gate 1 a person approves, or nothing goes
The gateway is one database with one decision in it. A property is kept when three things hold: somebody is named on it, its floor-area ratio can be computed from the building size and the acreage, and any price it carries sits under the ceiling for the band the FAR puts it in. Under 10% coverage is a land play, so it is valued on the dirt; over 18% is a building play, so it is valued on the box. Nothing else is judged.
There used to be a 1–10 conviction score on top of that, and it went through the whole arc. It was given a definition only after it turned out the agent had invented a rule of its own and applied it to 684 properties on a scale where 8, 9 and 10 were arithmetically unreachable. Then it was deleted outright: the buy box already decides, and a second opinion layered on top of it was rationing the queue instead of improving it. What remains is a paragraph the agent writes to explain a property to the person at the gate, and nothing in the system reads that paragraph. It is context for a human, not a control.
A property that fails is archived with a reason that is recomputable, so a later export carrying the missing price, the missing columns or a broker’s name revives it on its own, with nobody going back to look for it.
Same problem in your business?
Book 30 minutes. We'll look at how it runs for you now, and what a build would cover.
A week, end to end
- PipelineCollect & enrichAutomated + human
The exports Adana downloaded are ingested from a folder on their own machine, and the emails the listings never carried are looked up
Mondays, 9am and 11am · on Adana’s own machine, because no cloud job can reach that folder
Mondays, 9am and 11am · on Adana’s own machine, because no cloud job can reach that folder
- PipelineRe-screenAutomated
The price screen is recomputed against the buy box. It refreshes the verdict. It does not open the gate
Tuesdays · one daily cron, fanning out by weekday
Tuesdays · one daily cron, fanning out by weekday
- Gate 1Approve targetsHuman
Two queues: priced ones to pitch, unpriced ones to ask about. Approving picks which campaign they land in
On no schedule at all, and this step blocks everything downstream of it
On no schedule at all, and this step blocks everything downstream of it
- CampaignsOutreachAutomated
Approved leads are pushed to the sending tool, and the campaign figures come back
Monday, Wednesday, Friday
Monday, Wednesday, Friday
- RepliesHandle repliesAutomated + human
Replies sync in every morning; a person reads each one and marks it
Every morning, 7am Central
Every morning, 7am Central
Nothing catches up. A missed Monday is a missed week, and that is deliberate. A backfill that quietly processed three weeks of exports at once would spend three weeks of lookup credits in one morning.
See it working
The gateway itself and the plugin that drives it, running on invented data. These are not screenshots, so click anything.
The gateway
The web app every deal runs through. Every screen clickable, on invented data.
- Four hundred and eighty properties, each passed or failed by the same buy box
- Gate 1 with both queues, priced to pitch and unpriced to ask about
- Flip every price column to dollars per square foot and watch the bands make sense
- Turn on the rejected properties and read why each one was dropped
The plugin
What the automation actually is: eight tools, six skills, and a Monday played back. Invented figures.
- The contract: what it may do, and what it has no tool to do
- Six skills, and the tools each one is allowed to call
- A 489-row export ingested in three batches, step by step
Four things in there are worth finding. Go and look.
- 1A property that has waited seventeen days for an email address. The lookup found the person and a direct line, and no address. So it is queued, not rejected, and that difference is the whole point of the status. Try the lookup again; it fails again, for the same reason.
- 2One campaign is bouncing at 6.8% while the workspace average sits at a healthy 3.3%. The warning names the campaign, because averaging the good ones with the bad one is exactly how this gets missed.
- 3An unpriced listing at Gate 1 that would be over its ceiling if the broker answers with what the two comps nearby suggest. It is kept anyway, because screening on a guessed price is not screening.
- 4A property that was archived in July for being over its ceiling, and is back in the pipeline now. A later export carried a lower price, the buy box re-decided it, and it walked back in without anybody going to look for it. Its history records both verdicts.
Everything else screens cleanly. Each of these is the system doing its job on an awkward case, not an awkward case getting through it.
Everything else runs on its own. This does not.
Ingest, screening and the email lookup all happen without anyone watching. One checkpoint is deliberately manual: a person approves a target and picks which campaign it is approved into. Nothing sends before that. Try it on these three.
0 of 3 decided
4180 Gaylord Yard Rd
Baytown, TX · 6.4 ac · 24,800 SF · $3.2M · FAR 8.9% [<10%]
Land play: $11.48 per land square foot against a $17 ceiling. The shed is nearly incidental.
900 Kirby Spur Dr
Houston, TX · 3.1 ac · 41,000 SF · $4.4M · FAR 30.4% [>18%]
Building play: $107.32 per building square foot against a $120 ceiling. Here you are buying the box.
2755 Sabine Crossing
Laredo, TX · 11.2 ac · 96,300 SF · no list price · FAR 19.7% [>18%]
No price, so nothing was screened. The band says the ceiling would be $120 per building SF, and two comps in the submarket closed at $126 and $131. That is a question, not a rejection.
What Adana still decides
- Nothing is contacted without Gate 1. The agent can put a property in front of a person; it has no tool that moves one past one.
- The buy box is the only judgement in the pipeline. The agent writes a paragraph explaining a property to the approver, and nothing in the system reads it.
- It never drives a browser. Adana signs into CoStar, Reonomy and LexisNexis and drops the file in a folder, so there is no session to hijack and no credential to hand over.
- Spending money on a question is a decision, not a default. Enriching the unpriced half costs real credits against properties with no known price, so it sits behind a flag. If nobody has answered, the run reports the count as waiting instead of blocking on an answer nobody is there to give.
Want this running for your business?
We'll build the same kind of system around how your business runs. You see a clickable demo before you commit.
See if we're a fit →