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.pyfor the headline count, andscripts/seo/build_corpus_pages.pyfor the per-language snapshot the pages render from.- Where to read it
- The whole corpus, then one page per language: Spanish, French, German, Italian, Portuguese and Polish. How the grading works is on the methodology page.
- Download
- No file yet. Ask on the support page if you want this one as a CSV and we will cut it.
- 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
- Spanish, Italian and Portuguese word overlap prints the full table. The two decision pages built on it are Spanish or Italian and Portuguese after Spanish.
- Download
- No file yet. Ask on the support page if you want this one as a CSV and we will cut it.
- 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.pychecks each collection file, andscripts/seo/export_collections.pywrites the downloads from the same files.- Where to read it
- The Vocabcord 500 defines the set, the six collection pages print all 500 phrases each (Spanish, French, German, Italian, Portuguese, Polish), and what 3,000 phrases have in common is the statistics read end to end.
- Download
- One CSV per language: Spanish, French, German, Italian, Portuguese, Polish. A printable PDF sits beside each one, for example the Spanish PDF. A licence covering full copies is still to be written; quoting with a link back here is welcome in the meantime.
- 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.pychecks each collection file, andscripts/seo/export_collections.pywrites the downloads from the same files.- Where to read it
- Italian for doctors, German for nurses, Spanish for hotel and restaurant work and Polish for warehouse and delivery work.
- Download
- One CSV per collection: Doctors, Nurses, Hospitality and Warehouse Work, with a printable PDF beside each, for example the warehouse PDF. Same terms as the 500s: quote a row with a link back, and a licence for full copies is still to be written.
- 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.