Skip to content
Journal / pricing

Understanding per-unit pricing for AI APIs: a billing literacy guide

Per-query, per-page, per-character, per-second, per-token: what each AI API billing unit means, with real 2026 prices and the math to compare them.

I read pricing pages for a living, and the single most common way I see developers get burned is not high prices. It is unit confusion. AI tool APIs bill in at least seven different units, the units do not convert into each other without knowing your workload, and a provider that looks cheap in its native unit can be expensive in yours. This post is the decoder ring.

All prices below are routed prices from our catalog, meaning provider list plus 20% (the fee structure is documented at /docs/pricing). Divide by 1.2 for direct list prices.

The seven units you will actually meet

Per query (search). The simplest unit: one search, one charge. Serper costs $1.20 per thousand queries; Exa costs $8.40. The catch is fan-out: agents rarely search once. An agent that decomposes a task into eight sub-queries pays eight times per task, so your real unit is queries per task, not queries.

Per page (scraping and parsing). Scrapers like Jina Reader and Spider charge $0.36 per thousand pages; Firecrawl charges $1.92. Parsers bill the same way: LlamaParse at $1.50, Reducto at $1.80, Mistral OCR at $2.40 per thousand. Two catches here. First, “page” means a URL for scrapers but a document page for parsers, so a 300-page PDF is one scrape and 300 parse units. Second, premium modes can multiply units: LlamaParse’s premium tier costs roughly 15x base units for the same physical page.

Per character (text-to-speech). TTS bills on input text length. Deepgram Aura-2 costs $0.036 per thousand characters, LMNT $0.06, ElevenLabs $0.12. English averages very roughly a thousand characters per 150 to 180 spoken words, so a ten minute narration (call it 1,600 words, about 9,000 characters) runs about $0.32 on Deepgram and about $1.08 on ElevenLabs. Characters are the unit; minutes of audio are what you actually wanted, so do this conversion for your own scripts before comparing.

Per audio minute (transcription). STT flips it: you pay for input duration. Groq’s hosted Whisper large-v3-turbo costs $0.00084 per minute routed, Deepgram Nova-3 $0.00516, ElevenLabs Scribe $0.00804. An hour of audio is therefore about $0.05 on Groq and about $0.48 on Scribe. Transcription is so cheap per minute that people stop doing the math, then transcribe a 10,000 hour archive and discover the difference between $30 and $290 (rounding Groq at $0.0504/hour versus Scribe at $0.4824/hour).

Per image. Image generation at least bills in the unit you care about. Our catalog runs from DeepInfra’s FLUX-dev at $0.0108 per image to xAI Grok at $0.084, with fal.ai ($0.03), Replicate ($0.036), and OpenAI GPT Image ($0.0636) between. Watch for resolution and step-count multipliers on some providers; the headline number is usually the default configuration.

Per clip-second (video). Video generation bills per second of output video. fal.ai’s Kling costs $0.048 per clip-second, Replicate’s Wan-2.2 $0.06. A five second clip is therefore about a quarter. This is the unit that most punishes iteration: ten retries of a five second clip is fifty billable seconds, and nothing on the pricing page warns you that your acceptance rate is part of your price.

Per million tokens (embeddings). Embeddings bill like LLMs. DeepInfra’s bge-large costs $0.012 per million tokens, OpenAI’s text-embedding-3-small $0.024, Mixedbread’s mxbai-embed-large $0.072. A million tokens is roughly 750,000 English words, so embedding even a large corpus costs single-digit dollars. The trap here is not the price, it is re-embedding: vectors from different models do not mix, so switching providers means paying the whole corpus again.

Per vCPU-second (code sandboxes). The most infrastructure-flavored unit. E2B and Daytona both cost $0.0000168 per vCPU-second routed. A sandbox with 2 vCPUs alive for five minutes costs 2 x 300 x $0.0000168, about a penny. The unit ticks while the sandbox exists, not while it computes, so idle sandboxes you forgot to tear down are the entire cost story.

How to actually compare across units

The method I use, and the one behind every comparison table we publish:

  1. Define your task unit. “One research task”, “one document ingested”, “one minute of conversation.” Everything converts to this.
  2. Count native units per task. Eight searches, three scrapes, 40 parsed pages, 9,000 TTS characters. Log real traffic if you can; guesses here are where estimates die.
  3. Multiply and sum. Now every provider mix has a single number: cost per task. Compare those, not pricing pages.

When you run this exercise, two things usually fall out. First, one category dominates your bill, and it is rarely the one with the scariest-looking per-unit price. Second, the cheap-versus-premium decision (Groq versus Scribe, Jina versus Firecrawl) only matters in your dominant category; everywhere else, pick on quality and forget the pennies. Every response from our router includes the exact price of that call, which makes step two an export instead of an estimate, and the per-category comparison pages like transcription and text-to-speech are pre-baked versions of step three.

Units are not pedantry. They are the difference between predicting your bill and discovering it.

Pick your dominant category and run the math against real prices, starting with the embedding comparison page.