Identity issues
Wrong owner
What it is
A listing is linked to one agent in our data, but the property's original REA record names a different agent as the lister. The listing is sitting on the wrong profile.
Where it came from
Either the repair framework held the move back because it was not sure enough to apply it on its own, or the classifier found the contradiction while checking listings against their REA records.
What to do
- Compare the two cards. The red card is where the listing sits now. The green card is who the REA record says listed it.
- If the green card is clearly the right person — the agency matches the listing, the area makes sense, the co-listers fit — use Approve move.
- If both cards are the same real person with two REA profiles (same face, same agency, overlapping dates), use Reject with the reason "same person". Moving the listing would only shuffle it between two profiles of one person.
- If you cannot tell, use Skip or leave it. Nothing happens until someone decides.
What a correct outcome looks like
The listing ends up on the profile whose REA id matches the raw lister on the property's own REA record, and the agent's sales count and suburb statistics follow it.
Shared person
What it is
One person record holds two agent profiles with different REA ids. This might be one real person with two REA profiles (for example after moving agency), or two different people who were joined by mistake.
What to do
- Compare each profile card: agency, suburbs and states, the first and last listing dates, and the photo.
- One person: the photos match, the date ranges follow on from each other (old agency then new agency), the areas overlap. Use Keep together.
- Two people: different faces, both profiles active at the same time in different places, or different first names. Use Separate.
- Not sure: use Skip. It moves to the Decided tab as skipped and can be picked up again from there.
What a correct outcome looks like
Every agent page shows one real person, with all of that person's listings and none of anyone else's.
Never-absorbed contradictions
What it is
The listing's original REA record names another agent, but nothing moved the listing recently. It has always sat where it is. Often this is the same person whose REA profile id changed, so the "other agent" is really an older or newer profile of the same person.
What to do
- Treat these carefully. Because nothing moved, there is no recent action to undo; approving changes data that has been stable for a long time.
- Approve the move only with strong evidence: the green card is clearly a different real person, the agency on the listing matches the green card, and the co-listers agree.
- If the two cards look like the same person with two REA profiles, Reject with the reason "same person".
- When in doubt, leave it undecided.
No agent record
What it is
The property's REA record names a lister whose REA profile is not in our data at all. There is no green card because we have nobody to move the listing to.
What to do
The only decision is Needs profile collection. It queues a fetch of that REA profile. Once the profile is in our data the case comes back as a normal Wrong owner case with both cards filled in. There is nothing else to decide here.
Twin persons
What it is
Two person records for one agent at the same agency. The left card is a placeholder person created during the July 2026 incident; it usually holds the agent's current REA profile and the sales the REA scrapers record today. The right card is the older real person: it has the CRM contact and the sales the other sources record. Because the search groups by person, the agent shows twice and each row has only part of the sales.
The automatic repair folds the placeholder onto the real person only when the real person has a CRM contact, the placeholder carries nothing that contradicts it (no other email or phone, no second REA profile, no CRM link of its own) and there is exactly one candidate. The "Why this pair was held" list names the check that failed.
What to do
- Approve move when the two cards are the same person: same name, same agency, the photos or contact details agree. The next gated twin run folds the placeholder onto the real person: its profile agent and sales move across, the placeholder is retired, and the search shows one row. Use this even when the real person has no CRM contact, as long as you are sure it is one agent.
- Reject (with a reason) when they are two different people who happen to share a name at the same agency. Nothing moves.
- Skip when you cannot tell. The pair stays in the queue.
Some holds cannot be approved from here: when the CRM already links the placeholder or one of its agents, or when both records hold the same REA id. Those need an engineer or a CRM contact merge first; the reason list says which.
Decided
This tab is the history of every decision made on this page, including skipped cases: who decided, what they chose, the reason, and when.
- Nothing in the data changes at the moment a decision is made. Decisions are collected and applied by the hourly apply job (or by the engineer if the job is switched off).
- Until the job picks it up, a decision can be changed from this tab: open the case, press Change decision and pick again. The latest decision wins.
- Once a run has applied a decision the case shows "Applied by run" and its buttons stay locked. Only the engineer can roll it back from the run's backup.
Queued
The hourly apply job has picked the decision up into a repair run. The row shows Queued in run with the run's short id and the case is locked until the run applies it. That normally happens within the hour; it can take longer when the scrapers are busy.
Needs re-review
The data changed between your decision and the apply, so the run left the case alone instead of guessing. The case goes back to its own tab (Wrong owner, Contradictions, Shared person) with a red Needs re-review chip and a note saying what changed. Read the note, look at the evidence again, and decide again. Your new decision replaces the old one and clears the note.
The Decided tab itself can be switched off by the engineer; when it is, this page still shows every case that needs a person, and the per-person history lives in the Lookup tab.
After you decide — what the system does
A decision is a note to the system, not an edit. Three scheduled jobs read those notes and do the work, each with its own guard rails. This section follows one case from your click until the data is settled.
Where each button sends the case
- Decided Recorded with your name, reason and time. Reversible from the Decided tab until step 2.
- Queued in run The hourly apply job (every hour, on the hour) collects up to 200 approved decisions, builds one repair run from them and locks the cases. Row shows the run's short id.
- Applied The run moves the listings (or splits the person), writes a backup of every row it touched and marks the case applied. Buttons stay locked; only the engineer can roll it back from the backup.
- Needs re-review Instead of step 3 when the evidence changed between your decision and the run — a collector re-wrote the listing, or someone else moved it. The run leaves that case alone, writes a note saying what changed, and hands it back to you. Decide again; the new decision goes through steps 1–3 afresh.
- Decided Recorded with your reason. The case is closed on the spot and shows in the Decided tab.
- Nothing runs No job picks it up and no data changes. The decision is the record that a human looked and chose "leave it". Change decision reopens it any time.
- Decided Recorded; the case waits for the collector.
- Collected The profile collector (every hour, at half past) fetches the missing REA profile, creates the agent and person through the normal ingestion path, and reopens the case under Wrong owner with the new agent on the green card.
- Back to you You now approve or reject the move like any other wrong-owner case. From there it follows the first lane.
- Dismissed If REA no longer has that profile (retired id), the case is closed with a note saying so — there is nothing to move it to.
- Skipped Parked in the Decided tab as skipped. No job touches it. Pick it up again from there whenever you have more information.
The three jobs
- Apply job — every hour, on the hour
- Reads approved moves and separations decided in the last 14 days (older ones are reported as stale and need a fresh decision — press Change decision and confirm again). Builds a run, then applies it in a small canary batch of 20 first: if any case in the canary has drifted, the whole run stops there, applied cases stay applied, the rest go back to you as Needs re-review. Otherwise it continues in batches of 100 until the run is done. It waits for the next hour if the scrapers are mid-write. Every run posts a one-line Telegram summary. While the auto-apply switch is off it only reports how many decisions are waiting; the engineer applies them by hand.
- Profile collector — every hour, at half past
- First reopens any no-agent-record case whose lister already has an agent by now (no fetch needed). Then fetches up to 30 requested profiles per run, two to five seconds apart, and reopens their cases as wrong-owner. Retired profiles close with a note.
- Statistics refresh — Saturday night
- The CRM's agent search does not read listings live; it reads the suburb statistics table, which is rebuilt every Saturday night. So an applied move shows on the agent's CRM page straight away (that page reads listings live) but the sales counts used by search catch up at the next rebuild. Stale rows left on the old holder are cleared by the engineer's purge step, which runs after a batch of moves.
When is a case settled?
Approved: the case shows "Applied by run …", the listing sits on the green-card profile, and the agent's statistics have been rebuilt since. Rejected, kept together or dismissed: settled the moment the decision is recorded. Skipped: not settled — it is waiting for you.
Suggestions and bulk decisions
Suggestion chips (Shared person tab)
Every shared-person case carries a machine hint, recomputed nightly. It is never a decision — it sorts the queue so the easy ones go first.
- Likely same person
- The same headshot file is on both profiles (REA stores one file per upload, so an identical file means the same photo was uploaded twice), or both profiles carry the same mobile number or email. The usual outcome is Keep together.
- Likely different people
- Different headshots and no state in common between the two profiles' listings. The usual outcome is Separate — but look at the photos: family members and namesakes in different states are exactly this shape, and so is one agent who moved interstate.
- Needs a look
- Nothing strong either way (different headshots in the same region is the common case — a new headshot at a new agency is normal). Decide from the cards.
Bulk decision on a hint
Filter the Shared person tab by a suggestion and a bar appears offering the matching decision for every listed case — Keep together — all N or Separate — all N. Spot-check five or ten cases first; then confirm once, with an optional reason recorded on every case. Cases another reviewer holds are skipped and counted in the message. Every case still goes through the same path as a single decision: recorded now, applied by the hourly run (for Separate), reversible until then from the Decided tab.
Rule decisions (Wrong owner and Contradictions tabs)
Every night the system records the two decisions a reviewer makes every time, so the queue keeps only the cases that need a person. They show on the Decided tab with the reviewer Rule: same person, different profile (the evidence target is another profile of the same person — rejected, nothing to move) or Rule: colleague mis-credit (a different person at the same agency is the proven lister — approve move). They go through the same hourly run as your own decisions and can be changed from the Decided tab until then. Cases you are holding at the time are left alone. Same-name cases on different persons, different-agency cases and cases whose lister is not in our data are never decided by rule.
Same pair (Wrong owner and Contradictions tabs)
A ×N same pair badge means the same holder and the same evidence target appear on N open cases — one question asked once per listing. After you decide one of them, the case offers Yes, all N to record the same decision (and reason) on the rest, skipping any held by another reviewer. Decline with No, just this one when the listings differ in a way that matters.
Lookup
What it is
Any agent in our data, with or without an open case. Search by name, person number (#123), agent id, REA profile id or CRM contact id. The person opens with the same profile cards as a shared-person case — photo, REA link, agency, listings, active range, states, email and phone with same-value ticks, CRM contact — plus a History list: the merges the person took part in (weekly merge review, same-mobile merges, legacy tools), every repair unit applied to it, and every decision recorded on it. That list is why the record looks the way it does.
What to do
- Re-check a record you doubt: open it, read the history, compare the profiles. If it is right, do nothing — there is nothing to record.
- A profile on the wrong person (a legacy merge joined two different people): press Make independent on that profile. It becomes its own person record with its listings, statistics and — if the CRM contact represents that profile — its contact.
- A profile that belongs with another person (two records for one human): press Attach to…, find the right person, confirm. The profile moves with its listings; if that leaves the old record empty, the empty record is retired onto the destination.
- Changed your mind before the hourly run picked it up: Withdraw on the same card.
What a correct outcome looks like
Every person record holds exactly the profiles of one human; the chip on the card reads "applied" after the next hourly run, and the History list shows the move.
Buttons
Every button records a decision the moment you confirm it. Pressing a button opens a small confirm panel that says in plain words what will happen and asks for a reason (required for Reject, optional otherwise). Nothing changes in agent or listing data on the spot; the decision is applied by the hourly apply job (or by the engineer if the job is switched off). Until the job picks it up a decision is reversible from the Decided tab. Applied runs are backed up and the engineer can roll them back.
- Approve move
- Records that the listing should move from the red card to the green card. Takes effect when the hourly apply job picks it up.
- Reject
- Records that the listing should stay where it is. A reason is required; "same person" is the usual one. The case closes the moment you confirm; no job runs for it and no data changes.
- Separate
- Splits the profiles you tick off a shared person. Tick one or more profile cards; the selected profiles move together onto one new person record, with their listings and statistics. When more than one is ticked, pick the Parent — the profile whose name and identity the new person takes. At least one profile always stays on the original person. Takes effect at the next apply.
- Keep together
- Records that the profiles on a shared person are one real person. The case closes the moment you confirm; no job runs for it and no data changes.
- Needs profile collection
- Queues a fetch of the missing REA profile. The case reopens with both cards once the profile is in our data.
- Skip
- Leaves the case undecided and moves it to the Decided tab as skipped. Changes no data and can be picked up again from there any time.
- Change decision
- Shown on a case that already has a decision. Unlocks the buttons so you can record a different one; the latest decision wins. Not available while the decision is queued in a run, or once a run has applied it.
- Claim next 10
- Holds the first ten unclaimed cases on the current page for you so two reviewers do not work on the same case. It stops at the first case someone else holds. A claim expires on its own if you leave.
Claims
Opening a case holds it for you. While you hold it, other reviewers see Being reviewed by your name on the row and their decision buttons are locked; you see You're reviewing on your own rows. Closing the case frees it. A claim also expires by itself a couple of minutes after you leave the page, so nothing stays locked for long.
- A row held by someone else can still be opened to look at, but its buttons stay locked until they close it.
- Claim next 10 holds the first ten free cases on the page in one go. Those stay yours until you decide them, they expire, or you leave the page.
- The header shows how many reviewers are on the page right now.
Reading the evidence
- Raw lister
- The agent named on the property's own REA record. This is the ground truth: REA publishes the listing with the agent who actually listed it. Everything else on the page is measured against it.
- REA profile id
- The number in the agent's REA profile address. Two cards with different REA ids may still be one person, so use the id together with the photo and agency.
- Agency on the listing
- The agency REA shows on the listing. If it matches the green card's agency and not the red card's, that supports the move.
- Co-listers
- Other agents named on the same REA record. If they are colleagues of the green card's agency, that supports the move.
- Photo
- The quickest way to tell one person from two. Missing photos prove nothing either way.
- CRM contact and statistics rows
- A CRM contact means staff and customers can see this agent. Statistics rows are the suburb sales figures built from the listings; they follow the listing when it moves.
Impact badges
- CRM-linked
- One of the agents in the case has a CRM contact. Whatever we show that contact, or show customers about them, is affected.
- Referral-eligible
- The agent can receive referrals. A wrong listing changes their sales figures and can change which agents a customer is offered.
- Recently emailed
- A customer email went out recently naming this agent. A wrong link here is already in front of a customer.
Cases with these badges sort first because a mistake there reaches a customer or an agent we work with, not just a statistic.
When to escalate
Skip the case and flag it to Felix when any of these apply:
- A customer email is involved (the Recently emailed badge, or you know one went out).
- A live referral is attached to either agent.
- More than two profiles sit on one person.
From Agent Review
On the Agent Review page each row has a small Flag identity issue button. Type a short reason and it opens a case on this page for that person; if a case already exists you are told it is already flagged.