# Swahili speech-to-text: Whisper tested in 4 African languages

> Does AI transcribe Swahili? Whisper tested on 7 read sentences in Swahili, French, Lingala and Wolof (October 2026): word errors and cost in KES.

- Published: 2026-10-15
- Updated: 2026-11-02
- Author: Gael — Tchavi founder
- Canonical: https://tchavi.com/en/blog/whatsapp-voice-notes-ai-swahili-transcription

---


For Swahili, yes, with a caveat: on read sentences, Whisper keeps the meaning, but about one word in three needs correcting (35%). French is near-perfect (5%). Lingala comes out as a phonetic spelling you would have to review (75%). Wolof does not work at all. And the problem with Wolof is less the failure than its shape: Whisper returns no error. It writes a well-formed French sentence that has nothing to do with what was said.

These results come from a small test I ran in October 2026: seven recorded sentences, one transcription each, on the only transcription model Tchavi offers today, [Whisper](https://tchavi.com/en/m/openai/whisper-1). Seven sentences is not much. It is enough to tell you where Swahili speech-to-text is usable and where it is not, and what it costs in Kenyan shillings.

## In short

- **Swahili is usable for understanding and sorting messages, not for publishing as-is.** Through Tchavi, an OpenAI-compatible AI API gateway you pay for with mobile money, Whisper gave me 35% word errors on two Kenyan Swahili sentences: words split in two, names misheard, meaning intact.
- **French is reliable (5%). Lingala is phonetic (75%). Wolof is not supported (107%):** on both Wolof sentences, Whisper returned invented French with no warning.
- **Not real voice notes.** I used read sentences from the FLEURS dataset, recorded in quiet conditions. A real WhatsApp voice note, with street noise and code-switching between Swahili and English, will do worse. Treat the Swahili figure as a ceiling, not an average.
- **Cost: 13 credits per started minute, about KES 1,** and about KES 1 with a summary on top, at October 2026 rates. A KES 250 top-up covers about 250 short voice notes.

## The short answer, language by language

| Language | Sentences tested      | Word errors | Verdict                                                  |
| -------- | --------------------- | ----------- | -------------------------------------------------------- |
| Swahili  | 2 (10.6 s and 21.4 s) | 35%         | Usable: the meaning comes through, the spelling does not |
| French   | 2 (6 s and 14.5 s)    | 5%          | Reliable                                                 |
| Lingala  | 1 (11.6 s)            | 75%         | Phonetic, needs review                                   |
| Wolof    | 2 (9.5 s and 8 s)     | 107%        | No: invented French                                      |

The "word errors" column is the word error rate (WER): the share of words you would have to add, remove or replace to get back the sentence that was actually said. At 0%, the transcription is exact. Above 100%, the output is longer than the sentence and wrong throughout.

## What I tested, exactly

The recordings come from FLEURS ([research paper](https://arxiv.org/abs/2205.12446)), a dataset released by Google under a CC BY 4.0 licence: sentences read aloud by native speakers, each with a reference transcript. I took two Swahili clips, two French, one Lingala and two Wolof. The Swahili clips are Kenyan Swahili (`sw_ke`), which is the closest match for readers in Kenya and Uganda; I did not test Tanzanian Swahili. I had planned Yoruba and Hausa too, but the server that distributes those files refused my requests, so they are not in the table.

Each sentence went once to Tchavi's transcription API, with no language specified, the way a WhatsApp voice note arrives: unlabelled. Then I counted the wrong words, after lowercasing everything and removing punctuation. That makes the scores slightly kinder than a strict comparison, since a missing comma or capital letter does not count.

One thing matters for reading the table: these are read sentences, in a quiet room, by people who articulate. A real voice note recorded on a matatu, mixing Swahili and English in the same sentence, will do worse. The French and Swahili figures are a ceiling, not an average.

## Swahili: the meaning comes through, the spelling does not

The first Swahili sentence came out almost intact: "Amazon pia ni mto mpana zaidi duniani, wakati mwingine maili sita kuhupana." Only the last two words merged ("kwa upana" became "kuhupana"). It says the Amazon is the widest river in the world, sometimes six miles across.

The second one is longer and contains English proper names. Whisper heard "Spotting" for "Sporting" and split words in two ("wajitole aji" for "wajitoleaji"), but anyone who reads Swahili understands the sentence without effort. That is where the 35% comes from: many words to correct, little meaning lost.

What this means in practice: for a bot that sorts incoming messages (order, complaint, question), or for you reading forty voice notes a day, Swahili transcription is good enough. For a keyword search on exact spellings, or text you want to publish, plan to review it. I did not use the `language` parameter, to reproduce a voice note that arrives without a label. If all your users speak Swahili, pass `language: 'sw'`; I did not measure what it changes.

## Lingala and French

In Lingala, Whisper writes what it hears, syllable by syllable: "Bitu kamingi batu bakina kikuna" for "Bituka mingi bato bakendaka kuna". A speaker recognises the sentence by reading it aloud. A program looking for keywords will find nothing.

In French, one sentence came out exact and the other had two wrong passages, three words in total ("Ils n'avaient" for "Il n'avait", "ni à s'aider" for "ni à celles").

## Wolof: Whisper does not understand it, and does not say so

**Sentence 1.** Said in Wolof: "Làkku italiyen warul nekk lu jafe noonu ndax baat yu ci gëna bari, niñu leen bindee lañu leen di waxee." The meaning: Italian pronunciation is easy, because most words are pronounced as they are written.

Whisper returned (in French): "The Italians should not be disappointed, no, no, because there are still many things we have to tell you."

**Sentence 2.** Said in Wolof: "Diine ji gëna mag ci Moldavie chrétien orthodoxe bi." The meaning: the main religion in Moldova is Orthodox Christianity.

Whisper returned (in French): "That is what we call Orthodox Christianity in Moldovan."

In the second sentence, Whisper latched onto the French words that Wolof borrows, "Moldavie" and "chrétien orthodoxe", and built a French sentence around them. In the first, it only had "italiyen" to hold on to, and invented everything else.

If you run customer support for people who write and speak Wolof, this is the trap. An error message you can see. A fluent, wrong sentence will get a confident automated answer. This result matches figures published elsewhere: on the same FLEURS Wolof data, ElevenLabs reports a 97.4% word error rate for Whisper Large v3 ([source](https://elevenlabs.io/speech-to-text/wolof), checked in October 2026). Specialised models exist, such as [Kiriku-Wolof-ASR](https://huggingface.co/AIHubSN/Kiriku-Wolof-ASR) from AI Hub Senegal, a Whisper model retrained on Wolof. I did not test it, and Tchavi does not offer it today.

The same applies to any language Whisper does not list. If your users write to you in a language that is not on its list, do not wire an automatic reply to the transcript. Forward the voice note to a person who speaks it, offer buttons for common requests, and ask for text when the message commits you to something: an address, an amount, an order reference.

## Transcribe and summarise a voice note in Node.js

For a bot, or for you, the raw transcript is less useful than one sentence that says what the voice note is about. Two calls are enough: Whisper for the text, a small chat model for the summary.

```js
// voice-note.mjs — npm install openai
import OpenAI from 'openai';
import { createReadStream } from 'node:fs';

const ai = new OpenAI({
  apiKey: process.env.TCHAVI_API_KEY,
  baseURL: 'https://tchavi.com/api/v1',
});

// 1. The voice note (WhatsApp sends it as .ogg) becomes text.
const transcription = await ai.audio.transcriptions.create({
  model: 'whisper-1',
  file: createReadStream(process.argv[2] ?? 'note.ogg'),
  // language: 'sw', // if you know the language in advance
});
console.log('Transcript:', transcription.text);

// 2. The text becomes one sentence in English.
const summary = await ai.chat.completions.create({
  model: 'gemini-3.1-flash-lite',
  max_tokens: 400,
  messages: [
    {
      role: 'system',
      content:
        'You receive the transcript of a voice note. Answer in English, in one sentence: what is it about, and what language was it spoken in?',
    },
    { role: 'user', content: transcription.text },
  ],
});
console.log('Summary:', summary.choices[0].message.content);
```

Run it with `TCHAVI_API_KEY=sk-tch-… node voice-note.mjs note.ogg`. To get the `.ogg` file from the WhatsApp Cloud API (voice notes are `audio/ogg` with the opus codec), you make two authenticated requests with your token: `GET /{media-id}` returns a download URL, then an authenticated `GET` on that URL returns the file ([Meta's documentation](https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media)). The other transcription parameters (`language`, `prompt`, output formats) are in the [audio documentation](https://tchavi.com/en/docs/audio).

The summary model matters as much as the transcription. I sent the Swahili transcript of the Amazon sentence to three inexpensive models, with exactly this prompt (translated from the French one I used, which asked for the answer in French):

| Model                                                       | Answer (translated from French)                                                                                           | Right? |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------ |
| [Mistral Small 4](https://tchavi.com/en/m/mistral/mistral-small-latest)       | "This voice note is about rain and its abundance in some regions of the world, and it was spoken in Swahili."             | No     |
| [GPT-6 Luna](https://tchavi.com/en/m/openai/gpt-6-luna)                       | "It is about the width of the Amazon and was spoken in Swahili."                                                          | Yes    |
| [Gemini 3.1 Flash Lite](https://tchavi.com/en/m/google/gemini-3.1-flash-lite) | "This voice note, spoken in Swahili, is about the impressive width of the Amazon river, which can reach up to six miles." | Yes    |

One try per model, so no conclusion about Mistral Small 4 in general. But on this voice note it summarised a text it had not understood, with the same confidence as Whisper on Wolof. If your bot acts on the summary, test the model on your own voice notes before wiring it in.

## How much does transcribing a voice note cost in Kenyan shillings

Whisper bills 13 credits per started minute. A 20-second voice note and a 55-second one cost the same. A voice note of 2 minutes 10 seconds counts as 3 minutes: 39 credits. The response gives the real duration (`tchavi.duration_minutes`, the actual length, not the billed one) and the credits charged (`tchavi.credits_used`).

At the rate I got from Tchavi's estimate endpoint on 22 October 2026, KES 1,000 buys 13,204 credits. Rounded, that gives about these figures at October 2026 rates:

| What                                          | Credits | About, in KES |
| --------------------------------------------- | ------- | ------------- |
| One voice note of under a minute              | 13      | 1             |
| A 2 minute 10 second voice note (3 min)       | 39      | 3             |
| Summary on Gemini 3.1 Flash Lite              | 0.15    | 0.01          |
| Summary on GPT-6 Luna                         | 0.12    | 0.01          |
| The whole test: 7 transcriptions, 3 summaries | 91      | 7             |

A summary costs almost nothing next to the transcription. A voice note of under a minute, transcribed and summarised, comes to about KES 1. The minimum top-up of KES 250 buys about 3,300 credits, which covers about 250 such voice notes. Your first paid top-up also adds a bonus of 150 credits, enough for about ten more. The account starts at 0 credits, with no free signup credits, and credits never expire.

These are public prices; Whisper is on discount right now, and [its page](https://tchavi.com/en/m/openai/whisper-1) shows the price billed today. Prices for text, image and video models are in each model's page.

## FAQ

### Does AI understand Swahili voice notes?

Mostly. On two Kenyan Swahili sentences, Whisper kept the meaning, with 35% of words to correct on average: words split in two and proper names misheard. For summarising or sorting messages that is enough. For text you want to publish, review it. A real voice note with background noise will do worse than these read sentences.

### Does Whisper work for Tanzanian Swahili or Ugandan Swahili?

I do not know. My two Swahili clips are Kenyan Swahili (`sw_ke`), and I did not test other varieties, so I have no figure to give you.

### Which AI understands Wolof in a voice note?

None of the models Tchavi offers today. Whisper, the transcription model available, does not have Wolof in its language list, and on two read Wolof sentences it returned invented French instead of an error. Specialised models such as Kiriku-Wolof-ASR report better results, but Tchavi does not offer them. For Wolof, plan on human review.

### What about Yoruba, Hausa or Fon?

Fon is not in Whisper's language list and I did not test it. Yoruba and Hausa are in the list, but I could not retrieve reference recordings for this test, so I have no measurement to give you.

### How much does it cost to transcribe a voice note?

13 credits per started minute, about KES 1, whether the voice note lasts 10 or 55 seconds. With a one-sentence summary from a small model, it is still about KES 1 for a voice note of under a minute, at October 2026 rates.

### Do I have to specify the language of the voice note?

No. Without the `language` parameter, Whisper detects the language itself, which is how I ran this test. If you know it in advance, you can pass its code (`sw`, `fr`, `ln`). Wolof is not in Whisper's list, so specifying it will not teach the model the language.

### Does Tchavi store my voice notes?

No. For audio, Tchavi passes the file to the model and returns its answer without keeping the content: neither the audio nor the transcription is stored, only billing data (model, duration, cost, file size and format) and the request's IP address. The file is processed by the model's publisher, OpenAI for Whisper, under its own privacy policy.

---

If your customers send you voice notes, the fastest thing is to test on yours. Take three voice notes from your WhatsApp inbox and run the script above: in ten minutes you know whether your language works. [Create your account and top up KES 250](https://tchavi.com/en/register?next=%2Fdashboard%2Fbilling%3Famount%3D250%26currency%3DKES%26from%3Dblog-voice-notes-en) with mobile money, in [the countries listed here](https://tchavi.com/en/docs/payments), and you have enough for the test and a few hundred voice notes after it.

_This article is part of the series "Building an AI product from Africa". Tchavi is an OpenAI-compatible AI API gateway: one key gives access to over 100 text, image, audio and video models, and you pay for it with mobile money, no bank card ([countries and operators](https://tchavi.com/en/docs/payments)). In the series: [paying for the OpenAI or Claude API with M-Pesa](https://tchavi.com/en/blog/pay-openai-claude-api-mpesa-mobile-money), [Claude Code without a credit card](https://tchavi.com/en/blog/claude-code-without-credit-card-mobile-money) and [Ollama and Tchavi side by side](https://tchavi.com/en/blog/ollama-tchavi-local-and-cloud-models). More guides, in French: [the French blog](https://tchavi.com/fr/blog). Follow us: [LinkedIn](https://www.linkedin.com/company/tchavi) and [X](https://x.com/tchaviai)._

