Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create a minimal working Deepgram transcription example. Use when starting a new Deepgram integration, testing your setup, or learning basic Deepgram API patterns. Trigger: "deepgram hello world", "deepgram example", "deepgram quick start", "simple transcription", "transcribe audio".
.claude/skills/jeremylongshore-deepgram-hello-world/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 5% | 0% |
Minimal working examples for Deepgram speech-to-text. Transcribe an audio URL in 5 lines with createClient + listen.prerecorded.transcribeUrl. Includes local file transcription, Python equivalent, and Nova-3 model selection.
npm install @deepgram/sdk completedDEEPGRAM_API_KEY environment variable settypescriptimport { createClient } from '@deepgram/sdk'; const deepgram = createClient(process.env.DEEPGRAM_API_KEY!); async function main() { const { result, error } = await deepgram.listen.prerecorded.transcribeUrl( { url: 'https://static.deepgram.com/examples/Bueller-Life-moves-702702706.wav' }, { model: 'nova-3', // Latest model — best accuracy smart_format: true, // Auto-punctuation, paragraphs, numerals language: 'en', } ); if (error) throw error; const transcript = result.results.channels[0].alternatives[0].transcript; console.log('Transcript:', transcript); console.log('Confidence:', result.results.channels[0].alternatives[0].confidence); } main();
typescriptimport { createClient } from '@deepgram/sdk'; import { readFileSync } from 'fs'; const deepgram = createClient(process.env.DEEPGRAM_API_KEY!); async function transcribeFile(filePath: string) { const audio = readFileSync(filePath); const { result, error } = await deepgram.listen.prerecorded.transcribeFile( audio, { model: 'nova-3', smart_format: true, // Deepgram auto-detects format, but you can specify: mimetype: 'audio/wav', } ); if (error) throw error; console.log(result.results.channels[0].alternatives[0].transcript); } transcribeFile('./meeting-recording.wav');
pythonimport os from deepgram import DeepgramClient, PrerecordedOptions client = DeepgramClient(os.environ["DEEPGRAM_API_KEY"]) # URL transcription url = {"url": "https://static.deepgram.com/examples/Bueller-Life-moves-702702706.wav"} options = PrerecordedOptions(model="nova-3", smart_format=True, language="en") response = client.listen.rest.v("1").transcribe_url(url, options) transcript = response.results.channels[0].alternatives[0].transcript print(f"Transcript: {transcript}") print(f"Confidence: {response.results.channels[0].alternatives[0].confidence}")
python# Local file transcription with open("meeting.wav", "rb") as audio: source = {"buffer": audio.read(), "mimetype": "audio/wav"} response = client.listen.rest.v("1").transcribe_file(source, options) print(response.results.channels[0].alternatives[0].transcript)
typescript// Enable diarization (speaker identification) const { result } = await deepgram.listen.prerecorded.transcribeUrl( { url: audioUrl }, { model: 'nova-3', smart_format: true, diarize: true, // Speaker labels utterances: true, // Turn-by-turn segments paragraphs: true, // Paragraph formatting } ); // Print speaker-labeled output if (result.results.utterances) { for (const utterance of result.results.utterances) { console.log(`Speaker ${utterance.speaker}: ${utterance.transcript}`); } }
| Model | Use Case | Speed | Accuracy | |-------|----------|-------|----------| | nova-3 | General — best accuracy | Fast | Highest | | nova-2 | General — proven stable | Fast | Very High | | nova-2-meeting | Conference rooms, multiple speakers | Fast | High | | nova-2-phonecall | Low-bandwidth phone audio | Fast | High | | base | Cost-sensitive, high-volume | Fastest | Good | | whisper-large | Multilingual (100+ languages) | Slow | High |
bash# TypeScript npx tsx hello-deepgram.ts # Python python hello_deepgram.py
| Error | Cause | Solution | |-------|-------|----------| | 401 Unauthorized | Invalid API key | Check DEEPGRAM_API_KEY | | 400 Bad Request | Unsupported audio format | Use WAV, MP3, FLAC, OGG, or M4A | | Empty transcript | No speech in audio | Verify audio has audible speech | | ENOTFOUND | URL not reachable | Check audio URL is publicly accessible | | Cannot find module '@deepgram/sdk' | SDK not installed | Run npm install @deepgram/sdk |
Proceed to deepgram-core-workflow-a for production transcription patterns or deepgram-core-workflow-b for live streaming.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 5,700 | 5,484 | -4% | 1 | 1 | 0% | 1,279 | 2,630 | +106% | 0 | 0 | — |
case-02 | fail→fail | 7,585 | 6,419 | -15% | 1 | 1 | 0% | 1,659 | 2,879 | +74% | 0 | 0 | — |
case-03 | fail→pass | 11,811 | 6,350 | -46% | 1 | 1 | 0% | 2,617 | 2,805 | +7% | 0 | 0 | — |
case-04 | pass→pass | 9,049 | 5,204 | -42% | 1 | 1 | 0% | 1,877 | 2,633 | +40% | 0 | 0 | — |
case-05 | fail→pass | 9,988 | 5,413 | -46% | 1 | 1 | 0% | 1,919 | 2,553 | +33% | 0 | 0 | — |
case-06 | fail→pass | 10,688 | 6,859 | -36% | 1 | 1 | 0% | 1,875 | 2,799 | +49% | 0 | 0 | — |
case-07 | pass→pass | 8,715 | 5,058 | -42% | 1 | 1 | 0% | 1,600 | 2,413 | +51% | 0 | 0 | — |
case-08 | pass→pass | 12,181 | 5,368 | -56% | 1 | 1 | 0% | 2,081 | 2,474 | +19% | 0 | 0 | — |
case-09 | fail→pass | 13,181 | 4,110 | -69% | 1 | 1 | 0% | 2,147 | 2,246 | +5% | 0 | 0 | — |
case-10 | pass→pass | 8,264 | 3,806 | -54% | 1 | 1 | 0% | 1,480 | 2,120 | +43% | 0 | 0 | — |
case-11 | fail→pass | 9,890 | 1,629 | -84% | 1 | 1 | 0% | 1,608 | 1,778 | +11% | 0 | 0 | — |
case-12 | pass→pass | 4,287 | 2,024 | -53% | 1 | 1 | 0% | 712 | 1,799 | +153% | 0 | 0 | — |
case-13 | pass→pass | 9,704 | 4,988 | -49% | 1 | 1 | 0% | 1,685 | 2,369 | +41% | 0 | 0 | — |
case-14 | fail→pass | 10,154 | 6,820 | -33% | 1 | 1 | 0% | 1,707 | 2,666 | +56% | 0 | 0 | — |
case-15 | pass→pass | 5,934 | 3,617 | -39% | 1 | 1 | 0% | 937 | 2,037 | +117% | 0 | 0 | — |
case-16 | pass→pass | 8,097 | 6,291 | -22% | 1 | 1 | 0% | 1,404 | 2,582 | +84% | 0 | 0 | — |
case-17 | pass→pass | 4,295 | 1,341 | -69% | 1 | 1 | 0% | 893 | 1,693 | +90% | 0 | 0 | — |
case-18 | pass→pass | 5,096 | 2,248 | -56% | 1 | 1 | 0% | 970 | 1,903 | +96% | 0 | 0 | — |
case-19 | pass→pass | 4,425 | 2,612 | -41% | 1 | 1 | 0% | 815 | 2,001 | +146% | 0 | 0 | — |
case-20 | fail→fail | 11,834 | 9,262 | -22% | 1 | 1 | 0% | 2,418 | 3,395 | +40% | 0 | 0 | — |
case-21 | fail→fail | 9,109 | 7,338 | -19% | 1 | 1 | 0% | 1,843 | 2,996 | +63% | 0 | 0 | — |
case-22 | fail→fail | 9,854 | 8,005 | -19% | 1 | 1 | 0% | 1,963 | 3,104 | +58% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +32 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.