---
name: transcript-denoise
description: Strip a noisy sales, CS, or discovery call transcript down to an Evidence Ledger of atomic, quoted, source-tagged facts (pain, impact, moment, fit, stakeholders, process, competitors, objections, commitments, risks, product feedback) and a noise report. Use when someone says "clean this transcript", "tear apart this call", "remove the fluff", "what actually mattered on this call", or before any role scan, win/loss run, or Account Context build.
---

# Transcript Denoise

Most of a call transcript is greetings, logistics, filler, the seller talking, and the same point said three times. Every downstream skill gets worse when it reads that noise, because it starts to summarize the seller's pitch as if the buyer said it. This skill reduces the call to an **Evidence Ledger**: only what the buyer side said or committed to, quoted, timed, attributed, and tagged.

Every other skill in the stack reads the ledger, never the raw transcript.

## Inputs

| Input | Source | If missing |
|---|---|---|
| Transcript | Granola MCP `get_meeting_transcript`, or pasted / file | stop and ask; never work from the AI summary alone |
| Rep Read | `rep-read.md` from `granola-capture-markers` | run that skill first if typed notes exist; otherwise continue and say no human layer was captured |
| Attendees | Granola meeting attendees from `get_meetings`, the Rep Read `S:` lines, or the user | speakers stay as labeled; PAIN cannot be Verified to a named person |
| Seller domain or names | `gtm-context.md`, or ask "who on this call is from your company?" | ask; needed to split buyer side from seller side |

If only Granola's AI summary is available (free plan, no transcript), say: "Working from the AI summary, not the transcript. Nothing can be Verified." Tag every item Inferred.

## Step 1: Attribute speakers

- Granola transcripts often label the mic as "Me" and everyone else as "Them". Treat "Me" as seller side.
- If one buyer attended, "Them" is that person. Name them.
- If several buyers attended, attribute a line to a named person only when the transcript, the context ("as the CFO, I..."), or a Rep Read `S:` line makes it clear. Otherwise keep `Them (unattributed)`.
- A quote from `Them (unattributed)` can be Supported, never Verified.

## Step 2: Drop the noise

Drop, and count what you drop by category:

| Noise | Examples |
|---|---|
| Social | greetings, weather, weekend, "can you hear me" |
| Logistics | scheduling, screen share, "let me find that link", recording consent |
| Filler | um, like, you know, sort of, repeated starts |
| Seller questions | the seller's questions. Keep only the buyer's answer |
| Seller pitch | seller explaining product, slides, or company. Keep only the buyer's reaction to it |
| Seller assumptions | "so it sounds like your problem is..." Keep only if the buyer confirms in their own words, and quote the confirmation |
| Repeats | the same point said again. Keep the clearest instance, record the repeat count |
| Hypotheticals | "if you were to...", "imagine if..." unless the buyer answers with a fact |

Keep anything with: a number, a name, a date, a tool, a "we" or "our" problem statement, an emotion word (frustrated, worried, embarrassed, killing us), a hedge (probably, I think, hopefully), a commitment, or a refusal.

Repetition is a salience signal. A pain said three times outranks a pain said once.

## Step 3: Write atomic facts

One fact per row. Split compound statements. Keep the buyer's exact words in the Verbatim column, trimmed of filler only (mark trims with `...`).

Fact types:

| Type | Captures |
|---|---|
| PAIN | a problem in the buyer's words |
| IMPACT | cost, time, revenue, risk, or a consequence tied to a pain |
| MOMENT | why now: deadline, event, new leader, contract end, board ask |
| FIT | size, industry, region, stack, team structure |
| STAKEHOLDER | a person, role, influence, stance |
| PROCESS | how they decide and buy: steps, approvers, legal, security, budget cycle |
| COMPETITOR | a vendor, incumbent, or "build it ourselves" |
| OBJECTION | a concern or pushback, and whether it was resolved |
| COMMITMENT | a next step with an owner and a date |
| RISK | anything that could stop the deal or the renewal |
| PRODUCT | a feature request, gap, or product reaction |

## Step 4: Tag confidence

| Tag | Use when |
|---|---|
| Verified | verbatim from a named buyer-side person, with a timestamp |
| Supported | verbatim but speaker unattributed, or a rep-recorded quote not found in the transcript, or a clear buyer confirmation of a seller statement |
| Inferred | your reading of tone or implication, or anything from an AI summary |
| Unknown | cannot tell |

Hedged statements ("probably Q2", "I think the CFO signs") are still facts. Tag them Supported and keep the hedge in the verbatim.

## Step 5: Reconcile with the Rep Read

For each Rep Read line:
- `P:` with quotes: search the transcript for the quoted words (allow minor filler differences). Found: link the row. Confidence follows Step 4 (a hedged or unattributed line stays Supported). Not found: add a row tagged Supported, note "rep-recorded, confirm wording".
- `D:` about the deal: add as a RISK row, source "Rep Read", tag Inferred, Verbatim column reads "(rep note, not a buyer quote)", and look for transcript lines that support or contradict it.
- `D:` about the rep's own behavior ("I pitched too early"): not a deal risk. Pass it to `call-coaching-scan` only.
- `N:`: match to a COMMITMENT row. If the transcript has no matching commitment, flag "rep noted a next step the buyer did not say out loud".
- `C`: copy to the ledger header. Do not change it.

## Step 6: Output `ledger.md`

```markdown
# Evidence Ledger: <meeting title>
Date: | Source: Granola meeting <id or title> | Attendees (buyer side): | Seller side:
Rep Confidence: C<n> (<reason>) or not captured
Transcript length: <n> lines | Kept: <n> facts | Noise dropped: <%>

## Ledger
| # | Time | Speaker | Type | Verbatim | Repeats | Confidence | Note |

## Top 3 by salience
(most repeated or most emotional buyer statements, quoted)

## Rep Read reconciliation
| Rep line | Found in transcript? | Ledger row |

## Gaps
Types with zero rows (for example: no PROCESS facts, no COMMITMENT). These are the questions for the next call.

## Noise report
| Category | Lines dropped |
```

## Rules

- NEVER put seller words in the Verbatim column as if a buyer said them.
- NEVER paraphrase inside Verbatim. Trim filler only.
- NEVER promote an AI-summary line above Inferred.
- Keep timestamps when the transcript has them; otherwise use line numbers.
- Zero rows for a type is a finding. List it under Gaps; do not fill it with guesses.

## What good looks like

Calls under 15 minutes drop less (often 50 to 70 percent). A 45-minute discovery call usually reduces to 15 to 40 rows and drops 70 to 90 percent of lines. If the ledger has fewer than 5 rows, the call was thin or the transcript is a summary; say which. If it has more than 60, facts are not atomic or seller lines leaked in.
