Match New Inventory Against Your Own Database Every Morning

All Things AI · Season 3 · What You Can Build · Episode 12

Every morning, what is new gets run against everyone you already know, and you get a short list of who should hear about it today. Your database stops being a list you feel guilty about and becomes the thing that generates your week.

The database everyone has and nobody uses

Every agent has hundreds or thousands of people in a system. Past clients, people who enquired two years ago, people who were nearly ready and then were not, people who told you exactly what they wanted and then went quiet.

That information is sitting there. What they wanted, where they wanted it, what stopped them. It was captured because capturing it seemed obviously worthwhile.

And then it is never consulted, because consulting it means reading through hundreds of records against whatever is new today, and nobody has an hour every morning for that. So the database becomes an archive, and the guilt about not working it becomes a permanent low-level feature of the job.

What the morning job actually does

It takes what is new. It reads your records. It works out who, specifically, would want to know about which one, and why.

The output is not a list of everything new and it is not a mass message. It is a short list with a reason attached to each name: this person, because eighteen months ago they said this, and this one matches it.

That reason is the entire product. A name without a reason is a cold call you will not make. A name with a specific reason from your own records is a conversation you will happily have, and it is a conversation the other person is glad to receive.

Why matching on meaning changes the result

A filter matches fields. It finds people whose recorded criteria contain the same values, and it misses everyone whose situation was described in words rather than entered in boxes.

Most of what people actually tell you is in words. They wanted somewhere the kids could walk to school. They needed a room for a parent moving in. They said the last place was too far from work and they were not doing that again.

None of that is a field, and all of it is a match. A model reading the notes rather than the fields finds these, and they are consistently the best names on the list because the reason is specific and human rather than a set of criteria being met.

How you set it up

Three inputs and a schedule.

  • Access to your records, including the notes rather than only the structured fields, because the notes are where the useful information actually is.
  • Whatever your source of new inventory is, in whatever form it already arrives.
  • A brief describing what a good match looks like and, more importantly, what a bad one looks like, because the failure mode is a list that is too long and too loose.
  • A schedule, early, so the list is waiting before the day starts rather than arriving during it.

Keep the list short on purpose

The instinct is to want every possible match. That instinct produces a list of forty names, which produces zero calls.

Five is the right number. Five names with genuine reasons get acted on, and a system that produces five good ones every morning generates more contact in a month than one producing forty that get ignored.

Instruct it accordingly. Tell it to return only matches it would defend, and to return nothing on a morning when there is nothing worth sending. A system willing to say there is nothing today is a system you can trust on the mornings it says there is something.

You make the contact

The list is the output. The call is yours.

The temptation once this is working is to close the loop and have it send the messages too, and that is the moment this stops being valuable. The reason a match with a specific reason works is that it arrives as a person who remembered something, and the entire value evaporates if it arrives as an automated message that happens to contain a detail.

The system does the part that was impossible, which is reading everything against everything every morning. You do the part that was always the point.

Where this goes wrong

Four failures.

A stale database. This is the big one, and it is why the episode on operating your CRM matters more than it sounds. Matching against records that were accurate three years ago produces confident matches to circumstances that no longer exist.

Matching only on structured fields. If it reads the boxes and ignores the notes it will produce the same results your existing filters produce, which is the thing you already had.

Lists that are too long. Covered above and it is the most common way this quietly dies. Forty names is the same as no names.

Automating the outreach. The specificity is what makes it work and automation is what destroys the specificity, no matter how well the message is written.

What a good match actually reads like

Worth being concrete, because the difference between a list you act on and a list you ignore is entirely in the wording of the reason.

A weak reason is criteria-shaped: this person was looking in that range, and this is in that range. That is a filter result with a sentence around it, and you will not call anyone on the strength of it.

A strong reason is situational and quotes your own record back at you: fourteen months ago this person said they were giving up because everything they saw needed work they did not have time for, and this one does not. That is a call you will make before lunch, because you already know what to open with.

So instruct it to quote the note. Not to summarise the person, not to characterise them, but to give you the actual line they said and the specific thing that now matches it. The quote is what turns a name into a conversation, and it is also how you check the match is real rather than inferred.

What it grows

Repeat and referral, by making the database an active asset rather than a source of guilt.

Everyone in this industry knows the money is in the database and almost nobody works it, for the entirely rational reason that working it properly has never been possible in the time available. The failure was never discipline. It was arithmetic.

This changes the arithmetic. Reading everything against everything every morning takes a machine no time at all, and what comes out the other side is five conversations you would not otherwise have had, on a day you would not otherwise have had them.

What it costs

Small, and free if it runs against a local model, which it can. This is repetitive structured reading rather than difficult reasoning, which is exactly what open models running on your own machine handle well. It also keeps your database on your own machine, which is where it should be.

Questions agents actually type

Can AI match new listings to my past clients?

Yes, and it can do it every morning against your entire database. The useful version reads the notes rather than only the structured fields, because most of what people told you about their situation was said in words rather than entered in boxes.

How is this different from a saved search or filter?

A filter matches recorded criteria and misses everyone whose situation was described in words. A model reading the notes finds the person who said they needed a room for a parent moving in, which is never a field and is consistently the best match on the list.

How many matches should the system give me each day?

About five. A list of forty gets ignored entirely, and five with genuine reasons get acted on. Instruct it to return only matches it would defend and to return nothing on a morning when there is nothing worth sending.

Should the AI send the message too?

No. The reason a specific match works is that it arrives as a person who remembered something about them. Automating the outreach destroys exactly the quality that made it effective, no matter how well the message is written.

Book a free 15-minute call →

Season 1 is Claude Code for Real Estate Agents, filmed and on its own hub. All three seasons: AI for real estate agents.