Skip to main content
deepgram-cost-tuning Optimize Deepgram costs and usage for budget-conscious deployments.
Use when reducing transcription costs, implementing usage controls,
or optimizing pricing tier utilization.
Trigger: "deepgram cost", "reduce deepgram spending", "deepgram pricing",
"deepgram budget", "optimize deepgram usage", "deepgram billing".
Jump to install Skills Marketplace Discover and explore AI skills built by the community.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Copy promptShow prompt details A direct command skips the review prompt. Inspect the source before running it.
npx skills add https://github.com/jeremylongshore/claude-code-plugins-plus-skills --skill deepgram-cost-tuningThe command stays on one line. Scroll horizontally to inspect it before copying.
Prefer a local copy? Download the files currently available to SkillsMP.
Download Zip Downloading... More from this repository Implement user sign-up and sign-in flows with Clerk.
Use when building authentication UI, customizing sign-in experience,
or implementing OAuth social login.
Trigger with phrases like "clerk sign-in", "clerk sign-up",
"clerk login flow", "clerk OAuth", "clerk social login".
Implement session management and middleware with Clerk.
Use when managing user sessions, configuring route protection,
or implementing token refresh and custom JWT templates.
Trigger with phrases like "clerk session", "clerk middleware",
"clerk route protection", "clerk token", "clerk JWT".
Configure enterprise SSO, role-based access control, and organization management.
Use when implementing SSO integration, configuring role-based permissions,
or setting up organization-level controls.
Trigger with phrases like "clerk SSO", "clerk RBAC",
"clerk enterprise", "clerk roles", "clerk permissions", "clerk organizations".
Related occupations SOC
Based on SOC occupation classification
name deepgram-cost-tuning description Optimize Deepgram costs and usage for budget-conscious deployments.
Use when reducing transcription costs, implementing usage controls,
or optimizing pricing tier utilization.
Trigger: "deepgram cost", "reduce deepgram spending", "deepgram pricing",
"deepgram budget", "optimize deepgram usage", "deepgram billing".
allowed-tools Read, Write, Edit, Bash(ffmpeg:*) version 1.13.0 license MIT author Jeremy Longshore <jeremy@intentsolutions.io> tags ["saas","deepgram","cost-optimization","billing"] compatibility Designed for Claude Code, also compatible with Codex and OpenClaw
Deepgram Cost Tuning
Overview
Optimize Deepgram API costs through smart model selection, audio preprocessing to reduce billable minutes, usage monitoring via the Deepgram API, budget guardrails, and feature-aware cost estimation. Deepgram bills per audio minute processed.
Deepgram Pricing (2026)
Product Model Price/Minute Notes STT (Batch) Nova-3 $0.0043 Best accuracy STT (Batch) Nova-2 $0.0043 Proven stable STT (Streaming) Nova-3 $0.0059 Real-time STT (Streaming) Nova-2 $0.0059 Real-time STT (Batch) Base $0.0048 Fastest STT (Batch) Whisper $0.0048 Multilingual TTS Aura-2 Pay-per-character See TTS pricing Intelligence Summarize/Topics/Sentiment Included with STT No extra cost
Add-on costs:
Diarization: +$0.0044/min
Multichannel: billed per channel
Instructions
Step 1: Budget-Aware Transcription Service
import { createClient } from '@deepgram/sdk' ;
interface BudgetConfig {
monthlyLimitUsd : number ;
warningThreshold : number ;
costPerMinute : number ;
}
class BudgetAwareTranscriber {
private client : ReturnType < createClient>;
: ;
monthlySpendUsd = ;
monthlyMinutes = ;
( ) {
. = (apiKey);
. = config;
}
( ) {
estimatedCost = . (options);
projected = . + estimatedCost;
(projected > . . ) {
(
+
);
}
(projected > . . * . . ) {
. (
+
);
}
{ result, error } = . . . . (
source, options
);
(error) error;
duration = result. . / ;
actualCost = . (duration, options);
. += duration;
. += actualCost;
result;
}
( : ): {
. ( , options);
}
( : , : ): {
cost = minutes * . . ;
(options. ) cost += minutes * ;
cost;
}
( ) {
{
: . . ( ),
: . . ( ),
: ( . . - . ). ( ),
: (( . / . . ) * ). ( ),
};
}
}
transcriber = (process. . !, {
: ,
: ,
: ,
});
typeof
private
config
BudgetConfig
private
0
private
0
constructor
apiKey : string , config : BudgetConfig
this
client
createClient
this
config
async
transcribe
source : any , options : any
const
this
estimateCost
const
this
monthlySpendUsd
if
this
config
monthlyLimitUsd
throw
new
Error
`Budget exceeded: $${this .monthlySpendUsd.toFixed(2 )} spent, `
`$${this .config.monthlyLimitUsd} limit`
if
this
config
monthlyLimitUsd
this
config
warningThreshold
console
warn
`Budget warning: ${((projected / this .config.monthlyLimitUsd) * 100 ).toFixed(0 )} % `
`of $${this .config.monthlyLimitUsd} limit`
const
await
this
client
listen
prerecorded
transcribeUrl
if
throw
const
metadata
duration
60
const
this
calculateCost
this
monthlyMinutes
this
monthlySpendUsd
return
private
estimateCost
options
any
number
return
this
calculateCost
5
private
calculateCost
minutes
number
options
any
number
let
this
config
costPerMinute
if
diarize
0.0044
return
getUsageSummary
return
minutesUsed
this
monthlyMinutes
toFixed
1
spentUsd
this
monthlySpendUsd
toFixed
4
remainingUsd
this
config
monthlyLimitUsd
this
monthlySpendUsd
toFixed
4
utilizationPercent
this
monthlySpendUsd
this
config
monthlyLimitUsd
100
toFixed
1
const
new
BudgetAwareTranscriber
env
DEEPGRAM_API_KEY
monthlyLimitUsd
100
warningThreshold
0.8
costPerMinute
0.0043
Step 2: Reduce Billable Minutes with Audio Preprocessing
ffmpeg -i input.wav \
-af "silenceremove=stop_periods=-1:stop_duration=0.5:stop_threshold=-30dB" \
-ar 16000 -ac 1 -acodec pcm_s16le \
trimmed.wav
ffmpeg -i input.wav \
-filter:a "atempo=1.25" \
-ar 16000 -ac 1 -acodec pcm_s16le \
faster.wav
import { execSync } from 'child_process' ;
function measureSavings (inputPath : string ) {
const origDuration = parseFloat (
execSync (`ffprobe -v quiet -show_entries format=duration -of csv=p=0 "${inputPath} "` )
.toString ().trim ()
);
execSync (`ffmpeg -y -i "${inputPath} " \
-af "silenceremove=stop_periods=-1:stop_duration=0.5:stop_threshold=-30dB" \
-ar 16000 -ac 1 -acodec pcm_s16le /tmp/trimmed.wav 2>/dev/null` );
const trimmedDuration = parseFloat (
execSync (`ffprobe -v quiet -show_entries format=duration -of csv=p=0 /tmp/trimmed.wav` )
.toString ().trim ()
);
const savings = ((1 - trimmedDuration / origDuration) * 100 ).toFixed (1 );
const costSaved = ((origDuration - trimmedDuration) / 60 * 0.0043 ).toFixed (4 );
console .log (`Original: ${origDuration.toFixed(1 )} s` );
console .log (`Trimmed: ${trimmedDuration.toFixed(1 )} s` );
console .log (`Savings: ${savings} % (${costSaved} /file at $0.0043/min)` );
}
Step 3: Query Deepgram Usage API import { createClient } from '@deepgram/sdk' ;
async function getUsageDashboard (projectId : string ) {
const client = createClient (process.env .DEEPGRAM_API_KEY !);
const now = new Date ();
const monthStart = new Date (now.getFullYear (), now.getMonth (), 1 );
const { result } = await client.manage .getUsage (projectId, {
start : monthStart.toISOString (),
end : now.toISOString (),
});
const byModel : Record <string , { minutes : number ; cost : number }> = {};
for (const entry of (result as any ).results ?? []) {
const model = entry.model ?? 'unknown' ;
if (!byModel[model]) byModel[model] = { minutes : 0 , cost : 0 };
byModel[model].minutes += (entry.hours ?? 0 ) * 60 + (entry.minutes ?? 0 );
}
console .log ('=== Monthly Usage ===' );
for (const [model, data] of Object .entries (byModel)) {
const cost = data.minutes * 0.0043 ;
console .log (`${model} : ${data.minutes.toFixed(1 )} min ($${cost.toFixed(2 )} )` );
}
const dayOfMonth = now.getDate ();
const daysInMonth = new Date (now.getFullYear (), now.getMonth () + 1 , 0 ).getDate ();
const totalMinutes = Object .values (byModel).reduce ((s, d ) => s + d.minutes , 0 );
const projectedMinutes = (totalMinutes / dayOfMonth) * daysInMonth;
const projectedCost = projectedMinutes * 0.0043 ;
console .log (`\nProjected monthly: ${projectedMinutes.toFixed(0 )} min ($${projectedCost.toFixed(2 )} )` );
}
Step 4: Cost-Optimized Model Selection function recommendModel (params : {
qualityNeeded: 'high' | 'medium' | 'low' ;
isRealtime: boolean ;
languages: string [];
budgetPerMinute?: number ;
} ): { model : string ; pricePerMin : number ; reason : string } {
const { qualityNeeded, isRealtime, languages, budgetPerMinute } = params;
if (languages.length > 1 || !['en' , 'es' , 'fr' , 'de' ].includes (languages[0 ])) {
return { model : 'whisper-large' , pricePerMin : 0.0048 , reason : 'Multilingual support' };
}
if (budgetPerMinute !== undefined && budgetPerMinute < 0.005 ) {
return { model : 'nova-2' , pricePerMin : 0.0043 , reason : 'Best price per quality' };
}
if (isRealtime) {
return { model : 'nova-3' , pricePerMin : 0.0059 , reason : 'Best real-time accuracy' };
}
switch (qualityNeeded) {
case 'high' :
return { model : 'nova-3' , pricePerMin : 0.0043 , reason : 'Highest accuracy' };
case 'medium' :
return { model : 'nova-2' , pricePerMin : 0.0043 , reason : 'Good accuracy, proven' };
case 'low' :
return { model : 'base' , pricePerMin : 0.0048 , reason : 'Fastest processing' };
}
}
Step 5: Feature Cost Awareness
const featureCosts : Record <string , { cost : number ; description : string }> = {
smart_format : { cost : 0 , description : 'Punctuation + paragraphs + numerals' },
punctuate : { cost : 0 , description : 'Punctuation only' },
paragraphs : { cost : 0 , description : 'Paragraph formatting' },
summarize : { cost : 0 , description : 'AI summary (included with STT)' },
detect_topics : { cost : 0 , description : 'Topic detection (included)' },
sentiment : { cost : 0 , description : 'Sentiment analysis (included)' },
intents : { cost : 0 , description : 'Intent recognition (included)' },
redact : { cost : 0 , description : 'PII redaction (included)' },
diarize : { cost : 0.0044 , description : 'Speaker identification (+$0.0044/min)' },
multichannel : { cost : 0.0043 , description : 'Per-channel billing (1x STT cost per channel)' },
};
function estimateJobCost (params : {
durationMinutes: number ;
model: string ;
features: string [];
channels?: number ;
} ): number {
const baseCost = params.durationMinutes * 0.0043 ;
let addOnCost = 0 ;
for (const feature of params.features ) {
addOnCost += (featureCosts[feature]?.cost ?? 0 ) * params.durationMinutes ;
}
const channelMultiplier = params.channels ?? 1 ;
return (baseCost + addOnCost) * channelMultiplier;
}
Output
Budget-aware transcription with auto-blocking
Audio preprocessing to reduce billable minutes
Usage dashboard via Deepgram API
Cost-optimized model recommendation
Feature cost breakdown with estimation
Cost Optimization Quick Wins Strategy Savings Effort Remove silence from audio 10-40% Low (ffmpeg one-liner) Disable diarization when not needed ~50% Low (remove option) Use callback for long files Indirect (no timeouts) Low Cache repeated transcriptions 20-60% Medium (Redis) Speed up audio 1.25x 20% Low (ffmpeg) Use Nova-2 instead of Nova-3 0% (same price) None Batch pre-recorded vs streaming 37% ($0.0043 vs $0.0059) Medium
Error Handling Issue Cause Solution Budget exceeded No controls Enable budget check before transcription Unexpected charges Diarization always on Make diarization opt-in Usage API empty Wrong project ID Get ID from getProjects() Cost spike Batch job without limits Set concurrency limits + budget cap
Resources