The data we publish

Every number on this site that we worked out ourselves is listed here: what it covers, how it was computed, the script that computes it, where to read it, and a line to cite it by. Four datasets so far. Quote the method with the figure: a corpus count means whatever the definition of a countable thing was, and ours is written down.

One boundary before the list. The word list behind the graded corpus is derived from the New General Service List (NGSL 1.2, Browne, Culligan and Phillips), published under CC BY-SA 4.0, and our derived vocabulary lists carry the same licence. That text is not ours and we do not present it as ours. The CEFR grading, the theme curation, the statistics computed from the packs that ship, the six 500-phrase collections, the two profession collections and the text-to-speech audio are. Each entry below says which of those it rests on.

The access date in each line is the day you read the page. Ours is filled in as an example; swap it.

The graded corpus statistics

The vocabulary corpus the app ships, counted from the pack manifests: 33,233 entries across 617 packs, six learner languages paired with English, broken down by CEFR level and by theme.

What it covers
Spanish, French, German, Italian, Portuguese and Polish, each paired with English in both directions, plus one Polish to Italian pack and an English-only track. Per level A1 to C2, per theme, with the average words per headword and per example sentence at each level, and the audio coverage of every pair.
Method
Sum the phrases in the manifest of every pack the registry ships, counting each translation direction separately. The folder tree on disk and the registry’s own phrase field both disagree with that count, so neither is used, and the per-level aggregates that bundle a level’s themed packs are excluded so nothing is counted twice.
Produced by
scripts/seo/corpus_stats.py for the headline count, and scripts/seo/build_corpus_pages.py for the per-language snapshot the pages render from.
Where to read it
Download
Last updated
2026-08-20
Cite as

Vocabcord (2026), The graded corpus statistics, https://vocabcord.com/corpus-statistics, accessed 9 September 2026.

The Romance beginner-vocabulary overlap

How close the Spanish, Italian, Portuguese and French words we teach are to one another when both languages carry the same English headword at the same CEFR level.

What it covers
A1 and A2 in four languages: 617 shared headwords at A1, 625 at A2. Six language pairs, each with the share of close spellings, the share of identical spellings and the mean distance. Spanish and Portuguese come out closest at A1, with 49.1 percent close; French and Italian sit at 14.4 percent.
Method
For every English headword two languages carry at the same level, the two target words are compared by Levenshtein distance over the length of the longer one, after lower-casing and stripping accents and punctuation, and 0.25 or less counts as close. The curation overlap is computed alongside and is a property of our own headword list rather than of the languages, so it is reported and never published as a similarity finding.
Produced by
scripts/seo/corpus_overlap.py
Where to read it
Download
Last updated
2026-09-09
Cite as

Vocabcord (2026), The Romance beginner-vocabulary overlap, https://vocabcord.com/blog/romance-vocabulary-overlap, accessed 9 September 2026.

The Vocabcord 500, and the statistics computed from it

Six lists of 500 spoken phrases, 3,000 in all, written and reviewed by us for the first weeks in a country, with the lane split, the note share and the phrase-length figures counted from the same six files.

What it covers
Spanish, French, German, Italian, Portuguese and Polish. 17 or 18 sections per list, three lanes running across them (survive 38 to 43 percent, travel 30 to 34, work 26 to 29), 802 notes across the 3,000 phrases, a median phrase length of 3 to 5 words, and questions at 35 to 42 percent of each list.
Method
Every phrase was written to one brief, one situation at a time, then edited for register and for calques, against a declared variety per language. A validator runs over each file before it renders and checks the count, the floor under every lane, duplicate phrases, notes over 160 characters and stray dashes; the published statistics are counted from those same six files.
Produced by
scripts/seo/validate_collection.py checks each collection file, and scripts/seo/export_collections.py writes the downloads from the same files.
Where to read it
Download
Last updated
2026-09-09
Cite as

Vocabcord (2026), The Vocabcord 500, https://vocabcord.com/the-vocabcord-500, accessed 9 September 2026.

The profession 200s

Four 200-phrase collections written for one job each: Italian for doctors, German for nurses, Spanish for hospitality and Polish for warehouse work, sectioned by the shape of a shift.

What it covers
800 phrases in all, 200 per collection, across 60 sections. Four lanes named for a shift run through every file (arrival 127, the work 251, people 255, admin 167). The note share is the figure that moves most, from 33 percent of the German lines to 63 percent of the Polish, because a language with cases and aspect needs a line of grammar where German needs none.
Method
The same brief and the same validator as the 500s, sized at 200, with the lanes declared in the file so the balance check reads a shift rather than a day. Register is declared per collection: Lei with patients and tu among colleagues in Italian, Sie and du in German, usted at the desk and tu on the floor in Spanish, Pan at the gate and ty on the warehouse floor in Polish. Each file draws a line at meaning: it is language for the job and never instruction in how to do the job.
Produced by
scripts/seo/validate_collection.py checks each collection file, and scripts/seo/export_collections.py writes the downloads from the same files.
Where to read it
Download
Last updated
2026-09-09
Cite as

Vocabcord (2026), The Vocabcord 200 for Doctors (Italian), https://vocabcord.com/blog/italian-for-doctors, accessed 9 September 2026.

Vocabcord (2026), The Vocabcord 200 for Nurses (German), https://vocabcord.com/blog/german-for-nurses, accessed 9 September 2026.

Vocabcord (2026), The Vocabcord 200 for Hospitality (Spanish), https://vocabcord.com/blog/spanish-for-hospitality, accessed 9 September 2026.

Vocabcord (2026), The Vocabcord 200 for Warehouse Work (Polish), https://vocabcord.com/blog/polish-for-warehouse-work, accessed 9 September 2026.

How these are kept true

Two of the four are recomputed on every deploy from the data they describe, and the build fails if a published figure has moved. scripts/seo/build_corpus_pages.py --check re-derives the corpus snapshot from the app’s pack manifests, and scripts/seo/corpus_overlap.py --check re-derives the overlap figures the same way. Both run in the branch checks and again in the deploy workflow, so a stale number fails a deploy instead of shipping. That gate exists because a figure nobody can reproduce is worse than no figure at all.

The collection figures are not under that gate, and we would rather say so than imply a check that does not run. scripts/seo/validate_collection.py is run by hand whenever a collection file changes, and it checks the shape of a file: the count, the lane floors, duplicate phrases, over-long notes. Nothing recounts the summary figures on a schedule. The figures for the 500s and the 200s were counted on 9 September 2026 and will be counted again when the files next change.

If a number here disagrees with the page it came from, or with your own count off a CSV, tell us on the support page and say which one you checked.