thinking stiff

I cursebird more than you do.

Posted in twitter by thinkingstiff on 2009/02/02

Discovering Cursebird

If you follow me on Twitter (and you should, I’m fucking awesome: you know that recently my fellow tweeters and I discovered Cursebird is a website that tracks, in real-time, people who are cussing on Twitter. If you tweet, “This has been a long fucking day!,” your tweet will show up on Cursebird’s website for all to see.

The site tracks the following words (and variants): fuck, shit, cunt, dick, cock, twat, bloody, bastard, bollocks. It shows the percentage each word is used and whether its usage is increasing or decreasing. It also shows four pieces of information for an individual tweeter: number of swears, a score out of 100, rank compared to others, and a statement of who you cuss like.

One of the first things people do upon discovering this site is start cussing up a storm on Twitter and posting their rank. It’s fun to watch your rank and score go up. Strangely, most of my friends were in the top 1000, and several were in the top 500. I guess we’re just a filthy bunch.

After playing with it for a bit, I and others had questions about how the scoring worked, how the count worked (tweets or words), and who was number one and how many did they have. While most people gave up and just went back to their regular tweeting behaviors, I created a second twitter account, @ThinkingStiff, and started trying to figure it all out.

Researching Cursebird

The first thing I wanted to figure out was what it was counting: tweets with cussing in them, number of cuss words, or some algorithm to figure out how “well” you cussed. So I started sending one word tweets that just said “fuck.” I quickly learned that Twitter doesn’t allow this. If you send the same tweet as the last one, it doesn’t even bother posting it. Then I switched to fuck, shit, fuck, shit… That got past Twitter’s restriction and I was steadily climbing up the charts on Cursebird. It was obvious at this point that Cursebird just counts the number of tweets with a cuss word in them. It doesn’t care how many cuss words are in it, or what words you used. So, one question was answered.

I then learned that Twitter has a limit on how many tweets you can post. When you hit this limit you get this message:

Wow, that’s a lot of Twittering! You have reached your limit of updates for the hour. Try again later.

After some research I discovered it’s not really an hourly limit, it’s a daily limit of 1000 tweets. They limit you in three hour blocks, so you can send 125 tweets every three hours. Once you’ve sent that many tweets, you have to wait until the three hours is up to send more.

The next question I had was how the score worked. It’s out of 100 so my first guess was that it was a percentile. But I was confused because the same swear count was resulting in different scores. I then saw someone’s score of “Not sure of 100.” This was a clue that maybe the processing of the rank and score was delayed (I’m a database programmer, so this made sense to me). Sure enough, it takes about 15 to 20 minutes for the rank and score to update. So you start out at “Lame of 100” when you have zero swears and move to “Not sure out of 100” on your first swear until it processes your score for the first time. Then it’s a percentile. So a “50 of 100” means you have cussed more than 50 percent of the people tracked on Cursebird. With that, my second question was answered.

Along with the score is a statement of who you swear like. You start at “swears like a Mute” with zero swears and work your way up to “swears like a George Carlin Wannabe.” Both the score and the statement weren’t that interesting to me because once you have over about 50 swears your score is “100 of 100” and your statement stays at “swears like a George Carlin Wannabe.” The programmer ( said that it is possible to get “101 of 100” but I’m pretty sure he was kidding. Unless he just picked some arbitrary large number and if you ever get that high you get the magic score.

Climbing The Ranks

The only remaining questions I had were who was ranked number one and how many swears did they have. I was quickly climbing the ranks and guessed it would take me a couple of nights to take number one. So for a couple of nights, while watching movies, I typed Shit and Fuck over and over. I was careful to space them out to one every few minutes because I wasn’t sure what Twitter’s policy was on things like this. I didn’t want my account closed before I completed my tests. One thing I noticed while doing this was that Cursebird doesn’t pick up all your tweets. It’s more like half of them. So if you cuss ten times, Cursebird may only see five of them. I’ll go into this more later.

Something I didn’t expect, which started on day two, was people complaining. I had no followers, because every time someone tried to follow me I blocked them. I did this specifically so no one would have to see my tweets every few minutes. So the only place to see my tweets was on Cursebird. And the whole point of Cursebird was to track cussing so it didn’t make any sense to me that people would care, but they did. One girl told me I was ruining Twitter. One guy reported me as spam. Another guy called me a “motherfucking cheap bastard asshole.” So apparently I wasn’t cussing “right.”

That’s when I started trying to look like a real cussing tweeter, whatever that is. The simple “fuck” and “shit” tweets turned into more elaborate stream of consciousness type tweets all with the word fuck or shit in them. Each one was unique and was just whatever I was thinking about at the time. It took more concentration to come up with them, so I couldn’t really do anything else while I was doing it. I did this hours at a time while watching the live Cursebird stream of everyone else cussing. After awhile, watching and producing all this banal word vomit was making me feel crazy.

I changed my picture every day so people wouldn’t see too many tweets from the same person. I also searched Twitter ( to make sure no one was complaining about my excessive tweets. It seemed to be working. My new tweets were not offending people (even though many of them were pretty vulgar) and some people even found them interesting.

The Bot

I did this every night for a week and I was up to almost 700 swears, but I still wasn’t in 1st. In fact, I couldn’t seem to get past 3rd. It was taking way longer than I expected and I was getting totally sick of it. I started thinking that maybe the programmer, while doing testing, had accounts with many thousands of swears and I would never be able to pass them. I also thought about writing a bot (a bot, or robot, is a piece of software that automates a task) that could tweet all day long. I was watching the live stream, so I knew there wasn’t any other bots running at the time or I’d see their swears.

The very next day I discovered someone else had written a bot (@fuckbot) and was quickly gaining on me. He was 400 swears behind me and at the rate he was going he would pass me in about four hours. Fuck. So I quickly wrote a bot. It took me about two hours to get it running the way I wanted it. I used the 500 or so tweets that I’d manually written and the bot picked one of the 500 randomly and tweeted it. Because I babysat/tweeked/monitored my bot constantly, it was less like a bot and more like a sentient artificial life form. @Fuckbot was now 200 swears behind me. I knew we were both constrained by the same 1000 tweets a day limit, so I figured that, unless my bot crashed, we’d stay at about the same pace.

And my bot crashed. So I fixed a bug to make sure it wouldn’t happen again and restarted it. He was now 180 behind me. His bot was spewing out random racist crap that looked nothing like real tweets, so I knew that he would be getting complaints about it (because I was and I simply said “fuck” and “shit” over and over). He also had a big red Fuckbot avatar. If Twitter had a problem with cussing bots, I would know soon.

Several days passed with both of us running our bots and Twitter still hadn’t canceled his account. I played with tweaking the time between my tweets to see if I could gain any on him. I started at 60 seconds and slowly progressed up. I was hoping that at some point Cursebird would capture more of my tweets or that I’d get more in synch with Twitter’s maximum and I wouldn’t have the downtime every three hours where Twitter starts limiting it. That failed miserably and I ended up slipping closer to @Fuckbot. He was now 140 swears from me. So I put it back at 60 and haven’t touched it since. That seems to be the best interval, although I haven’t tried going below 60.

I’m #1

Around 1019 swears (that’s when I noticed) I took the number two position. Soon, @Fuckbot took 3rd. And that would be the end of @Fuckbot’s journey. Twitter blocked him from the public timeline so, while he can still tweet, Cursebird can’t see his tweets. His grand total was 1621 swears (

With over 1000 swears and @Fuckbot out of the race, I was much less worried about someone overtaking me. But I was still a little worried that I might suffer the same fate as @Fuckbot. I started adding new tweets to my collection on a daily basis to keep it interesting and less repetitive. A few days later, at 2814 swears and after almost two weeks, I noticed I was in 1st place!

I’ve kept the bot running and as of the time of this writing, I have almost 6300 swears ( Now that I’m not worried about getting my account closed I stopped blocking people and changing my picture. People are talking about @ThinkingStiff a little more frequently (, but less of it is hateful now.

Another bot has come on the scene recently, @shiteatingfuck. He’s 5500 swears behind me, so he probably won’t catch up until I stop mine. He started out using @Fuckbot’s random cuss word method but has since switched to movie quotes so he’ll probably be around for awhile. He’ll take 2nd in less than a week.


Here are my results climbing up the ranks. Your results will be different because there’s been a lot of cussing since I started.

Tweets: Rank

  • 60: 471st
  • 70: 345th
  • 80: 252nd
  • 90: 209th
  • 100: 171st
  • 150: 70th
  • 200: 34th
  • 250: 23rd
  • 300: 13th
  • 350: 9th
  • 400: 8th
  • 450: 4th
  • 500: 3rd
  • 700: 3rd <— wrote bot
  • 1019: 2nd
  • 2814: 1st

Here are the people that I know of that are in the top 10. There is no published top 10 list, so this is just from seeing people come up on the live feed. Many people have asked for a Top 10 list (thoughts on a leaderboard). I wouldn’t mind seeing one either, but after staring at it for hundreds of hours, I’ve learned the most fascinating part of Cursebird is the live feed (like Twistori). It’s amazing how it all just seems to look the same after awhile. Everyone complains in the same way about the same stuff. Just a slice of life.

Top 10 (Feb 2 2009)

  1. @ThinkingStiff
  2. @geofftest <— account closed
  3. @Fuckbot
  4. @shiteatingfuck
  5. @redchinese19 (Thanks @gocards300)
  6. @Mollena

UPDATE (2/4/2009): @richardhenry released a preliminary leaderboard.


I used the TwitterLib from Witty to access the Twitter API (Witty). I randomly pick one of about 500 tweets to post every 60 seconds. I verify that I haven’t posted the same tweet in the last two hours, to help eliminate the appearance of repetition. Cursebird misses tweets, but as far as I can tell it’s Twitter’s fault. Not every tweet shows up in the public timeline or the search API. It doesn’t seem like the API is doing “contains” searching, so it would be nice to add “ass” to the list of tracked words. Or at least “asshole.” If you’re writing your own bot, and want to play with the 60 second interval, remember that you are limited by the 1000 tweets a day (125 every 3 hours) that you can’t get around. So your goal should be to get as many tweets to show up in the Twitter Search.

Share: Digg . . StumbleUpon . Facebook . Twitter

Tagged with: , , , , ,

20 Responses

Subscribe to comments with RSS.

  1. Matt Youell said, on 2009/02/03 at 7:06 AM

    Do I understand the chart right? You made 700 curse-filled tweets by hand before writing a bot?

    Congrats on your victory.

  2. thinkingstiff said, on 2009/02/03 at 11:32 AM

    Yes. The first 700 were manual. 200 of those were the “fuck” “shit” ones.

  3. Isaac Z. Schlueter said, on 2009/02/03 at 4:05 PM

    I’m pretty sure @fuckbot was removed from the public timeline due to complaints about the use of the “n-word”. My goal with it was to test taboos and see what kind of blowback it would get. And, it was amusing as hell. Deep down inside, I think a lot of us are still about 7 years old. A randomized fount of dirty words made me chuckle whenever I looked at it.

    I decided to play fair, I released the bot’s code (minus the content itslef) on github:

    After well over 11,000 updates, it was clear that @fuckbot would never climb up the charts, since it was stopped at 1612. Even @richardhenry was offended.

    I’ll leave you with @fuckbot’s closing remark:

  4. […] to see a leaderboard, but they haven’t necessarily thought through what that means. As I was working with @ThinkgingStiff, I thought a lot about the problems of creating one. Most people want bots excluded, and that seems […]

  5. Richard Henry said, on 2009/02/04 at 1:18 PM

    @Isaac: Twitter removed fuckbot from the public timeline because of the unnecessary racism; I haven’t done any filtering on my end.

  6. Isaac Z. Schlueter said, on 2009/02/04 at 1:30 PM

    @richard: What racism? None of Fuckbot’s content said anything about anyone’s race. How can a single word, out of context, without any semantic content whatsoever, be racist? Why is one “magic word” acceptable, and another is not?

    I wasn’t claiming that you removed fuckbot from the running intentionally. I remarked that you got offended on the basis of this tweet of yours:

    Again, I maintain that a single word, out of context, to no one, about no one, cannot possibly be racist. Use of “the n-word” doesn’t make fuckbot racist any more than use of the j-word makes it Christian, or use of the f-word makes it sexual.

    Just a few decades ago, saying “fuck” would elicit pretty much the same reaction. A few decades before that, “damn” was off limits. Now we look at the offense previously caused by those terms, and think it’s silly.

    What will our grandchildren think is absurd about our time?

  7. shiteatingfuck said, on 2009/02/07 at 4:24 AM

    I am going to have to agree with Sir Issac here, however I do not include racist quotes from movies even though they make me laugh. They are just words and it depends on the context they are used. George Carlin explains it very well here

  8. […] Many users are deleting posts in order to protect the sanctity of their accounts, while others are indulging in naughty language in hopes of having the one account with the most curse words. Swearing on public forums has always […]

  9. J said, on 2009/02/19 at 2:09 AM

    can you remove “It’s called a fixed-gear. No it doesn’t have any brakes. Yes I can fucking stop.” from your list please? I d like to display “fixed gear” tweets on a site . It would save me some developing time. thx.

  10. thinkingstiff said, on 2009/02/19 at 9:41 AM

    I have removed that tweet for you.

  11. J said, on 2009/02/24 at 1:51 AM

    I just come back to say thanx ;)

  12. Web2.0 Junkie said, on 2009/03/24 at 3:53 AM

    No wonder you featured in so regularly.

  13. Alex Covic said, on 2009/07/05 at 2:25 AM

    Duder, I use the swear bots to find cool people. I hope you and the rest of you wannabe-researchers and achievement-whores will finish your experiments or become bored, b/c I really like to see real people cursing. It shows their true nature and makes me interested in their tweets.

    try this when bored, instead:

  14. James said, on 2009/08/01 at 10:51 AM

    At first I was starting to think I was reading the disgruntled tweets of a web dev in Sacramento, but it turns out I was only half right. Your project is fascinating and I’m glad to see that you’re getting results, however I have a slight request to ask of you. The twitteriffic iPhone app has a Nearby feature that filters all of the tweets by location (or geo tagging within a radius of an iPhone). While your tweets are funny, after the first few months, they’ve lost their luster being spammed into the local feed every minute. Would it be alright if you changed your ThinkingStiff’s account location to something other than Sacramento?

  15. thinkingstiff said, on 2009/08/02 at 10:33 AM

    I removed my location for you. Let me know if that works (at @mattwalton). If not, I’ll check-in in Antarctica or something.

  16. Sean Vanity said, on 2009/09/11 at 12:00 PM

    You are too fucking much!
    We gotta collaborate on something
    Do you have any ideas!
    Your a silly fucker!!
    Keep in touch mother fucker

  17. […], one such person has made it a full-time job. ThinkingStiff shares the story of his quest to climb to the top of Cursebird, and keep that treasured spot. There are others who have given him a run for his money, but Thinking Stiff is actually the least […]

  18. streamliningprocesses said, on 2009/12/15 at 5:49 PM

    You’re the worst, shithead – what a fuckin knob!!!

  19. […] is using to climb to the number one spot on the Cursebird leaderboard. This is actually a somewhat interesting project but is still a very annoying twitter […]

  20. Mathias Bynens said, on 2010/09/27 at 8:26 AM

    You should really alter your bot to make it use multiple curse words in every tweet. That way, you’ll gain more CurseBird experience points while still using the same amount of tweets.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: