Obligatory caveat - these elo values target classical otb rankings. lichess uses glicko2. So you can't even compare your classical ratings to these numbers and you sure as hell can't compare your rapid, blitz, or bullet rankings.
Also, I might have pulled ratings for the first three levels (marked with *) out of my bottom.
Level 1 ~ under 400 elo *
Level 2 ~ 500 elo *
Level 3 ~ 800 elo *
Level 4 ~ 1100 elo
Level 5 ~ 1500 elo
Level 6 ~ 1900 elo
Level 7 ~ 2300 elo
Level 8 ~ 2800+ elo (full strength, depth 22)
The Fairy Stockfish build we use allows "Skill Level" values from -20 to 20 (whereas classical stockfish only goes from 0 to 20). Here's the mapping from lichess AI levels to the integer Skill Level and depth values used in each single threaded, 4 pv search:
AI level => uci stuff
1 => Skill Level = -9, depth = 5
2 => Skill Level = -5, depth = 5
3 => Skill Level = -1, depth = 5
4 => Skill Level = 3, depth = 5
5 => Skill Level = 7, depth = 5
6 => Skill Level = 11, depth = 8
7 => Skill Level = 15, depth = 13
8 => full strength, single pv, depth = 22
When each MultiPV 4 search finishes, a weakness factor determined from the Skill Level is randomized and added to each of the scores. The move with the best adjusted score is chosen.
That code is here:
github.com/fairy-stockfish/Fairy-Stockfish/blob/f3e6969d11d1bec17eba26e7ae0e629ad4af71dd/src/search.cpp#L1889