This post is all about how one tiny Minion went on to change the world.
Ok not really.  

It's about this guy: Short Standard Minion (2 Eyes) Clip-On 5" Plush Keychain and his incredibly volatile pricing.

Short Standard Minion (2 Eyes) Clip-On 5" Plush

Why Minions?

Over the past several months, Waldo has been tracking product prices across several dozen retailers and millions of products. All of these retailers change product prices: some change super frequently (>1 time per day) and some only seasonally (think summer sales).

After some initial data collection, our Minion friend above was changing prices over 10 times a day, often multiple times within an hour.

I was pretty sure this was an error and that we were in need of some additional minion QA:

Minion QA - "Where Quality Comes 1st™"

If however the data we had was correct, I was gonna get it at the lowest possible price.

I was on a mission: Mission Minion Impossible.

Minion Methodology - Setting up the Experiment

To address all these questions, we setup a simple experiment to let us track the price over a 10 day period. Building the test was straightforward:

  1. Save the price every day
  2. Take a screenshot for validation
  3. Analyze the data

I was quite skeptical,  What strategy was behind changing the price of a keychain so frequently? How much price sensitivity between a $5.87 and $6.50 plush keychain toy could there be?

Minion Money Madness - The Results


After about 6 days of testing, we pulled the pricing data and screen captures together.

The gif below shows a time lapse of the product webpage, along with the price history. Right around 4/12/2018 is where things get wild.

In just 6 days:

  1. The price changed 101 times
  2. The price increased as much as $1.10 or 19.93%

Diggin' in a bit deeper

Below we can see another plot of the price over time. There's a pretty similar pattern (looks a lot like a step function) starting on both 4/12/2019 and 4/14/2019.

The first step occurs from 4/12/2019 6:45:15 to 4/13/2019 1:10:09 (18 hours, 24 minutes and 54 seconds)

The price first spikes to $6.62 and then falls to $5.53. On average, the minion drops $.059 per hour during this period. 29hrs later, the pattern repeats again.

Minions dropping in price

Wait, but...its just a Minion Keychain

I really don't know why this minion's price changes so much. Like I mentioned earlier, I suspect demand elasticity for minion keychains to be flat. However...

If you look closely on the Target webpage, the Minion listed there is sold by another company: Tonyk.

After a quick search, I found that the exact same Minion keychain is listed on Tonyk's and Amazon's pages...all for different prices!

Definitely need to get more keys for these guys

Try it yourself: each of the sites are linked below.  I'll put money on it that none of them are the same right now. Prices below are as of 4/25/2019 4:43pm MT:

  1. Amazon Minion - $5.89
  2. Toynk Minion - $5.95
  3. Target Minion - $5.90

It's possible that Amazon and Target are setting their prices off of one another, so they both slowly chase each other down to a floor of $5.53, one then jacks the price up again, and the cycle starts over again. Potentially a topic for the next Minion-themed post.

Sweet Sweet Victory

After wrapping up the analysis and seeing the price flatline at $5.53, I went ahead and placed my order.

Wrapping up

Product prices changes that aren't listed as sales are unnerving. As a consumer, you're left wondering: am I actually getting a low price?  Imagine buying a share of stock without having the price history. Thats exactly what purchasing retail items online is like. You don't have enough historical information to understand if a current price (whether its a listed sale or not) is truly a good deal.

We've built Waldo to help with this: rather than track prices every day waiting for the lowest price, we let you shop now and get you your money back when prices drop.

Enough talk. Go buy yourself a Minion keychain. Just get it at the lowest price.  

Or just signup for Waldo.

Appendix:

How we built the test:

To grab the data for each price change, we used the script below. It ran every 15min during the experiment.

const puppeteer = require('puppeteer');

(async () => {
    // Open brower and go to the minion page
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://www.target.com/p/minion-movie-short-standard-minion-2-eyes-clip-on-5-plush/-/A-75480917');

    const text = await page.evaluate(() => {
    // Grab the price using an XPATH
    const price = document.evaluate(
            'string(//div/div/span[@data-test="product-price"][1]/text())',
            document
        ).stringValue;

    return price;
    });

    // Save the time, screenshot, and minion price to a file
    let time = Math.round(+new Date() / 1000);
    await page.screenshot({ path: './pics/' + time + '_' + text + '_minion.png' });
    await browser.close();

Combining the screenshots and charts:

from PIL import Image

# grab the screenshot and chart and combine:
def merge_img(img1_path, img2_path, name):
    files = [img1_path, img2_path]
    result = Image.new("RGB", (1600, 600))
    size = 800
    for index, file in enumerate(files):
        path = os.path.expanduser(file)
        img = Image.open(path)
        img.thumbnail((size, size), Image.ANTIALIAS)
        x = index % 2 * size
        y = index // 2 * size
        w, h = img.size
        result.paste(img, (x, y, x + w, y + h))
    
    save_path = './combined_img/' + name.split('.png')[0] + '_combined.png'
    result.save(os.path.expanduser(save_path))

Creating the video using ffmpeg:

ffmpeg -f image2 -pattern_type glob -framerate 45 -i '*.png' -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4