Channel Automation · Sales Coach
Sales Coach API · for n8n

Every finished Sales Coach review, in your own n8n.

When a review finishes, n8n picks it up within 15 minutes: the summary, the scorecard with every sales step, the coaching and the full transcript. From there it goes wherever your team works: your CRM, a sheet, a report.

Sales Coachrep records the visit, the review finishes
Sales Coach APIread-only, with your Sales Coach key
Your n8nthe ready-made workflow on this page
Your systemCRM record, sheet, database

What you get

PartWhat's in it
ReviewTitle, when it was recorded, length, the customer, the rep (a person or an AI assistant), the linked appointment, and whether it was an in-person visit, an uploaded file or a phone call
ScorePoints out of the maximum, and how many of your sales steps were followed
SummaryWhat happened, the outcome, sentiment, next steps, commitments, customer needs, products, budget, timeline, objections, competitors and buying intent
ScorecardEach section's score and reason, and each sales step marked done, partly or skipped, with the second it happened
CoachingThe coaching points, each tied to a moment in the conversation
TranscriptEvery line in order, with who spoke and when
Read-only by design. The key can read finished reviews and nothing else. It can't see contacts, send messages, or change or delete anything. Recordings, audio links, QA flags and internal notes are never sent.

Before you start

  • An owner or admin of your Channel Automation workspace. Only they can create a Sales Coach key.
  • n8n, either n8n Cloud or your own server, and someone who can build a workflow in it.
  • Somewhere to send reviews, and a way to match records there: each review has a stable id, so your destination can update the same record when a review changes.
  • At least one finished review in Sales Coach, so your first test has something to show.

Set it up

This takes about 15 minutes.

  1. Create your Sales Coach key

    In Channel Automation, open Settings → API Keys → Generate New Key. Under Key type, choose Sales Coach key (read-only, for integrations), name it something like n8n reviews, and press Generate API Key.

    Copy the key now. It is shown once and is not stored anywhere, not even for you. If you lose it, deactivate it and create a new one. Never paste it into an email or a ticket.
  2. Add the workflow to n8n

    In n8n, create a new workflow. Press Copy workflow below, click the empty canvas and paste (Ctrl/⌘ + V).

    Prefer a file? Paste the copied text into a file named sales-coach-reviews.json, then use the workflow's ⋯ menu → Import from File.

  3. Add your key as a credential

    Open the step List changed reviews. In its credential field (authentication is already set to Header Auth), create a new credential:

    FieldValue
    NameX-API-Key
    Valueyour Sales Coach key (starts with crm_live_)

    Then open Get the full review and pick the same credential. The key lives only in n8n's credential store, never in the workflow itself.

  4. Point it at your system

    Replace the placeholder step Send to your system with the step that saves a review: for example your CRM's node, Google Sheets → Append or update row, or an HTTP request. Match on the review's id so a re-analysed review updates the same record. Keep the new step connected to Wait for every review.

    Useful fields to map: summary.summary, summary.next_steps, scorecard.percent, process.percent, coaching and transcript. The field guide below lists them all.

    The processing, unavailable and deleted branches are placeholders too. At minimum, connect Deleted: remove your copy to a step that deletes the record, so a review deleted at a customer's request disappears from your system as well.

  5. Test it

    Run the workflow once with Execute workflow (called Test workflow in older n8n versions). It starts from the Run now (for testing) step. The first run collects every finished review, so it can take a few minutes if you already have many. Open each step to check what came through.

    Test runs never move the bookmark, so you can run a test as often as you like; each one starts from the same place.
  6. Turn it on

    Turn the workflow on (Active, or Publish in the newest n8n versions). From then on it runs every 15 minutes and only picks up what changed since the last successful run.

Try it in Postman

Before building anything, check your key works. Two ways, both tested against the live API.

Option A: the ready-made collection

  1. Press Copy collection.
  2. In Postman, choose Import → Raw text, paste, and import.
  3. Open the collection's Variables, set apiKey to your Sales Coach key, and save.
  4. Send the requests in order. Request 1 saves a review id and the next-page cursor, so requests 2–5 work without editing anything. For request 6, set phone to a customer's number first.

Option B: curl commands

Paste them into a terminal, or into Postman's Import box one at a time. Replace PASTE_YOUR_SALES_COACH_KEY with your key. Take PASTE_NEXT_CURSOR and PASTE_REVIEW_ID from the first response's next_cursor and a review's id.

curl "https://api.channelautomation.com/api/v1/sales-coach/reviews?limit=5" \
  -H "X-API-Key: PASTE_YOUR_SALES_COACH_KEY"

curl "https://api.channelautomation.com/api/v1/sales-coach/reviews?limit=5&cursor=PASTE_NEXT_CURSOR" \
  -H "X-API-Key: PASTE_YOUR_SALES_COACH_KEY"

curl "https://api.channelautomation.com/api/v1/sales-coach/reviews?limit=5&updated_since=2026-09-01T00:00:00Z" \
  -H "X-API-Key: PASTE_YOUR_SALES_COACH_KEY"

curl "https://api.channelautomation.com/api/v1/sales-coach/reviews/PASTE_REVIEW_ID" \
  -H "X-API-Key: PASTE_YOUR_SALES_COACH_KEY"

curl "https://api.channelautomation.com/api/v1/sales-coach/reviews/PASTE_REVIEW_ID?include=summary,scorecard" \
  -H "X-API-Key: PASTE_YOUR_SALES_COACH_KEY"

curl "https://api.channelautomation.com/api/v1/sales-coach/reviews?phone=%2B15551234567&limit=5" \
  -H "X-API-Key: PASTE_YOUR_SALES_COACH_KEY"
A 401 means the key is wrong or deactivated; a 403 means it isn't a Sales Coach key. See Troubleshooting.

Follow one review

Pick what happens to the review, then step through its trip into your system.

    In your system
    Record
    nothing yet
    Analysis version
    none
    Bookmark
    previous run

    What a review contains

    Every run first lists the reviews that changed. Each one looks like this (example values):

    {
      "id": "0b6f0c1e-7c1a-4b8e-9d0f-2f4f6b9e3a10",
      "state": "ready",
      "title": "Bathroom remodel consult",
      "source": "recorded_visit",
      "recorded_at": "2026-09-30T14:02:11.482913+00:00",
      "duration_seconds": 2710,
      "completed_at": "2026-09-30T14:51:40.120331+00:00",
      "updated_at": "2026-09-30T14:51:40.120331+00:00",
      "contact": { "id": "5d1e…", "name": "Jordan Rivera", "phone": "+15551234567" },
      "rep": { "type": "person", "name": "Sam Ortiz" },
      "appointment_id": "c2a9…",
      "score": { "points": 82, "max": 100, "percent": 82 },
      "process": { "followed": 5.5, "total": 7, "percent": 79 },
      "analysis_version": 1,
      "consent": { "status": "confirmed", "method": "rep_confirmation", "provenance": "rep_confirmation" }
    }

    For each ready review the workflow then fetches the full review, which adds four sections:

    {
      "summary": {
        "summary": "Homeowner wants the tub replaced with a walk-in shower before the holidays…",
        "outcome": "Quote requested",
        "customer_sentiment": "positive",
        "next_steps": ["Send the quote by Friday"],
        "customer_needs": ["Walk-in shower", "Grab bars"],
        "budget": "$12k–15k",
        "timeline": "Before December",
        "objections": [{ "text": "Worried about the price", "category": "price", "response": "Offered financing", "at_seconds": 1340 }],
        "competitors": [{ "name": "Another remodeler", "sentiment": "neutral", "at_seconds": 1610 }],
        "buying_intent": { "level": "high", "reasoning": "Asked for install dates" },
        "deal_probability_estimate": 65
      },
      "scorecard": {
        "points": 82, "max": 100, "percent": 82,
        "sections": [{ "key": "rapport", "label": "Rapport", "score": 18, "max": 20, "reason": "Warm open", "at_seconds": 40 }],
        "process": {
          "followed": 5.5, "total": 7, "percent": 79,
          "steps": [{ "key": "agenda", "label": "Set the agenda", "verdict": "done", "reason": "Walked through the visit plan", "at_seconds": 95 }]
        }
      },
      "coaching": [{ "title": "Ask about budget earlier", "detail": "Budget came up in the last five minutes", "at_seconds": 2400 }],
      "transcript": [{ "index": 0, "at_seconds": 0, "end_seconds": 4.2, "speaker": "agent", "text": "Thanks for having me over…" }]
    }
    FieldMeaning
    stateready finished · processing being re-analysed · unavailable the latest analysis failed · deleted removed (only id and deleted_at are sent)
    sourcerecorded_visit (recorded in the app), uploaded_file, or phone_call (a call analysed from your call recordings)
    contact.phoneThe customer's phone number, so you can match the review to your records by phone
    analysis_versionGoes up when a review is re-analysed. Replace your copy when it changes
    processYour sales steps followed. A step done partly counts as half
    consentHow recording consent was captured. Phone calls analysed from your existing call recordings show existing_platform_recording
    deal_probability_estimateAn AI estimate from this conversation alone (0–100). It is not a forecast
    at_secondsWhere in the conversation it happened. Some imported phone calls have no timings, so this can be empty

    Rules worth knowing

    • The bookmark only moves when a whole run succeeds. If anything fails partway, even your own system being down, the next run repeats from the same place. Match on id, and a repeat is harmless.
    • Changes appear after about two minutes. A brand-new change is held back briefly, so a change that is still being saved is never skipped.
    • "Not found" or "changed" on a single review is normal. It means the review was deleted or updated while n8n was reading it. The workflow skips it, and it comes back in a later run with its new state.
    • Phone calls are included. Calls analysed from the Calls tab come through with their consent details. Filter on source if you only want in-person visits.
    • The key belongs to the person who created it. If they stop being an owner or admin, or leave the workspace, the key stops working. Create the key under an account that will stay.
    • Revoking is final. To stop the connection, open the key's menu in Settings → API Keys and choose Deactivate. A deactivated Sales Coach key can't be switched back on.
    • Limits: 120 requests a minute per key. The workflow paces itself to stay well under that, even on its first run.

    Troubleshooting

    What you seeWhyFix
    401The key is missing, mistyped, expired or deactivatedCheck the credential's name is exactly X-API-Key and the value has no spaces. If it was deactivated, create a new key
    403It isn't a Sales Coach key, or its creator is no longer an owner or adminAn owner or admin creates a new Sales Coach key
    429More than 120 requests a minuteCheck the schedule isn't set to seconds, and that nothing else uses the same key
    503A short interruption on our sideNothing to do: the run stops, keeps its bookmark, and the next run retries
    Nothing arrivesNo review has finished since the last runFinish a review in Sales Coach, wait two minutes, run a test
    The same reviews every runThe last steps never ran, so the bookmark never movedMake sure your destination step is connected to Wait for every review, and the workflow is turned on (test runs don't move the bookmark)
    A contact reads "Deleted contact"The customer record was deleted after the visitThe review is still valid. Match it by review id

    API reference

    The workflow above uses these two endpoints. Use them directly if you build your own integration. Send the key in the X-API-Key header.

    GET https://api.channelautomation.com/api/v1/sales-coach/reviews

    QueryMeaning
    cursorThe next_cursor from your last response. Store it, and send it next time
    updated_sinceFirst poll only: reviews changed at or after this time (ISO 8601 with a time zone). Leave out to start from the beginning
    limit1–100, default 50
    phoneLook up one customer's reviews by phone number, newest first. Any format works ((555) 123-4567, +15551234567). This is a lookup, not the change feed: it can't be combined with cursor or updated_since, it leaves out deleted reviews, and next_cursor is empty

    Returns { data, next_cursor, has_more, as_of }, oldest change first. Keep requesting with the new next_cursor until has_more is false. Save the cursor only after you've handled everything.

    Look up a customer by phone

    To see one customer's reviews, for example while they're on the phone, call the list with their number, then fetch the review you want:

    curl "https://api.channelautomation.com/api/v1/sales-coach/reviews?phone=%2B15551234567&limit=1" \
      -H "X-API-Key: PASTE_YOUR_SALES_COACH_KEY"

    The newest review comes first. Take its id and fetch it below for the summary, scorecard and transcript. (%2B is the + sign written for a web address.)

    GET https://api.channelautomation.com/api/v1/sales-coach/reviews/{id}

    The full review, for items whose state is ready. Add ?include=summary,scorecard to fetch only some of summary, scorecard, coaching, transcript (all by default).

    StatusMeaning
    200The review
    400A bad cursor, limit, updated_since or include
    401 / 403Missing or invalid key / not allowed (see Troubleshooting)
    404Not in your workspace, or deleted
    409not_ready (being re-analysed) or changed while being read. Skip it; it returns in a later poll
    413The transcript has more than 10,000 lines. Fetch without transcript
    429Over 120 requests a minute. Wait for the Retry-After header
    503Temporary. Retry later