projects | pushover | github | twitter | rss | contact

trying to game

posted to writings on mar 6th, 2009 with tag javascript, last updated on aug 12th, 2009

i read about a while ago and my first reaction was that it was a very clever concept for the site owners, but awful from an end-user perspective. in short, you buy a pack of bids for say, $30. bidding on an auction will cost you 75 cents (from your $30) and will increase the time of the auction by 10 seconds. if you are the high bidder when the clock runs out, you win, just like a real life auction, and in contrast to ebay which has a fixed time and you have to win by "sniping" and putting in a last-second bid.

on a typical auction for a new macbook (also in contrast to ebay, all products are sold new from the site, not sold used from other members of the site) valued at $1,299, the final ending price is only $172.84. therefore, the high bidder at the end of the auction gets to buy it for $172.84. of course, by that time, 17,284 bids have been placed (each increasing the price by a penny), each costing users 75 cents. the site has earned $12,963 just in bids, plus another $172.84, totaling $13,135.84 for a $1,299 laptop. in this particular auction, the winning bidder made 1,435 of those bids and spent $1,076.25 to win, so he's not really saving much. but on another auction for the same product the next day, the winning bidder only had to spend $57 on bids to win the macbook for $9.58. quite the savings for that person.

since i realized how it worked and that it would be difficult to win anything without spending a lot of money, i turned my attention to something else.

i don't remember what brought me back to the site the other day, but while watching an auction for a laptop (the site has a realtime clock and price that updates every second), i kept noticing that people were bidding at seemingly random times when it was at no advantage to them to do so. bear in mind that these bids cost each user 75 cents, so spending 75 cents to become the top bidder when the auction has over an hour left is completely useless. there is practically no chance whatsoever that no one else will come along within that hour and outbid you.

i wrote a little javascript to be able to log auction activity for further analysis. the greasemonkey script creates an absolutely positioned div in the upper right corner. every second it reads the values of the current price, the high bidder, any new results of the bidding history (the bidder's username and whether they bid manually or with the site's "bidbutler" service) and writes these values to the div, which i could copy later and do something with. but since the page would sometimes reload on its own and lose the contents of the div, i had to make it post new entries back to my server using xmlhttprequest every second, which then gets stored in a file on my server.

after watching a few auctions for macbooks, the bidding activity usually goes like this:

  1. the counter starts for a new auction with 24 hours to go. one or two bids will start it and nothing will happen at all until about an hour left in the counter.

  2. once the counter reaches an hour or less, bids will trickle in, each costing a user 75 cents, and each increasing the auction time by 10 seconds or so.

  3. at seemingly random times between 30 minutes and 1 second left, users with bidbutler enabled will have bids placed on their behalf, each costing them 75 cents.

    an interesting thing happens when two users have bidbutler enabled, however. bidbutler will place a bid for the first user, then instantly place another bid for a second user, then again for the first user, and so on, all within 1 second. these back-and-forth bids happen so quickly that my javascript couldn't log the bids fast enough, and would only capture the last 10 that happened in 1 second. a message above the clock shows you when bids have added time to the clock and when these bidbutler matches flood in, it will display a message like "4 BidButler + $0.04 + 00:00:36".

    i have seen bidbutler bids go back and forth up to 130 times in 1 second. in that one second, the site just made $97.50 from those users, and none of them are any closer to winning the auction. in fact, since those 130 bids just added 20 minutes to the time, so there are now 20 more minutes for others to outbid them.

  4. when the clock finally dips below 5 seconds left, a lot of manual bids will be placed. some will bid at 5 seconds, others will wait until 1 or 2 seconds. each manual bid costs a user 75 cents, and adds 10 seconds to the time.

    what i believe is happening is that, since the site uses an ajax request every second to ask the server what the current price and time left are, some users are seeing the results at different times than others. while my screen may have shown the timer at 1 second left and then get bumped back up to 10 seconds, your screen may still show 1 second left and make you want to place a bid out of fear, thinking it's going to run out. immediately after bidding, you quickly see that a bunch of other users had bid a second before, or at the same time as you, so your 75 cents were spent, your bid placed, and already there are 2 other users bidding higher than you. now the timer is back up to 30 seconds.

  5. this behavior of the clock running down, a flurry of bids placed when it nears 1 second left, and then getting bumped back up to 30 seconds or more just cycles over and over.

after watching this for a while, i thought about the most optimal bidding strategy. using the site's bidbutler service was out of the question since it wasted money at every opportunity. clearly many other users were using bidbutler, which is not going to favor one user over another (each user inputs the maximum amount of bids and the ceiling price they are willing to have bidbutler bid up to).

  • one strategy was to immediately bid every time someone else bid, even if it wasted money. my bids would appear blatantly automated, so others would assume there is a bot bidding against them and that they have no chance to win. they would give up, stop bidding, and i would win. if my total amount of 75-cent bids was significantly less than the market price of the product, i would still come out ahead.

    this strategy would be expensive, but may have a higher chance of winning. if other users were actually bots, however, this strategy would have no effect and would just cost all of us more money.

  • my other strategy was to minimize the amount of 75-cent bids having to be placed by only bidding at ~1 second left. this would let all of the other users waste their money driving up the final price of the auction instead of me, and then bid only when the clock is nearly run out based on the assumption that there were no other users left that would have bid at 2 seconds.

    most human users would see the clock run to 2 seconds and bid, spending their 75 cents and bumping up the time 10 seconds, for fear that waiting until 1 or 0 seconds may not give them enough time to react and click the button.

i ended up going with the second strategy. i added some code to the greasemonkey javascript that i had written to monitor the auctions, and let it bid for me whenever the counter reached 1 second. it ran for about two days on a few different auctions for macbooks and had some interesting results. stay tuned for part two.

**update:* read part two.*

Comments? Contact me via Twitter or e-mail.