# Call Recording Transcription & AI Call Analysis (`bossless/call-transcription-analyzer`) Actor

Transcribe sales and support call recordings with speaker diarization (who spoke when: agent, customer), then get an AI call summary, outcome, sentiment, action items, objections, talk-time stats and a QA scorecard. MP3, WAV, M4A or MP4 links, Google Drive or Dropbox. No API key. Pay per minute.

- **URL**: https://apify.com/bossless/call-transcription-analyzer.md
- **Developed by:** [Alexander Daskalov](https://apify.com/bossless) (community)
- **Categories:** AI, Automation, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 call minute transcribeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Call Recording Transcription & AI Call Analysis

**Turn sales and support call recordings into a speaker-labelled transcript and a ready-to-use call analysis.** Paste links to your recordings (MP3, WAV, M4A, MP4…, or Google Drive and Dropbox file links) and get, for every call:

- 🗣️ **Transcript with speaker labels (speaker diarization)**: who said what and when, with names and roles (agent, customer, supervisor…) when they're said in the call, plus SRT subtitles.
- 🧠 **AI call analysis**: summary, outcome, resolved or not, sentiment (overall and per speaker), topics, action items with owner and due date, objections and how they were handled, pain points, competitors mentioned and key moments with timestamps.
- ✅ **QA scorecard**: your own yes/no checklist ("Did the agent confirm the customer's email?") answered for every call, with the quote and time that prove it.
- 📊 **Talk-time stats**, counted from the timestamps: talk share, turns, words per minute, questions asked, longest monologue, interruptions and long pauses.
- 🔒 **Optional redaction** of emails, phone numbers (and other long digit strings such as account numbers), card numbers, US SSNs and IBANs.

No API key, no account to connect, no setup. It works for sales calls, customer support, interviews and meetings, in English and most major languages.

### What can you do with it?

- **Sales call analysis:** see why deals stall: objections, competitor mentions, next steps and how each rep handles price questions.
- **Call center QA:** score every support call against your checklist instead of sampling 2% by hand.
- **CRM notes on autopilot:** send the summary, outcome and action items to your CRM with Make, Zapier, n8n or a webhook.
- **Coaching:** quality score with specific strengths and improvements per call, plus talk ratio and monologue length.
- **Searchable archive:** speaker-labelled transcripts of every recorded call or meeting, in JSON, CSV or Excel.

### What recordings does it accept?

| Input | Example | Supported |
|---|---|---|
| Direct audio or video file link | `https://example.com/recordings/call-1042.mp3` | ✅ mp3, wav, m4a, aac, ogg, opus, webm, flac, amr, mp4, mov… |
| Phone system / cloud storage file URL | a public recording URL from your telephony provider, S3 or another bucket | ✅ if it opens without logging in |
| Google Drive file | `https://drive.google.com/file/d/…/view` | ✅ shared as "Anyone with the link" |
| Dropbox file | `https://www.dropbox.com/scl/fi/…?dl=0` | ✅ |
| Folders, or pages that need a login | | ❌ share each file's own link |

Telephone-quality (8 kHz) recordings work fine. Recordings up to 4 hours are supported; set **Max minutes per recording** to cap long files.

### How much does it cost?

Pay per minute of audio and per analysed call. No monthly fee.

| Event | Price (FREE/BRONZE) | Lower on paid plans |
|---|---|---|
| Call minute transcribed (speaker labels, timestamps, stats, SRT) | **$0.01** / started minute | down to $0.008 |
| Call analysis (summary, sentiment, action items, scorecard…) | **$0.02** / call | down to $0.018 |
| Actor start | $0.00005 / run | — |

A 10-minute sales call costs **$0.12** with the full analysis, or $0.10 for the transcript only. Calls longer than 30 minutes pay one analysis per started 30 minutes (a 45-minute call: 2 × $0.02). Nothing is charged for a recording that fails, and if the analysis fails the transcript is still saved and only the transcript is charged.

**Cap your spend:** set a **maximum cost per run**. The transcript comes first: when the budget can't pay for both, a call is transcribed without the analysis.

**Free plan:** the AI runs on paid infrastructure, so free-plan runs include a 3-minute trial per run; upgrade to process full calls.

### How to analyse a call recording

1. Click **Try for free**. The example input analyses a 2.5-minute sample sales call (a demo call recorded with AI voices) and answers two scorecard questions.
2. Paste your own recording links into **Recording links**, one per line.
3. Optional: pick the **Call type**, add **QA scorecard questions**, choose the **Analysis language**, and set the **Number of speakers** if you know it (2 for most calls).
4. Run, then open the **Calls**, **Call analysis** or **Transcripts** view, or download JSON, CSV or Excel.

#### Input example

```json
{
  "recordingUrls": ["https://example.com/recordings/call-1042.mp3"],
  "callType": "sales",
  "scorecardQuestions": ["Did the agent confirm the customer's contact details?", "Was a clear next step agreed?"],
  "analysisLanguage": "en",
  "expectedSpeakers": 2,
  "redactPII": false
}
```

### Ready-made tasks

Open one, replace the sample recording with your own links, and run:

- [Sales Call Analysis: Objections, Next Steps & Score](https://apify.com/bossless/call-transcription-analyzer/examples/sales-call-analysis)
- [Customer Support Call QA Scorecard](https://apify.com/bossless/call-transcription-analyzer/examples/support-call-qa-scorecard)
- [Call Recording to Text with Speaker Labels](https://apify.com/bossless/call-transcription-analyzer/examples/call-recording-to-text)
- [Redacted Call Transcripts (Mask Emails, Phones, Cards)](https://apify.com/bossless/call-transcription-analyzer/examples/redacted-call-transcripts)

### Output

One record per recording. Real output from the example input (shortened):

```json
{
 "url": "https://api.apify.com/v2/key-value-stores/T5HtoeQYut1ufwkKC/records/sample-sales-call.mp3",
 "durationSeconds": 147.7,
 "truncated": false,
 "language": "en-US",
 "speakerCount": 2,
 "speakers": [
  {"label": "S1", "name": "Sarah", "role": "agent", "talkSeconds": 76.0, "talkShare": 0.58, "turns": 10, "words": 219,
   "wordsPerMinute": 173, "questionsAsked": 5, "longestMonologueSeconds": 12.6},
  {"label": "S2", "name": "Mike Turner", "role": "customer", "talkSeconds": 55.0, "talkShare": 0.42, "turns": 9, "words": 139,
   "wordsPerMinute": 152, "questionsAsked": 3, "longestMonologueSeconds": 8.8}
 ],
 "stats": {"talkSeconds": 131.0, "silenceSeconds": 0.0, "longPauses": 0, "interruptions": 0, "speakerChanges": 18, "speechShare": 0.887},
 "summary": "Mike Turner called Brightline Solar to discuss a quote for a rooftop solar system. He expressed concerns about the price compared to a competitor, leading the agent to explain the value proposition and offer a promotional discount. The call concluded with the agent agreeing to send a revised quote and scheduling a site visit for the following Tuesday.",
 "outcome": "Site visit booked for Tuesday at 10:00 AM and a revised quote requested.",
 "sentiment": "positive",
 "qualityScore": 9.0,
 "analysis": {
  "callType": "sales",
  "resolved": true,
  "topics": ["solar system quote", "pricing", "warranty", "financing", "installation timeline", "site visit"],
  "actionItems": [
   {"owner": "Sarah", "task": "Email a revised quote with the promotion and financing option", "due": "Friday"},
   {"owner": "Sarah", "task": "Conduct site visit", "due": "Tuesday at 10:00 AM"}
  ],
  "objections": [
   {"objection": "Price is higher than competitor Sunpeak.", "response": "Highlighted premium panels, 25-year warranty, and 10-year labor coverage.", "resolved": true}
  ],
  "competitors": ["Sunpeak"],
  "keyMoments": [{"at": 36.1, "label": "Customer raises price objection"}, {"at": 65.2, "label": "Agent offers promotion"}, "…"],
  "strengths": ["Clear explanation of value proposition", "Proactive offer of a promotion"],
  "improvements": ["Could have asked about the customer's budget earlier in the conversation"],
  "scorecard": [
   {"question": "Did the agent confirm the customer's contact details?", "answer": "yes",
    "evidence": "Can you confirm the email address on the quote?", "at": 15.0},
   {"question": "Did the agent ask about the customer's budget?", "answer": "no", "evidence": null, "at": null}
  ]
 },
 "text": "[00:00] Sarah: Hi, thanks for calling Brightline Solar. This is Sarah. How can I help you today?\n[00:05] Mike Turner: Hey Sarah, my name is Mike Turner. I got a quote from you guys last week…",
 "segments": [{"start": 0.6, "end": 4.6, "speaker": "S1", "text": "Hi, thanks for calling Brightline Solar. This is Sarah. How can I help you today?"}, "…"],
 "srt": "1\n00:00:00,600 --> 00:00:04,600\nSarah: Hi, thanks for calling Brightline Solar…"
}
```

Times (`at`, `start`, `end`) are seconds from the start of the recording. Everything that must be exact (times, talk seconds, word and question counts, interruptions) is counted by code from the timestamps; the AI only writes the descriptions.

### How fast is it?

Measured on Apify with the default 512 MB memory: a 2.5-minute call is transcribed and analysed in about 15 seconds, and a 30-minute recording in under 3 minutes. Recordings in one run are processed one after another.

### How accurate is it?

Measured on test calls with a known script, in telephone quality (8 kHz):

- **Speaker labels:** 19 of 19 turns right on a two-person sales call (in each of 3 runs), and 14 or 15 of 15 on a three-person support call where a supervisor joins.
- **Timestamps:** median error 0.1 to 0.2 seconds.
- **Best for 2–4 speakers.** On a 9-speaker court hearing where several similar voices take turns, voices were merged into fewer speakers. For panels and large meetings, treat speaker labels as approximate.

Long recordings are processed in about 10-minute parts cut at pauses, and each part is told which speakers were already found, so a voice keeps its label for the whole call.

### Use it with AI agents (MCP)

```
https://mcp.apify.com?tools=bossless/call-transcription-analyzer
```

Ask your assistant to "transcribe and analyse this call recording", and it runs this actor and reads back the summary and action items.

### Use the API from code

```bash
curl -X POST "https://api.apify.com/v2/acts/bossless~call-transcription-analyzer/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"recordingUrls": ["https://example.com/recordings/call-1042.mp3"], "callType": "support"}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("bossless/call-transcription-analyzer").call(run_input={
    "recordingUrls": ["https://example.com/recordings/call-1042.mp3"],
    "scorecardQuestions": ["Did the agent greet the customer by name?"],
})
for call in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(call["summary"], call["analysis"]["actionItems"])
```

To analyse every new recording automatically, start a run from your phone system's "recording ready" webhook, or from Make, Zapier or n8n, and send the results on with an Apify integration.

### FAQ

**Do I need an OpenAI, Deepgram or other API key?** No. Transcription and analysis are included in the price.

**Which languages work?** The transcript is written in the language spoken; most major languages work. Choose the analysis language separately (English by default, or the call's own language).

**What happens with a private or broken link?** It's skipped with a clear message and not charged. A run where every link was wrong still succeeds, with a message saying what to check.

**Is my data stored or used for training?** Recordings are downloaded only for the run and deleted when it ends. Results are saved in your own Apify dataset. The AI model runs on Google Cloud (Vertex AI). Google's terms say it won't use this data to train or fine-tune its models; it may cache requests for up to 24 hours and log them for abuse monitoring.

**How are minutes counted?** Per started minute of audio actually transcribed, so a 61-second call is 2 minutes.

**Can it tell agent from customer?** Yes: each speaker gets a role from the conversation (agent, customer, supervisor…), and a name when it's said in the call. Setting **Number of speakers** helps when you know it.

**Is this an official product of any phone or CRM provider?** No. This is an independent tool and is not affiliated with or endorsed by any phone system, CRM or cloud storage provider.

### Related tools

- [Speaker Diarization & Transcription](https://apify.com/bossless/speaker-diarization): who spoke when for any audio or video file, with RTTM, SRT and VTT.
- [Chinese Video Transcriber](https://apify.com/bossless/chinese-video-transcriber): Bilibili videos and any audio/video link to timestamped text, translation and SRT.

# Actor input Schema

## `recordingUrls` (type: `array`):

Links to call or meeting recordings: direct audio/video files (mp3, wav, m4a, ogg, webm, mp4...) from your phone system, cloud storage or website, or Google Drive / Dropbox file links shared as 'Anyone with the link'. One recording per line. Folders and pages that need a login don't work.

## `callType` (type: `string`):

Helps the analysis focus (objections for sales, resolution for support...). Auto works for most calls.

## `analysis` (type: `boolean`):

Summary, outcome, sentiment, topics, action items, objections, pain points, competitors mentioned, key moments and a 0-10 quality score with coaching notes. Charged per call (see pricing). Turn off for a speaker-labelled transcript only.

## `scorecardQuestions` (type: `array`):

Optional yes/no checklist answered for every call, with the quote and time that prove it. Up to 20 questions, for example 'Did the agent confirm the customer's email?' or 'Was a next step agreed?'. Needs AI call analysis on.

## `analysisLanguage` (type: `string`):

Language of the summary and other analysis text. The transcript always stays in the language spoken.

## `expectedSpeakers` (type: `integer`):

If you know how many people speak (2 for most calls), say so: it makes speaker labels more reliable. 0 = detect automatically.

## `redactPII` (type: `boolean`):

Mask email addresses, phone numbers and other long digit strings (such as account numbers), payment card numbers, US social security numbers and IBANs in the transcript, subtitles and analysis. Amounts, dates and times stay.

## `maxMinutesPerRecording` (type: `integer`):

Longer recordings are transcribed up to this length and marked truncated. Caps the cost of an unexpectedly long file.

## Actor input object example

```json
{
  "recordingUrls": [
    "https://api.apify.com/v2/key-value-stores/T5HtoeQYut1ufwkKC/records/sample-sales-call.mp3"
  ],
  "callType": "auto",
  "analysis": true,
  "scorecardQuestions": [
    "Did the agent confirm the customer's contact details?",
    "Was a clear next step agreed?"
  ],
  "analysisLanguage": "en",
  "expectedSpeakers": 0,
  "redactPII": false,
  "maxMinutesPerRecording": 120
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "recordingUrls": [
        "https://api.apify.com/v2/key-value-stores/T5HtoeQYut1ufwkKC/records/sample-sales-call.mp3"
    ],
    "scorecardQuestions": [
        "Did the agent confirm the customer's contact details?",
        "Was a clear next step agreed?"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("bossless/call-transcription-analyzer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "recordingUrls": ["https://api.apify.com/v2/key-value-stores/T5HtoeQYut1ufwkKC/records/sample-sales-call.mp3"],
    "scorecardQuestions": [
        "Did the agent confirm the customer's contact details?",
        "Was a clear next step agreed?",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("bossless/call-transcription-analyzer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "recordingUrls": [
    "https://api.apify.com/v2/key-value-stores/T5HtoeQYut1ufwkKC/records/sample-sales-call.mp3"
  ],
  "scorecardQuestions": [
    "Did the agent confirm the customer'\''s contact details?",
    "Was a clear next step agreed?"
  ]
}' |
apify call bossless/call-transcription-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bossless/call-transcription-analyzer"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/4VuSsV5NaakSyMWYo/builds/ct5hA49J9dB7wze1y/openapi.json
