1. Forum
  2. >
  3. Topic: Duolingo
  4. >
  5. Skill Strength Userscript


Skill Strength Userscript


I wrote a new userscript that shows you the individual strength of each skill in your tree. This way you can target the weak skills individually and keep your tree golden more easily.

I wrote about the userscript at http://blog.fabianbecker.eu/duolingo-skill-strength/

You can see how it look in the screenshot:

The script requires Tampermonkey (for Chrome, Safari) or Greasemonkey for Firefox and can be installed by clicking here


January 21, 2015



I've been making a similar study of Duo's vocabulary API (among others) for quite a while now (it's the basis for many of my posts on the subject of skill strength and decay). I noted that in your blog post that you have 2681 words total. I have 2908. The disparity is intriguing, and I wonder if it's due to the fact that I began my Spanish tree two years ago, and it's undergone at least one major update and several smaller ones during this time.

A couple of things that I've learned that may be useful to you in your evaluations:

  • The word count provided at the top of the vocabulary page is the number of lexemes that a user has learned.
  • Duolingo doesn't appear to expose these lexeme groupings directly via their API to the client, but it appears that they can be calculated using the related_lexemes array in each word object. I know they have this information available in their back-end data structure because the old Vocabulary page used to group words by lexeme before it was scrapped and eventually replaced by the current "Words" page.
  • The strength of a skill appears to not merely be the average strength of the skill's constituent words (though I myself typically describe it this way for the sake of simplicity). Instead, the constituent word forms seem as if they might be grouped and averaged by lexeme before being averaged by skill (e.g. buen, bueno, buena, buenos and buenas are averaged before that grouping is collectively averaged with other lexemic members of Adjectives1 to calculate the skill's strength). I've not confirmed this, but it appears to function in a manner very close to this.



Wow, awesome! Thanks, you saved me a lot of time - I an going to investigate this further.

As for word count: I have noticed that occasionally new words/lexemes appear out of nowhere. I think you just have practiced the Spanish tree a lot more than I have and therefore have been exposed to more lexemes. I still get about one or two new every day albeit having finished the tree. Your theory for calculating the strength of a skill sounds very reasonable. If I find the time I will implement this in the next days - I'll keep you posted.


Did you buy any of the extra word packs, e.g., Idioms? That would increase your word count, assuming you learn them.


Yes, but all three combined add very few words to the vocabulary. For the Spanish for English speakers course, completing all three only adds 15 lexemes to the word count. Even if we assume a higher than average number of forms per lexeme of 5, there aren't nearly enough to account for a difference of over 200 word forms. Additionally, with the bonus courses being a developmental afterthought, they aren't particularly well integrated into Duo's application. The smattering of new words introduced within the three bonus skills aren't even included within the vocabulary object that skelkingur and I are referring to.

In the summer of 2013, there was a significant revamp to the Spanish tree which reorganized several sections of the tree, and removed a number of words in the tree. I think there are some artifacts within my vocabulary from those changes, but have not been able to confirm that this is the source of the difference. For example, I have some words in my vocabulary (actriz is an example I can think of off the top of my head) that never come up for practice, and in the "More Details" view of the "Words" page, there's not even an example sentence available. Tomorrow, I'm going to test out of the entire tree on a much younger account and compare the two vocabularies to try to pin down the difference.


As a followup to my previous post, I created a new account and used the placement test to pass 63 of the 64 skills in the Spanish tree, and then used the "Test Out" option to skip the final skill. Unfortunately, this was pointless because apparently this causes an issue with the skill's vocabulary data, and only 503 words are returned in the vocabulary overview object. This occurred with two different accounts after testing out of the entire tree, so there definitely seems to be something mixed up on Duo's end when using the placement test / test out functionality.

Tomorrow when I have some free time, I will manually work through a few of the skills to see if doing so increases the number of words returned within the vocabulary overview object. I'll submit a bug report via the Support tab once I've collected a bit more information.

EDIT TO ADD: I decided to do a skill-specific practice session for Adjectives1 before getting some sleep tonight. After completing the practice session, the vocabulary overview object contains 514 entries (up from 503).


Thanks, it is already great!


Oooh, this looks great! Muchas gracias!


Overall Strength: 51.9 % Dead Words (0 Strength): 1096/2966


cool script I like it, I don't understand why it says I have such a low strength of the words when my entire tree is gold


That has to do with the different ways of calculating the skill strength - Duolingo uses a different formula. pinkdoug made an excellent comment above - I am going to update my script to better reflect what Duolingo is showing you.


excellent thanks for the reply


Nice tool! Thank you very much.


Hi Skelkingur. Thanks for the script. I've been using it for about a week and think it's great. I've finished my French tree and am keeping it gold so far. The script helps keep me motivated.

One small issue that I've noticed is that the Compound Past and Compound Past 2 Skills never seem to go up in percentage no matter what I do. All the others go up when I redo lessons or strengthen skills. What do you think might be causing that? Could have to do with the recent changes to the word section? I don't know if you are still active on Duo, or if you are "supporting" the script, but just found it curious to see the anomaly. Thanks again.


This is exactly my problem. In fact, frequently those will go down in percentage after strengthening them.


I'm reluctant to report this as a bug because it actually seems to result in more sensible behaviour and levels of decay - but how is this for a comparison: My Italian from English tree, completed ages ago, fully gold and stays that way with what feels like reasonable levels of revision to keep my memory fresh. However from your script overall strength is 45.1%, dead words 1171/3582 and I have some lessons at 15% or 16% strength which are still showing as gold. I can't be sure but I think those lessons have never decayed at all. The words tab backs this up with loads of words it thinks I haven't seen for over a year (although some of that is clearly nonsense as they are basic words that keep coming up).

My French from Italian tree on the other hand seems to be in permanent decay mode with a lot of non gold lessons (and I haven't even completed it) despite your handy script showing overall strength of 82.3%, dead words 15/973 and all lessons are above 50% strength.

So just working on keep a tree gold results in very different revision patterns depending on the language. It's certainly interesting but I don't think they have it quite right yet (and the French from Italian tree is driving me nuts with repeats so although I can't see a bug it's overdoing it).

So far as I can see if you get words right without hints the longest they stay gold is around three months so a full tree of 3,000 words or so is going to have 30 words needing revision daily (even assuming perfect knowledge and no typing errors) which I think is too many revision lessons for people - as you can easily double that number if you ever make any mistakes. Hmm...


What do the numbers in brackets after each topic mean? I used to think it was (number of dead words/total number of words in topic), but I just practiced Colours and made no mistakes and it went from (1/17) to (2/17). I also noticed the topic Verbs Ser/Estar says (0/1), and obviously there can't just be one word in that topic.


Hi all, the blog link is dead for me and there is no screenshot. Also I was wondering, did v0.2 ever make it ?



Version V0.2.2: https://github.com/halfdan/duolingo-skill-strength/blob/master/skill-strength.user.js (follow the RAW button)

Don't forget to add my three yellow code changes for Spanish, French and Portuguese base/source languages! :-)


Thank you :)

Google also helped find the original link: http://fabianbecker.eu/2015/01/21/duolingo-skill-strength/


@Thomas.Heiss, How do I add the yellow code changes? I'm learning Spanish from German. I found the line of code to change in your link, but I can't edit the text. So I clicked Raw and it took me to tapermonkey, but when I clicked on "source code" to view the code I still can't edit it. What exactly does this line of code change? Does it address the question I asked 2 months ago above about the numbers in brackets? Thank you!


moana, go to the tampermonkey dashboard where you can see the scripts listed and click edit from there

thomas, have you created a pull request for your changes?

I sent a change to the enhancer script but have not got a response yet


Legend, thank you! I used the code for Spanish, because I'm learning Spanish, but it says "base language". I'm learning Spanish from German - is there a code for languages from German?


if you look at the code it uses titles in different languages. Bestenliste looks like German, so I guess it is included already.


I made a pull request with Thomas changes and Fabian merged them to the core within minutes. No need to change it manually any longer^^


The link is dead :-(



For an updated link to the code repository see the other comment in this thread: https://forum.duolingo.com/comment/6561977$comment_id=29327904


Thanks very much for this helpful userscript. What are dead words, and how can I practice them? Also I'm curious why it shows 1729 words, when I've only completed 1150, unless that includes immersion.

Overall Strength: 88.1 %
Dead Words (0 Strength): 1/1729


Huge thanks for this script and some of the associated discussions. It has also proved to me that some language trees in Duolingo have bugs where some skills don't decay. I've been wondering why some of my trees need a lot more work than others to stay gold and now I know why. It's given me something to go back and practice.


Regarding your updated userscript for the new site, have you seen this discussion thread? Some of the skills do not appear to strengthen in the Skill Strength chart, no matter how much practice you give them.

Some people think it is the website, but maybe it is the script. Even if it is the website, maybe it can be accounted for in the script?

Right now, I am experiencing the same problem. I have installed the script, but it is not so useful to me anymore when several skills won't strengthen.

I hope this is something fixable!

P.S. I opened at issue at github on this.


This script doesn't work anymore. The other versions I see lying around only work for the courses that are in English.


Have you installed the updated script version 0.2?

BTW: The older version 0.1 did not have the required @updateURL, @downloadURL header tags, so my old installed version did NOT auto-update!!
New code of version 0.2 has 4 additional headers including @require.


I am in china so duolingo redirects me to duolingo.cn. And I'm playing on the reverse course (Chinese --> english) .

Perhaps the coding of that website is different in general.


I tried V0.2 with my courses.
You were right.
Only for English courses as source the word strength table is shown on www.duolingo.com.


  • EN-PT
  • EN-DE

Works not:

  • PT-EN
  • PT-DE
  • DE-EN


Has anyone of you also problems that 3-4 verb skills are not showing up in the strength view panel / words tab in their EN-PT course? https://www.duolingo.com/comment/24416411

Hallo Fabian,

3 Verb Skills können für EN-PT bei mir nicht angezeigt werden.
Der 4. Verb Skill wird zwischenzeitlich endlich angezeigt, 2-3 andere (gestärkt bis auf Gold) jedoch nicht: https://www.duolingo.com/comment/24416411

Hast Du eine Idee, was am "/vocabulary/overview" DuoLingo Backend falsch läuft und warum die "Dead Words" so hoch sind (bei 3 nicht aufgenommenen Skills ist mir das eigentlich selbst schon klar).

Viele Grüße


Hello skelkingur,

do you know why the vocabulary overview API stream does not contain 4-5 grammar skills for my EN-PT tree?


After five month I retry my EN-PT the "future perfect" skill is still listed, but 5 other skills not; will have to check them for further 2 skills are unlisted.

There should be max. 69 + 3 (bonus) skills, but only 64 are in the excel list when I copy the "Skill strength viewer" result list.

The old 3 (grammar) skill list from my Troubleshooting thread above is still correct!

I will try to submit this error in a new bug ticket to DuoLingo (has not already been done) - the staff does not really care for their "Words" list and known bugs anyways....


Change request for V0.2

This code change will work for courses from base language Portuguese.

The shown web H2 leaderboard name ("Überschrift) for PT base is Ranking.

This will get your user script working for the following courses:

  • PT-EN
  • PT-DE
  • PT-SP
  • (PT-FR - have not tried myself)

var parent = $("h2:contains('Leaderboard'),h2:contains('Bestenliste'),h2:contains('Tabella campioni'),h2:contains('Ranking')").parent();


@skelkingur @antonmo


A new Duolingo code update was rolled out to the web

(together with the test-out 20XP cap)

All H2 titles for our Web leaderboard have been changed for the div 'a5SW0' class.

old code / H2 text mappings per language

// Div Class 'a5SW0' H2 (L1 source): English - German - Italian - Portuguese - Spanish - French

Old code

// old web: var parent = $("h2:contains('Leaderboard'),h2:contains('Bestenliste'),h2:contains('Tabella campioni'),h2:contains('Ranking'),h2:contains('Tablero de posiciones'),h2:contains('Classement')").parent();

new code (tested for English + German + Portuguese)

var parent = $("h2:contains('Friends'),h2:contains('Freunde'),h2:contains('Amici'),h2:contains('Amigos'),h2:contains('Amigos'),h2:contains('Amis')").parent();


I simply "Google translated" "Friends/Freunde/Amigos" newer H2 texts for the missing Italian, Spanish and French languages.

Please help with testing (we need to verify this first for these three languages) before we commit it to the repository.


Wow, now I see, we have "Amigos" twice because of PT and SP ;)

In the code repository commit we can eliminate one translation (but maybe better to keep the old code inline comment just to be on the safe side for the "next" improvements?).


Thanks Thomas. I tested it and sent it to halfdan for approval


Hi Thomas, the change is completed


This code change will (probably) work (can not test right now) for courses from base language Spanish.

The shown web H2 leaderboard name ("Überschrift") for ES base is Tablero de posiciones

var parent = $("h2:contains('Leaderboard'),h2:contains('Bestenliste'),h2:contains('Tabella campioni'),h2:contains('Ranking'),h2:contains('Tablero de posiciones')").parent();


This code change will (probably) work (can not test right now) for courses from base language French.

The shown web H2 leaderboard name ("Überschrift") for FR base is Classement

var parent = $("h2:contains('Leaderboard'),h2:contains('Bestenliste'),h2:contains('Tabella campioni'),h2:contains('Ranking'),h2:contains('Tablero de posiciones'),h2:contains('Classement')").parent();

Learn a language in just 5 minutes a day. For free.