How we run it / Close

How we use Close CRM as the single source of truth for outbound sales

Close is the memory. Every other tool is a sensor. Here is the setup, the queries, and the two views that lied to me.

By Corey Leon · Sep 21, 2026 · about 5 min read

Close is where everything lands. Every call, text, email, note, payment and next step goes on the lead. My dashboards read from Close. They never write to it. When a number on a dashboard disagrees with Close, Close wins and the dashboard gets fixed.

That rule sounds obvious. It took me a year of duplicated trackers to actually live by it. Every second store drifted from the first. So now there is one.

This page is the setup I run across ten client campaigns and my own pipeline. The smart views, the cap, the drafts-only rule, and the post-call note. Copy what you need.

The setup, in six steps

  1. 01

    Set up one org per business, one key per org

    I run three Close orgs. One for Coda's own pipeline. One for every client campaign, with a Client field and a Campaign field on each lead. One for a partner that runs mixed. Each org gets its own API key and nothing else.

    The lesson came from a bug. Two of my keys pointed at the same org under different names, a script looped over both, and "eight owed replies" was really six. If you script against Close, dedupe by org id before you count anything.

  2. 02

    Build the cap view: 10 calls or 5 emails, unless they talked to us

    Every client has a dial view with the same condition. Keep the lead in the queue while num_calls is 9 or fewer and num_sent_emails is 4 or fewer. Exempt anyone with two-way interaction: an incoming email, or a call with 60 seconds or more of talk time.

    The exemption matters. My first version left it out and pulled 39 leads out of one client's queue. Four of them had really engaged. Two details that cost me an afternoon: the email direction value is incoming, not inbound, and inbound matches nothing. And Close has no num_outbound_calls, so a prospect calling us back burns one of their ten. I accepted that trade.

  3. 03

    Sort the coldest lead to the top

    All 18 dial views sort by last_communication_date ascending. The lead nobody has touched the longest is first. That is how no live prospect goes more than three days untouched. Do not try to sort by date_activity, it returns a 400.

    Pair it with a second view called Worked out, 10 calls or 5 emails. Mine held 62 leads the day I built it. Those go to Nurture on purpose. They never silently drop.

  4. 04

    Use four upcoming views instead of new statuses

    Upcoming meeting: status Meeting set or Rescheduling, Meeting Outcome empty, meeting time today or later or not set. Upcoming sign up. Upcoming call back. Close out, date passed, no outcome.

    Attended or no-show lives in a Meeting Outcome field, not a status. Callbacks live in a Next dial date custom field, because Close cannot query tasks from lead search. A script writes the field and the task together. "Field is empty" is written as an exists condition with negate set to true.

  5. 05

    Drafts only, and read the query before you trust a count

    Every agent output is a draft in Close, from the correct sender. A person clicks send. One draft per purpose, and a rewrite deletes the old one. A sender guard runs every two minutes so nothing leaves from another client's address.

    Then the view that lied. My pinned Open drafts view read 8. The truth was 78 drafts on 73 leads across three orgs, because the view was filtering on a hand-stamped field instead of the actual draft status. A view's name is not its query. Open s_query and read it.

  6. 06

    Write the post-call note from the call, then fix the record

    "Spoke with {first name} at {company} about {topic}." Then initial reaction, key pain points as bullets using only what they said, interest level, next steps with a real date and time. Five stages only: Meeting set, Qualified, Needs more value, Nurture with a reason and a date, Referral where the referred person becomes their own lead. Gatekeeper, voicemail and wrong number are attempts, not stages.

    Then the part everyone skips. A conversation outranks every data vendor. In my first two weeks of checking, 11 of 14 real conversations had a record problem afterward: three title changes, three drafts aimed at the wrong person, five stale statuses. One 90-second call said a man was no longer GM. Ten days later the lead still said GM and a draft was addressed to him. Now the title gets fixed before any draft is written.

Run this today

  1. Count your orgs and your keys. One key per org, and dedupe by org id in any script.
  2. Build the cap view on one client. Copy the condition from the box below.
  3. Set the sort to last_communication_date ascending. Nothing else.
  4. Build Worked out as the inverse. Route it to Nurture, never delete.
  5. Add a Meeting Outcome field and a Next dial date field. Build the four upcoming views on them.
  6. Open every pinned view and read the s_query. Fix the one that lies.
  7. Paste the note template into your post-call prompt. Fix the contact title before the next draft.

Free

The Close smart-view recipe

The cap condition, the four upcoming views and the post-call note, written the way Close's filter editor reads them.

VIEW  "<Client> dial queue"  (one per client, same condition)
  keep the lead while:
    (num_calls <= 9 AND num_sent_emails <= 4)
    OR an email exists with direction = "incoming"     <- not "inbound"; that matches nothing
    OR a call exists with duration >= 60 seconds
  sort: last_communication_date ascending             <- date_activity is not sortable (400)

VIEW  "Worked out, 10 calls or 5 emails"
  the inverse of the cap with no two-way -> route to Nurture, never delete

VIEW  "Upcoming meeting"
  status in (Meeting set, Rescheduling) AND Meeting Outcome is empty
  AND (Meeting Time >= today OR Meeting Time is empty)
VIEW  "Upcoming call back"      Next dial date >= today   (custom date field; tasks cannot be queried)
VIEW  "Close out, date passed"  Meeting Time < today AND Meeting Outcome is empty
  "is empty" in Close's query language = {"type": "exists"} with "negate": true

Meeting Outcome values: Meeting showed / No Show / Held - Qualified / Held - Nurture /
                        Held - Disqualified / Rescheduled

POST-CALL NOTE
  Spoke with {first} at {company} about {topic}.
  Initial reaction:
  Key pain points:  (bullets, only what they said)
  Interest level:
  Next steps:  (a real date and time, in their timezone)
  Stage: Meeting set | Qualified | Needs more value | Nurture (reason + date) | Referral (who)
  Gatekeeper, voicemail, wrong number = attempt, not a stage. Never name the caller.

Free

The 10 prompts that run this.

Text me the word prompts and I text you the pack. Then tell me what you sell and I'll say which one to run first.

Text me 'prompts'

or text prompts to +1 (617) 710-6179

Want to read them first? The 10 prompts are here.

FAQ

The questions I get on this.

What counts as two-way interaction in the cap?

An incoming email on the lead, or a call with 60 seconds or more of talk time. A voicemail is not two-way. A gatekeeper is not two-way. If they engaged once, the cap never retires them.

Why 10 calls and 5 emails?

Because after that, without a reply, the next touch is noise. My words when I set it: so we don't waste our time. The leads that hit the cap go to Nurture with a date, not to the trash.

Why not make attended and no-show statuses?

Because status is where the lead is in the pipeline, and a no-show is what happened to one meeting. A Meeting Outcome field keeps the two apart, and the upcoming views filter on it.

Does Close send the drafts on its own?

No, and nothing I run is allowed to. Every draft sits on the lead from the right sender until a person clicks send. If you want the prompts that write the drafts, text me the word prompts.