Brain-Flak, 90 bytes
(((((()()()){}()){}){}()){})(([()()()])({}){}){(({}<({}[()])>)<{({}()<(({}))>)}>{}())}{}{}
Explanation:
To set up we push the ASCII code for : (one more than 9) and the integer -9 for our counter.
(((((()()()){}()){}){}()){})(([()()()])({}){})
Then we begin our loop. In our loop we start by decrementing the top character on the stack.
{ Loop
(({}< Pick up counter
({}[()]) Decrement character
>) Put counter down
Then we duplicate the top character \$n\$ times where \$-n\$ is the value of our counter.
< Silently
{({}()< Loop n times
(({})) Duplicate a char
>)}{} end loop
> end silent
This makes \$n+1\$ copies of the desired number, which is needed since at the start of our next loop we are going to decrement the last one.
At this point we finish off the loop by incrementing the counter.
())}{}
Once out of the loop the last thing we have to do is remove the extra 1 that was created.
{}
Compare this with the output of JoKing's autogolfer
Brain-Flak, 142 bytes
(((((((((((((((((((((((((((((((((((((((((((((((((()()()){}){}){}){}())()))())))()))))())))))()))))))())))))))()))))))))()))))))))){({}<>)<>}<>
- 102.8k
- 23
- 299
- 697