Method & sources
Each day a script opens every official pricing page in a real browser, in its annual and monthly views, and checks that every quoted sentence and price is still there. Any difference goes to the change log for human review; numbers are never silently replaced.
Calculator rule: for each vendor, the cheapest plan that holds your seats (stated seat minimums and maximums) and covers your team's meeting minutes (seats × hours × 60) within its stated transcription allowance. Allowances stated per user are multiplied by the seats billed; Rev pools them across seats, Sonix includes hours for the whole workspace and bills extra hours at $10 each; pay-per-hour and pay-per-minute plans cost rate × audio hours. A plan whose allowance the page does not state is kept and flagged limit not stated. Plans that cap meetings (Read.ai Free: 5 a month) use your meetings-per-user input (20 on the data pages). Money math uses exact whole cents; the browser calculator reproduces the Python calculation exactly (a test checks it).
Free plans are treated as one-person accounts unless the page states a bigger workspace (Otter Basic 5 members). Not included: tax, add-ons (AI credits, translation, API), enterprise or sales-only plans, education or nonprofit discounts and promotions. Human-verified transcripts (Rev) are shown separately and never mixed into the AI ranking.
Currency: all figures are USD. Where a page showed only a $ sign (Fireflies, Descript) it is marked verified by hand on the vendor page. Notta localises by IP, so its USD view is read with the page's IP lookup answered as a US visitor's. tl;dv's visible prices use $ while its hidden structured data says EUR, so its rows carry a currency not confirmed flag.
Ranking is by price, then vendor name. No vendor pays for placement, and affiliate status (Fireflies.ai is the only affiliate link) never changes the order.
Pending and excluded
| Item | Why it is not a ranked number |
|---|---|
| Enterprise and custom plans (Otter, Fathom, tl;dv, Read.ai Enterprise+ sales tier, Descript, Rev Unlimited, Notta, Sonix) | Priced by sales on the official page, so no number is shown or ranked. Fireflies' Enterprise ($39 per seat, annual only) is listed on its page but sales-led and never the cheapest fit. |
| Fireflies Free: transcription limit | The card says "Unlimited transcription*" while the comparison table says "Limited": the plan is kept and flagged limit not stated. |
| tl;dv currency | Visible prices use $, the page's structured data says EUR for the same amounts: rows carry currency not confirmed. |
| Fireflies and Descript currency code | The pages show $ only, with no code; marked verified by hand. |
| Rev AI developer API (rev.ai) and Descript top-ups | Per-hour or per-pack prices are not stated on the fetched pages. |
| Add-ons (Fireflies AI credits, Notta translation and Brain, Otter RTMP) | Excluded from every total. |
Sources
- Otter.ai: https://otter.ai/pricing. Plan prices are read from the pricing page in its annual (default) and monthly views. Minute allowances and workspace sizes come from the page's comparison table.
- Fireflies.ai: https://fireflies.ai/pricing, https://guide.fireflies.ai/articles/9606045468-fireflies-billing-terms. Plan prices are read from the pricing page with the billing switch on annual (default) and on monthly, and cross-checked against Fireflies' billing guide. The free plan's transcription limit is contradictory on the page, so it is flagged.
- Fathom: https://fathom.ai/pricing. Prices are read from the structured data embedded in the pricing page (it names plan, billing cycle and USD), and matched against the visible text. The page's billing toggle does not respond to automation, so the structured data is the source for the monthly and annual views.
- tl;dv: https://tldv.io/app/pricing/. Plan prices are read from the pricing page in its annual (default) and monthly views. The page's structured data labels the same amounts EUR while the visible prices use $, so tl;dv is shown with a currency caveat.
- Read.ai: https://www.read.ai/pricing. Annual prices are read from the rendered pricing page. The monthly prices are in the page source (class pricing-card-price-monthly with the label "USD. Per user / month"), because the page's billing toggle does not respond to automation.
- Descript: https://www.descript.com/pricing. Prices are read with the page's billing switch on annual (default) and on monthly. Descript prices by media hours, not by meeting, so it is shown here as a transcription editor and not as a meeting bot.
- Rev: https://www.rev.com/pricing, https://www.rev.com/services/human-transcription, https://www.rev.com/legal/terms. Subscription prices are read from Rev's pricing page in the annual (default) and monthly views; the pay-per-minute rates come from Rev's transcription page and the pricing page's human-verified tab. Rev's subscription is priced as an investigative-work platform, so it is compared here on transcription minutes only.
- Notta: https://www.notta.ai/en/pricing. Notta shows EUR to a visitor in Denmark. The fetcher answers the page's IP lookup (api.country.is) as a US visitor's would be and reads the USD view, in annual (default) and monthly modes.
- Sonix: https://sonix.ai/pricing. Prices are read from the pricing page in its monthly (default) and annual views. Annual plans are stated per year with pooled yearly hours; the per-month figures here are the yearly price divided by 12, rounded to the cent.
- Granola: https://www.granola.ai/pricing. Prices are read from the rendered pricing page. The page shows a single per-user monthly price per plan with no billing toggle, so the same price is used for monthly and annual billing.