
Is StubHub's Website Deceiving Users? - surye
http://jordancolburn.com/2017/09/11/stubhub-shows-already-sold-tickets/
======
dyladan
Creating a false sense of urgency is a cornerstone of modern marketing. The
only difference between this and any other marketing campaign is that you just
happened to catch them this time.

This is just like when you go to an electronics store and they put the super
expensive tv (almost) nobody buys right next to the still very expensive but
comparably more modest model. You are more likely to buy that second tv even
if costs more than you initially budgeted because your brain tells you that
this is the cheaper model with _almost_ the same features as the flagship tv.

For another example, many ecommerce sites will list the number available in
stock if it is low, and sometimes will just say "few available" without
specifying a number. This creates the same (sometimes false) sense of urgency.

~~~
jordancolburn
Yeah, but to stick with the analogy, isn't this more like putting out empty
boxes of TVs that have already been sold and having employees dressed as
customers frantically buying them in front of regular customers.

Thanks for reading btw, and thanks to whoever posted it here.

~~~
hkmurakami
Which apparently is done at some of the new hip restaurants.

[https://www.washingtonpost.com/news/innovations/wp/2017/08/1...](https://www.washingtonpost.com/news/innovations/wp/2017/08/16/see-
the-hipsters-lined-up-outside-that-new-restaurant-this-app-pays-them-to-stand-
there/)

~~~
seanp2k2
Hmm, I wonder if Amazon was doing this with their new store at Santana Row in
SJ: [https://imgur.com/a/qSVYG](https://imgur.com/a/qSVYG)

------
krrrh
Booking.com are the all-time kings of this approach. The search results page
is littered with highlighted messages like.

“4 people are looking at this room now”

“2 people just booked at this hotel”

“Too bad you already missed out on this hot deal”

“X% of the neighbourhood/city/region you’re looking at is already booked!”

...

It’s quite likely real information, but the timeframes and language are vague
enough to make you feel like you’ve got about 5 minutes to lock a room down.
They do such a good job at instilling anxiety that you feel like you achieved
something important when you finally book.

~~~
koolba
The " _... just booked this hotel!_ " is the funniest because they make it
seem like they booked it for the dates you're searching.

In reality it's somebody booked the hotel, at some point in the past X
(minutes? hours? days?), for some dates in the future that more than likely
have nothing to do with when you plan on being there.

------
jordancolburn
Company responded and said they removed the "feature". They confirmed to me
that it was part of an AB test (which I had seen in the code), but did not
confirm or deny my suspicion that the AB was used to apply it only to events
where it was less likely to be discovered.

I was half-jokingly going to ask for tickets to the game, lol. But after they
requested I post an update and clarify their response to removing the feature,
it just felt wrong. I mean, I'm glad they removed it, but that's a pretty big
thing to act like it should all just be OK and it's a "feature" users didn't
like. And I think their urgency in removing it only shows how bad it really
was, not how concerned they are for users.

[https://twitter.com/StubHub/status/907384565085257729](https://twitter.com/StubHub/status/907384565085257729)

~~~
kbenson
> And I think their urgency in removing it only shows how bad it really was,
> not how concerned they are for users.

Well, that only really shows how bad it might be or was being perceived and
whatever backlash it might generate. It's entirely possible to feel like you
have to backpedal on something that was meant entirely for the good of others
because it's _perceived_ as self serving (not that this situation maps to
that, I'm making a general point).

------
mcescalante
This reminds me of this tweet about Verzion's "agents waiting" implementation
on their website fetching the real count one time and then randomly changing
via Math.random():
[https://twitter.com/mixonic/status/736575632226852865?lang=e...](https://twitter.com/mixonic/status/736575632226852865?lang=en)

------
chasb
I wonder if the FTC would be interested in this. Section 5 of the FTC Act lets
the agency regulate deceptive marketing practices. The FTC's test for
deception has three requirements:

1\. There must be a representation, omission, or practice that misleads or is
likely to mislead the consumer.

2\. The act or practice must be considered from the perspective of the
reasonable consumer.

3\. The representation, omission, or practice must be material.

The post suggests StubHub is making very specific misrepresentations about
specific ticket rights; the tactic here would deceive a reasonable consumer;
and the misrepresentation is made to induce the sale.

~~~
dawnerd
I think they key is that they're pulling ticket that are actually sold out:

> When you load a page they get a list of tickets that have already sold

I'm sure they could argue that since they are real tickets are actually sold
out then they're not actually being deceptive.

I really hate these dark patterns - been getting worse and worse on travel
sites.

~~~
chasb
Possibly, but here StubHub would have to explain why they displayed it as
unsold with a delay, and why the FTC should not consider that deceptive.

If the ticket was already sold, why the delay? A reasonable consumer think
that specific ticket had just been sold at that moment, which sounds like a
material misrepresentation.

~~~
dawnerd
Totally agree with you. Unfortunately, I don't have faith the FTC would side
with consumers on this. Now, if Stubhub advertised the ticket as being
available on a prior page knowing it was sold out...

~~~
diggernet
It _was_ displayed as being available for a few seconds before it changed to
sold...

------
mbesto
But growth hacking right?

In all seriousness, I love how techniques like this are "ok" when the company
is considered a "startup", but when it suddenly becomes "evil megacorp", it's
all of the sudden considered deception.

~~~
tyrust
I'd be surprised if anyone would think that this is ok for a company of any
size.

~~~
StuieK
Go look at the "discounts" on Wish vs the Amazon prices. Big company now, 100%
lying directly to the consumer.

~~~
tyrust
I'm not familiar with Wish and it appears that I need an account to look at
their site.

More relevant to my comment, I am not familiar with public sentiment of Wish.

------
ghostbrainalpha
Music Festivals use this same concept. By having pricing tiers for tickets you
can have more "sold out" events, as they happen at each stage, driving
interest.

It works, and it is REAL unlike the javascript you see here, but it is still
stupid.

Can you imagine going to a Donut shop in the morning that had just sold 10% of
its daily inventory and them putting up a SOLD OUT sign for Tier 1 Early Bird
donuts?

I hope one day marketers find a better solution for generating interest in
their products.

~~~
dclowd9901
I see this as a way to let people who are _very_ interested in the event
("true fans") get in while it's cheap, taxing those who are lazier or "lesser"
fans for their dawdling.

~~~
xzel
I would say its probably more due to a commitment made by the fan vs maybe not
going and the fact the concert/venue/promoter can invest/spend that money now
instead of later.

------
klodolph
The key deception with StubHub is that you're not actually buying tickets,
you're actually giving away put options for free.

~~~
ghostly_s
Huh?

~~~
arjie
Once upon a time, a guy bought tickets for a basketball game on Stubhub. Some
months after he bought the ticket, superstar Kobe Bryant announced that it was
going to be his last game. Ticket prices shot up and the buyer was thrilled
that he still had a ticket. However, the seller was equally unenthused by the
idea of having sold his ticket at so much under its now-increased value. So he
cancelled the sale. There was a big fuss, and Stubhub gave the one buyer a
ticket to the game.

If you give someone a put option for some quantity on something, they then get
the power to sell that amount of that something to you at a specific price.
Usually, you want to get money in exchange for giving someone that power. In
the markets, this is called selling someone a put option.

This chap's point is that you could agree to buy a ticket for $150 to see Kobe
Bryant on Stubhub. This doesn't mean you get a ticket. This just means you
gave someone on Stubhub the option to sell you a ticket at $150 because if the
price rises to $1500, he's going to choose not to sell you that ticket by
doing what the seller did in the previous case. Since you get no money for
giving the seller the power, you're not selling the option, you're giving it
away for free.

That's probably the context to his comment. I neither agree nor disagree with
it.

~~~
klodolph
This isn't just a one time thing, it's how StubHub operates. They will even
"sell" tickets with no inventory and then not exercise the option if they
can't fulfill it profitably.

------
joeax
Just to be clear, it isn't that it's taking the top few listings and randomly
marking as sold, but that the code is going out and retrieving what appear to
be already sold listings (as stored in the _urgencyMessageListings_ variable),
and just injecting the top 2 from that array randomly in positions 1-5 in the
main list (through a Array.splice() call).

While somewhat deceiving, it's not as bad as marking tickets that haven't sold
as sold. Imagine if you were trying to sell your tix at the last minute, well
that would be bad. (I've sold tix at the last minute before and that would
scare me.)

~~~
preinheimer
To me the problem here is the transition: they appear available then are
marked as sold. Had they appeared sold from the start, that would have been
fine. But by transitioning them they've stated a timeline for their sale which
is incorrect.

------
AngelloPozo
Providing a user with a list of recently or relevant tickets being sold is
cool. But Manually adding them to a user list does not help the customer.
Especially if they mark them as sold after being "available".

------
artursapek
Some poor programmer had to grit his teeth and implement this while pressured
by his "agile" "product" "manager" to "finish the sprint".

~~~
root_axis
Probably not that poor after having received his check for doing so.

~~~
artursapek
I meant poor in more of a higher fulfillment sense

------
javabean22
So one time I bought tickets to a concert from Stubhub. Then the headliner
cancelled their appearance due to unforeseen circumstances and what not. But
the concert was not cancelled as there were extra acts who would still
perform. The headliner's website informed ticket holders that they could get a
full refund "at the place of purchase" if they wanted. I asked Stubhub about
that, their reply was (I'm paraphrasing): "Get f..cked. No refund, no
nothing.. We don't care."

------
mwexler
Didn't Uber have a similar issue? You open the app, see multiple cars around
you, so initiate a request, only to discover that the nearest car is actually
not that near (and won't take your request)? Uber later said that the display
of cars was just representative, that it wasn't revealing the real location or
amount of cars near you on purpose to protect privacy of drivers... but that
seemed a bit disingenuous.

------
pfedigan
Where has ethics gone to in the corporate world?

I also came across them displaying say only 4 tickets for what it seems like a
sold out event but in reality it was never sold out and the prices were
cheaper on the day of the actual event.

I recall seeing something along the lines of the event being almost sold out.

Maybe Stubhub only had 4 tickets during that time so I could be wrong. It is a
sale from ticket holder to ticket holder.

~~~
mst
> Where has ethics gone to in the corporate world?

I suspect either "outcompeted" or "only required until you've crushed all of
the competition who might use it to outcompete you". Neither is a particularly
cheering thought.

------
kbenson
> if (!globals.hideUrgencyMessage && SH.mbox.justSoldEvent &&
> urgencyMessageListings && urgencyMessageListings.length) {

Have you considered that SH.mbox.justSoldEvent might be noting that there were
recent sales, and while they weren't _just_ sold as the page was loaded, the
system may actually indicate that sales are happening and to be aware that the
listings may not persist in the current state for long?

As of right now, SH.mbox.justSoldEvent is undefined for me, but they may have
specifically disabled the system (or only use it if there are sales but not
too many). Looking at the seller's interface on SH for this, the last three
transactions happened within 10 minutes of when I loaded the sales data, and
each were for a pair. Looking at the sales data I can see that the two you had
shown to you were consecutive transactions at 2017-09-11T17:45:40.000Z and
2017-09-11T17:38:55.000Z, which I'm willing to bet were the two most recent
sales when you loaded the page.

If that's what's going on, it's not _only_ for SH's benefit. This also signals
to buyers what's selling right now, and what migh be sold soon in case you are
eyeing a particular listing but are holding off for some reason. If similar
things have sold recently, maybe that set won't still be there if you wait a
few minutes. This isn't necessarily simulated demand, but _real_ demand, the
same as if you were in a store and watching a particular item fly off the
shelves. If the stock is depleted, you might not be able to get one, so
knowing people are buying them might influence whether you feel secure in
waiting for a bit or not.

(For what it's worth, I do not work for nor have ever worked for StubHub, but
I do work in the event ticketing industry so are familiar with them and how to
use them).

~~~
jordancolburn
I did think that might be the case. However, after deleting the IDs multiple
times, the same sold tickets kept popping up, even minutes later (didn't time
it exactly, but it was a while).

So, why don't the sold tickets follow the sorting rules, they are inserted at
the top. And why is it limited just to 2 of these unsorted previously sold
items at the top and not just mark them in their place on the list if they
have since sold. It seems pretty clear to me that it was designed to create a
sense of urgency to the user. Another user on reddit also reported that they
saw items that did not match their filters at all but were somehow inserted on
their list.

I am 100% open to the fact that poking around for 20 min or so might not lead
me to a complete understanding of their system, but the intent of this code
seemed pretty clear to me and I was able to continually able to bring up
already sold tickets.

~~~
kbenson
> However, after deleting the IDs multiple times, the same sold tickets kept
> popping up, even minutes later (didn't time it exactly, but it was a while).

Well, those sales were almost 7 minutes apart. I just looked, and the next
sale was at 2017-09-11T17:59:24.000Z, so almost 15 minutes later.

> And why is it limited just to 2 of these unsorted previously sold items at
> the top and not just mark them in their place on the list if they have since
> sold.

Stubhub lets you limit the shown tickets to specific zones, sections, price
ranges, quantities, etc. There's no guarantee that the latest sales would be
visible in your normal display. That said, if they really wanted to deceive
people and make them think there was a sense of urgency when there wasn't,
they could search through all the prior transactions for this event (~ 100 so
far in the last 24 hours) for items that more closely matched the price and/or
section and/or row to make you think that what you're looking at right then is
what's selling, even if the transactions were from hours ago. Limiting
themselves to what I think are likely the two most recent transactions and
being completely transaparent about the section, row and prices the were sold
at is fairly straightforward if you ask me (and more than you'll get on some
primary markets, such as TicketMaster, where promoters will withhold large
chunks of inventory to make the event look more sold out than it is, only to
release them closer to the event date).

> It seems pretty clear to me that it was designed to create a sense of
> urgency to the user.

Sure, but what they're trading for that is real market information, which is
useful for the user as well. It's a trade, not necessarily a deception or
manipulation.

> Another user on reddit also reported that they saw items that did not match
> their filters at all but were somehow inserted on their list.

So here's a question, say you're Stubhub and you want to indicate the last two
sales, so users know what's selling _and_ to hopefully influence them to buy
now. You don't want to show all sales, that's proprietary information, and
only a certain amount of history is even provided to those people with
accounts selling for that event. How do you integrate that into the page
display in a way that is noticeable, doesn't detract from other useful
elements to much (such as a designated section when there aren't any recent
sales, which could possibly be used for more room to show the map or
listings), and can easily be added/removed as needed?

I think given those constraints, which I think are likely and not very
extreme, the method they chose is a fairly natural choice, even if it doesn't
make everyone happy.

> but the intent of this code seemed pretty clear to me and I was able to
> continually able to bring up already sold tickets.

Careful with attributing intent, or thinking you completely understand all the
implications of that intent. There's a lot that goes into something like that
and sitting down with someone responsible for it and understanding their
position, thoughts and reasoning might change your opinion on the matter even
if the intent is the exact same. Imperfect knowledge of complex systems leads
to imperfect understanding actions within that system. We have different
opinions on what is going on here, but that might just be because one or both
of us is missing information that the other has about how the system functions
as a whole. I, for one, see this almost entirely in a positive light, now that
I believe I understand some of the details of how it functions. It's not fake
data being presented, and it doesn't seem to be cherry picked to create
incorrect assumptions in the buyer. I think it's the most recently sold items,
and while the signalling isn't perfect, I would much rather have that data
available than not.

~~~
jordancolburn
I appreciate the thorough response. It did make me stop and think about my
assumptions. You present some convincing points,but I still come to the same
conclusion because:

1\. The sales stop showing after the first load and the values are saved in
application storage. Why would they hide them if they are so valuable to the
user. My guess is that users would be annoyed to constantly see these values
and the users would catch on that they are only "recent" and not "realtime"
sales

2\. Why are the recent sales randomized in their location on the list. If it
is such valuable info, why are they not placed at the top every time. Again,
b/c users would ignore them and quickly learn they are not real-time sales.

3\. If it so valuable to users, why not present it in a special location such
as its own list. Why would useful pricing data be randomly put into the top of
the list. Again, users don't really care so much about what recently sold as
much unless it affects what is available now.

4\. As SH, you have the option to show people recent sales, or how many
tickets that are left. But to only show two recent sales and do it in a way
that blends with other tickets is a deliberate choice to manipulate the user
in a way that does not coincide with their expectation that those tickets
shown to them on load where available when the page was loaded.

Basically, this "feature" was a combination of many design decisions and all
of them lean toward cues to the user that these items are "real time" sales
that just happened since we loaded the page, and away from helping the user
realize the true nature of these sales. And of course it is done in a way that
benefits stub hub and not the consumer, which is upsetting from a place that
presents itself as a "marketplace", since users expect transparency from them
(the price you list is the price, what I am told is available is available).

~~~
kbenson
Fair enough, and some of those are good points that I perhaps wasn't giving
enough credence to, particularly the first. The others have weight, but I
think that weight canby mostly or fully mitigated by common business or
implementation reasons (as noted previously).

------
mcescalante
I have gone to Stubhub a few times now to try to replicate this, and searched
for tickets for popular NFL and MLB teams, and I can't get this "Sold" thing
to work the way this posts shows it - actually it doesn't happen at all for
me. Has anyone else been able to replicate the "sold after load" behavior? Is
it only on specific events?

~~~
jordancolburn
Maybe, they had some other junk about AB test flags and I didn't dig far
enough to see how that was set or if it was random from the server. My wild
guess is that they turn it on for popular events close to the time of the
event, so there is less chance of users noticing.

~~~
mcescalante
Yeah, that's likely the case. I do _not_ see the urgency message in my session
data for this NFL game (suggesting it won't do it's sold out thing for this
event) but I do see something in my local storage called
"cache:local:app:urgencyMessageData"

------
patmcguire
"ugrency-message"

~~~
jordancolburn
I actually didn't catch that typo they made the first time as I was so shocked
at how easy it was to force it to keep reloading already sold tickets.

------
bau5
If they'd used a minifier, most or all of this embarrassment could have been
avoided.

~~~
zeveb
WebAssembly will help hide this!

~~~
BHSPitMonkey
Wouldn't decompiled/disassembled wasm code be about as readable as unminified
JavaScript?

~~~
TeMPOraL
Not if there was a proper optimization pass while compiling.

------
swrobel
They just disabled it, so I guess that’s a win...?
[https://twitter.com/stubhub/status/907384565085257729](https://twitter.com/stubhub/status/907384565085257729)

------
wyqydsyq
I'd argue they aren't deceiving users as those tickets _were actually sold_

It would be deceiving if they showed an artificially falling stock counter or
something to that effect, but in reality they are showing actual true data, it
is only the way in which they show it (randomly inserted amongst search
results) that can cause a sense of urgency, but there is still no deception
here.

------
yeukhon
I am only a user, but I find TickPick a solid alternate choice to all other
ticket sales sites. The "no BS hidden fee" got me hooked up (plus the company
always give out promo code). Other products aren't as transparent.

But this sort of false urgency is misleading and should be illegal.

------
hatcherdogg
SH: Deceive until we get caught, then we will 'listen' to our customers and
adapt.

Blegh.

------
lbill
I can't believe thay did such a deceptive manipulation in JS! We can acces
this JS code, how stupid are they?!

------
scottrogers86
Airbnb is also adopting this strategy.

~~~
dredmorbius
Reference requested.

------
hartator
I haven't heard of this website before. Don't forget that bad publicity is
still publicity.

~~~
icelancer
>>I haven't heard of this website before.

StubHub is widely, widely known to anyone who attends music events or sporting
events. It's the largest exchange by a lot. They don't need bad publicity to
spread the word.

------
mdip
This is an interesting play on a very old con game[0] that was common in used
car dealerships and appliance shops.

It works like this: You walk in, interested in buying. You talk with the
salesman, settle on a car but are having cold feet/want to talk it over with
your spouse, etc. Just as you're about to "walk away", an employee dressed
down to appear as a customer, swoops in and makes a "cash offer" on the car
you were interested in. Haggling ensues with the other guy protesting that
"you weren't going to buy it, so I want it!" and you reluctantly put a down
payment on it to keep it from being stolen out from under you (good old loss
aversion at its finest).

Alternatives to this include having an appliance/couch that is not
ridiculously, but significantly marked down from its street price that the
salesman is convincing you to buy. Your sales guy talks about what a great
unit it is and its great price and you're ready to pay and take it home when
he springs on you that the "Sold" sign fell off the unit and conveniently slid
underneath it. Not to worry, of course, because there's just as good of a deal
on the upgrade and even though it's a few hundred more, he'll knock the same
hundred or so off of that price that the other was marked down, so it'll cost
more, but it's a better unit[1].

Of course, the more expensive unit isn't -- really -- more expensive, or
better than the one you were looking at, it's just marked at a price they can
actually sell it for and make money. The other one wasn't even for sale in the
first place, it's a prop. This is _exceptionally_ common at middle-class
furniture stores where the prices listed on _everything_ are MSRP and the
product _never_ sells for that price with even the lowest-on-the-rung sales
guys having a percentage on the price that they're allowed to discount without
approval[2]. It gives the salespeople the lee-way to make you feel like you're
getting a good deal and pull stunts like this to up their commission/the
stores profits. When I worked retail (not commission), this was a common
practice and that "more expensive item" often had a bonus attached to it for
the salesperson (sometimes money, sometimes free stuff).

It's interesting to see some of this playing out in the digital world, which
basically eliminated a lot of these practices because you can instantly
compare pricing/products among many sellers/stores, but there'll always be
ways to play at the weaknesses of the buyer.

[0] Which I thought was a clearly defined illegal practice, like "bait and
switch" is known to be. But might not be (though as some have mentioned, the
FTC might have an opinion on the subject).

[1] ...and this is _basically_ a form of bait and switch, but it's a lot
easier to get away with and falls into a grayer area depending on the
jurisdiction (usually a product that isn't available has to be advertised at a
great price where upon arrival to purchase the product, an alternative,
higher-profit item is peddled with the company having never had any intention
of selling the cheap product).

[2] Though a really common way of convincing a customer that they're getting a
great deal is to bring that manager in to do the ceremony of granting a
discount even though the sales guy could have done it himself. "Since it was
my fault in trying to sell you something that was already sold, I'll explain
that to the GM and see if we can give you a bigger discount for the cock-up."

------
agjacobson
Many people lack a gut level understanding of this concept: a vendor who deep
discounts or sells at cost can generate almost arbitrarily large revenues. For
a while.

~~~
wolfgang42
How is this relevant to the post at hand?

