Use case · Sales co-pilot

Your agent shows up to call 3 like it's call 1

Deal stages, objections, contact preferences. Saved once per call. Read back before the next conversation. One vault per SDR, audit trail included.

The pain

Three calls in, no one remembers the objection from call one

Complex B2B deals stretch across weeks. Discovery on a Tuesday. Demo two weeks later. Pricing negotiation a month after that. By the third call, the buyer has told you about their Q3 budget freeze, their procurement bottleneck, the legal review their last vendor needed eight months to clear.

Your AI sales co-pilot generated a summary after each call. Three summaries, three documents, three different tabs. None of them feed forward into the next conversation. The next call starts from a blank context window. The objection comes back. You say "as we discussed last time" and the agent has no idea what last time means.

The buyer notices. Pipelines that depend on relationship continuity stall, because the AI sounds amnesiac in a relationship that is supposed to compound.

The shape of the fix

One vault per SDR, one timeline per contact

Call 1 — discovery

Discovery call

  • Notes via Granola/Otter
  • Objection: Q3 budget

Korely

Timeline per contact

  • agent_id per SDR
  • valid_at on every fact

Call 2 — demo

Reads timeline

  • Brief drafted with prior objections
  • Knows what was promised

Call 3 — pricing

Closes informed

  • Three-call context, zero re-explanation

The vault holds the timeline. The agent re-reads it at the start of every call, every time.

How Korely fits

Drop in after every call, read back before the next

One agent_id per SDR scopes everything to that rep's pipeline. Two reps on the same account get separate vaults; searches across them require explicit cross-scope queries.

Every write carries a valid_at timestamp. Search returns the current state by default and the full timeline on request — useful when you want to see how an objection evolved across three calls, not just the most recent version of it.

Korely is the memory layer. Your CRM stays the system of record. A typical setup writes the rich summary to Korely (objections, next steps, sentiment, who said what) and the pipeline-relevant fields to Salesforce or HubSpot.

Show me the code

Post-call write, pre-call read

sales_copilot.py python
# ── After every call: Granola/Otter webhook fires this ─────────
from korely_memory import Korely

korely = Korely(api_key="kor_live_...")

korely.add(
    f"Call with {contact.name} at {company}. "
    f"Discussed pricing. Objection: Q3 budget freeze. "
    f"Next step: legal review of MSA before mid-July.",
    agent_id=f"sdr-{sdr_id}",
    valid_at=call.datetime,
)

# ── Before the next call: agent prepares the brief ─────────────
context = korely.search(
    f"interactions with {contact.name}",
    agent_id=f"sdr-{sdr_id}",
    include_history=True,   # full timeline, not just current
)

# context → list of every call in chronological order,
# with the objection and next_step from each one

One write hook per call source. One search call at the start of every conversation. No bespoke storage to build.

When the deal evolves

Stage changes, objection resolution, decision-maker swap

Deals evolve. The champion leaves. The procurement officer shows up halfway through. The objection that killed the demo gets resolved a month later. The temporal layer keeps the earlier facts marked as superseded, so the agent does not re-raise an objection that was already cleared.

timeline.py python
korely.add(
    "Champion: Sarah Lin, VP Eng. Procurement: not engaged yet.",
    agent_id=f"sdr-{sdr_id}",
    valid_at="2026-04-12",
)

# Five weeks later — buyer side moves
korely.add(
    "Sarah Lin left the company. New champion: Diego Romero, CTO.",
    agent_id=f"sdr-{sdr_id}",
    valid_at="2026-05-19",
)

korely.search("current champion at AcmeCorp", agent_id=f"sdr-{sdr_id}")
# → "Diego Romero, CTO" (Sarah Lin marked superseded, not deleted)

Frequently asked

Sales co-pilot memory, common questions

Why does my AI sales co-pilot forget the previous call? +

Most AI sales tools generate summaries per call. They do not maintain a cross-call memory tied to the contact or deal. The next conversation starts from a fresh LLM context window.

Does Korely integrate with Granola, Otter, or Fireflies? +

Korely accepts memory writes from any source. The pattern is to call save_note from your post-call automation (Granola webhook, Otter API, a Zapier flow) with the call summary and a valid_at timestamp.

Can I scope memory per SDR so reps do not see each other deals? +

Yes. The agent_id parameter scopes every write and every search. Use agent_id="sdr-alice" and agent_id="sdr-bob" and the searches stay isolated.

Does it write back to my CRM? +

Not directly. Korely is the memory layer; the CRM is the system of record. A typical setup writes the summary to Korely and the pipeline-relevant fields to Salesforce or HubSpot, keeping each tool doing what it is best at.

How long does the history go back? +

Unlimited on the paid tiers. Every memory carries a valid_at timestamp so search can scope to a time window when you only want recent context.

Let your agent walk into every call with the full timeline

The desktop app and local MCP server are free today. The Python SDK and cloud MCP for multi-rep teams are in early access.

Looking for a different shape? See the other five use cases →