Our own ops

Note to Self

I stopped opening the CRM from the truck. Now a screenshot of the text thread writes the note and the task.

Claude MCP Close CRM ClickUp
daily · Close + ClickUp · manual task entry retired ·

I wasn’t going to open the CRM

A seller texts me while I’m driving. Or a partner sends three screenshots from a walkthrough he just did — the real reason they’re stalling, what the roof actually looks like, the number they’d actually take.

To get that into Close I have to pull over, open the app, find the lead, retype what he told me, set a task. So I don’t. I tell myself I’ll do it tonight.

I don’t do it tonight.

Do that for a month and the pipeline is fiction. Opportunity value sitting at zero on a deal I’ve already made an offer on. Stage says “open to sell” when we’re three rounds into negotiating. A contact saved under a name the guy has never once spelled that way. And I don’t find out until I’m building an offer off a record that’s four conversations stale.

So I built the shortest path between the two. Screenshot in, CRM updated.

What it does

Send it the screenshot. It reads the thread — multiple shots get put back in order off the timestamps — and pulls out who’s actually who (a partner walking a unit is recon, not a seller conversation), the condition, any number that got mentioned, what somebody promised to send, and why they’re not moving. That last one it sorts into emotional, price, or timing, because those are three completely different problems.

Then it writes a pinned note on the lead and one follow-up task, due whenever the thread said it was due. “Sending HOA docs this week” becomes a task due Thursday.

    <rect x="16" y="52" width="140" height="116" fill="var(--color-xv-bg-tertiary)" stroke="var(--color-xv-border)"/>
    <text x="30" y="72" fill="var(--color-xv-text-muted)" letter-spacing="1.4">THE THREAD</text>
    <rect x="30" y="84" width="86" height="15" rx="7" fill="var(--color-xv-border)" opacity=".55"/>
    <rect x="46" y="105" width="96" height="15" rx="7" fill="var(--color-xv-border)" opacity=".85"/>
    <rect x="30" y="126" width="70" height="15" rx="7" fill="var(--color-xv-border)" opacity=".55"/>
    <text x="30" y="158" fill="var(--color-xv-text-muted)" font-size="10">3 SCREENSHOTS</text>

    <line x1="158" y1="110" x2="206" y2="110" stroke="currentColor" stroke-width="1.2" marker-end="url(#nts-a)"/>
    <text x="182" y="101" fill="var(--color-xv-text-muted)" font-size="10" text-anchor="middle">send</text>

    <rect x="214" y="26" width="234" height="168" fill="var(--color-xv-bg-tertiary)" stroke="var(--color-xv-border)"/>
    <text x="230" y="48" fill="var(--color-xv-accent)" letter-spacing="1.4">READS FOR</text>
    <text x="230" y="74" fill="var(--color-xv-text-secondary)">whose side they're on</text>
    <text x="230" y="96" fill="var(--color-xv-text-secondary)">condition</text>
    <text x="230" y="118" fill="var(--color-xv-text-secondary)">any number said out loud</text>
    <text x="230" y="140" fill="var(--color-xv-text-secondary)">what got promised</text>
    <text x="230" y="162" fill="var(--color-xv-text-secondary)">obstacle type</text>
    <text x="230" y="180" fill="var(--color-xv-text-muted)" font-size="10">emotional / price / timing</text>

    <line x1="450" y1="110" x2="498" y2="110" stroke="currentColor" stroke-width="1.2" marker-end="url(#nts-a)"/>
    <text x="474" y="101" fill="var(--color-xv-text-muted)" font-size="10" text-anchor="middle">one lead</text>

    <polygon points="562,54 626,110 562,166 498,110" fill="var(--color-xv-bg-tertiary)" stroke="var(--color-xv-accent)" stroke-width="1.4"/>
    <text x="562" y="106" fill="var(--color-xv-accent)" font-size="10.5" text-anchor="middle" letter-spacing="1">MY LEAD?</text>
    <text x="562" y="122" fill="var(--color-xv-text-muted)" font-size="9.5" text-anchor="middle">owner check</text>

    <line x1="628" y1="110" x2="676" y2="110" stroke="var(--color-xv-accent-pass)" stroke-width="1.3"/>
    <line x1="676" y1="68" x2="676" y2="152" stroke="var(--color-xv-accent-pass)" stroke-width="1.3"/>
    <line x1="676" y1="68" x2="700" y2="68" stroke="var(--color-xv-accent-pass)" stroke-width="1.3" marker-end="url(#nts-p)"/>
    <line x1="676" y1="152" x2="700" y2="152" stroke="var(--color-xv-accent-pass)" stroke-width="1.3" marker-end="url(#nts-p)"/>
    <text x="650" y="101" fill="var(--color-xv-accent-pass)" font-size="10" text-anchor="middle">yes</text>

    <rect x="702" y="42" width="238" height="52" fill="var(--color-xv-bg-secondary)" stroke="var(--color-xv-accent-pass)"/>
    <text x="718" y="64" fill="var(--color-xv-accent-pass)" letter-spacing="1.2">PINNED NOTE</text>
    <text x="718" y="82" fill="var(--color-xv-text-muted)" font-size="10">structured, on the lead</text>

    <rect x="702" y="126" width="238" height="52" fill="var(--color-xv-bg-secondary)" stroke="var(--color-xv-accent-pass)"/>
    <text x="718" y="148" fill="var(--color-xv-accent-pass)" letter-spacing="1.2">ONE TASK</text>
    <text x="718" y="166" fill="var(--color-xv-text-muted)" font-size="10">due when the thread said</text>

    <line x1="820" y1="180" x2="820" y2="202" stroke="var(--color-xv-text-muted)" stroke-width="1" stroke-dasharray="3 3"/>
    <text x="820" y="216" fill="var(--color-xv-text-muted)" font-size="9.5" text-anchor="middle">unless an open task already covers it</text>

    <line x1="562" y1="168" x2="562" y2="244" stroke="var(--color-xv-accent-fail)" stroke-width="1.4" marker-end="url(#nts-f)"/>
    <text x="576" y="208" fill="var(--color-xv-accent-fail)" font-size="10">no</text>
    <rect x="418" y="248" width="290" height="50" fill="var(--color-xv-bg-secondary)" stroke="var(--color-xv-accent-fail)" stroke-width="1.4"/>
    <text x="434" y="270" fill="var(--color-xv-accent-fail)" letter-spacing="1.2">STOPS. WRITES NOTHING.</text>
    <text x="434" y="288" fill="var(--color-xv-text-muted)" font-size="10">reports back, touches no record</text>

    <path d="M330 196 V 346 H 696" fill="none" stroke="var(--color-xv-text-muted)" stroke-width="1.1" stroke-dasharray="4 4" marker-end="url(#nts-m)"/>
    <text x="344" y="338" fill="var(--color-xv-text-muted)" font-size="10">can't prove it &#8594;</text>
    <rect x="702" y="320" width="290" height="52" fill="var(--color-xv-bg-secondary)" stroke="var(--color-xv-border)" stroke-dasharray="4 4"/>
    <text x="718" y="342" fill="var(--color-xv-text-muted)" letter-spacing="1.2">RECOMMENDS ONLY</text>
    <text x="718" y="360" fill="var(--color-xv-text-muted)" font-size="10">stage · opportunity value · contact edits</text>
  </g>
</svg>
Four exits, two of which write something. The gate and the dashed path are the whole design — everything a wrong guess would cost me sits on the side that never writes.

What it won’t do

This is the part I actually care about.

It confirms the lead is mine before it writes a single character. Not mine, it stops and tells me. Doesn’t touch it.

It reads my open tasks first. If something already covers the next move, it won’t stack another one on top — it tells me to sharpen the one I’ve got.

And it won’t change a pipeline stage, an opportunity value, or a contact record on its own. It surfaces them and waits. It will never guess a dollar amount.

I built the guardrails because I’m the one who cleans up the pipeline when it’s wrong. Something that writes confidently to my CRM is worse than nothing.

The part I didn’t plan on

Every thread I log turns into an audit. It’s already comparing what the screenshot says against what the record says, so it just tells me where they disagree. Half of what it flags now has been wrong in there for weeks.

In — what I sentiMessage

Walked the duplex. Roof's newer than the listing says, maybe 4 years. Kitchen's original.

Furnace is shot though. He knows it.

Did he say a number?

Said he'd take 240 but he's weird about it — his mom lived there. Kept bringing her up.

He's sending me the HOA docs this week.

Out — what it wrotepinned note

SOURCE:  Partner walkthrough, relayed by text.
CONDITION:  Roof ~4 yrs (newer than listing).
           Kitchen original. Furnace failed —
           owner is aware.
PRICE / TERMS:  Owner stated $240K.
** OBSTACLE **  EMOTIONAL — mother lived
           in the property; raised repeatedly.
PENDING:  HOA docs from partner, this week.
NEXT STEPS:  1) Get HOA docs
           2) Approach as sentimental seller,
              not a price negotiation

+ TASK FOLLOW UP — HOA docs + sentimental-seller approach
due Thursday · from "this week"

Illustrative — composite, not a real thread

The obstacle line is the one to notice. "He's weird about it, his mom lived there" never survives the trip into a CRM by hand — and it's the thing that decides how the next conversation goes.

Where it ended up

At least once a day now, between Close and ClickUp. I almost never update tasks in the actual software anymore — I send a screenshot and it’s done.

That’s not what I set out to build. I just wanted to stop losing seller intel in my text messages.

The old version of this was a note to self. This one actually gets written.

Build your own version

None of this is specific to Close, or to real estate. The five slots below are the whole design — mine are filled in, yours are the questions to answer. The order matters: refusals get written before actions, or you’ll spend more time cleaning up than you saved.

01

The entry point you avoid

Opening Close from the truck to log something a partner just told me.

The screen you know you should open on your phone and never do.

02

An input you already produce

Screenshots. I was already taking them — they just died in my camera roll.

Whatever you already screenshot, forward, or talk into your phone. Don't invent a new habit.

03

The output shape, not the output

A fixed note template and a task naming rule: CALL — / TEXT — / OFFER —

The format your records should have had all along. Define it once and it's enforced forever.

04

Write the refusals first

Not my lead, stop. Open task already covers it, don't duplicate. Never guess a dollar amount.

List the mistakes you'd have to fix by hand. Each one becomes a hard rule before you write a single action.

05

Let it recommend what it can't prove

Pipeline stage, opportunity value, contact spelling — surfaced every time, changed never.

Anything where being wrong costs more than being slow. That's the recommend pile.

Five slots. An afternoon, if you already know which screen you're avoiding.