Tech companies are just hoping you’ll put up with it.
ByJohn Herrman,
a tech columnist at IntelligencerFormerly, he was a reporter and critic at the New York Times and co-editor of The Awl.
Photo-Illustration: Intelligencer; Photo: Getty
Photo-Illustration: Intelligencer; Photo: Getty
Lyft, the other ride-hailing service, announced a new feature for its app a few weeks ago: ads. Riders would soon “see ads on their ETA screen, when they match with a driver, and during their trip,” the company said. Its “captive audience” checks their phones “nearly nine times on average” during a ride. Nine unmonetized glances: a grave error, now corrected.
Recasting the process of booking and riding in a car as an advertising opportunity wasn’t Lyft’s idea: Taxi TV beat it to the punch by at least 15 years. More recently, Uber launched its own in-app advertising feature, based on the assumption that it commands “two minutes” of rider attention per ride — generating $650 million in revenue in the second quarter of 2023, and edging the company into its first-ever reported profit. The choice was clear to Lyft, which lost more than $100 million over the same period and has never been shy about borrowing from its bigger, older competitor.
Uber and Lyft were built to sell transportation to customers. Now, they sell advertisers access to their customers. It’s not a pivot, exactly — while Uber might not have reported a profit without its ad business, it represents a small fraction of the company’s $9.2 billion in reported revenue for the quarter — but it’s an increasingly common move across the stumbling tech industry. Remonetizing captive, paying users with ads is One Weird Trick that can make turn a high-revenue, low-margin business into a money-printing machine. Big tech’s desire to squeeze more money out of customers isn’t new. What’s changed is that the diverse range of tech companies that have collected “captive” users, through category dominance, network effects, or other forms of lock-in, has realized that they can squeeze a little bit harder.
Last year, Netflix, a streaming company founded on an anti-advertising message, announced that its lowest-cost subscription would for the first time include ads. Instacart reportedly owes its profitability to a relatively new high-margin advertising business, through which brands can promote their products to users; DoorDash hopes a similar offering will one day get it there, too. Amazon, which lets sellers buy ads to target customers, has gradually become the third-largest digital advertising firm behind Google and Meta. Even Apple, which profitably sells hundreds of billions of dollars’ worth of premium computers and phones each year, and which has made a big show of protecting users’ privacy from social-media ad-pushers, hasn’t been able to resist: Its advertising business, which among other things lets developers promote their software in the App Store, is estimated to bring in $4 billion a year. Older companies with tech aspirations are enthusiastic about digital advertising, too: Marriott, Best Buy, Target, and CVS have started selling and showing customers digital ads. They all do it for the same dull and powerful reason: because they can.
The gradual infiltration of advertising into any and all spaces that also contain human eyes and/or ears is neither new nor unique to the tech industry — “ad creep” was coined in the ’90s — but among companies with successful platforms and popular apps, it is particularly acute. Some of the largest modern tech companies are, if not explicitly advertising firms, built on advertising assumptions. Google is a search engine and Instagram is a social network, but for most users, both of them are free, and advertising is implied.
This isn’t ideal — advertising is arguably never ideal — but it’s a deal, and implies certain norms: Google is a thing you can expect to use in exchange for being sold to advertisers, whose ads you will see. The broad tendency among internet companies making explicit bids for attention has long been that if the product is free, you see ads. If you pay, the ads go away. You pay to eliminate ads in Spotify or YouTube. If you don’t, you sit through them. There are plenty of reasons to worry about such a framework — targeted advertising is a form of surveillance, and it certainly doesn’t feel great to effectively buy back your own attention with a subscription alternative — but it made sense on its own terms.
It was also, in comparison to older media providers, who had over the years settled on more of an all-of-the-above financial arrangement, sort of refreshing. Paying TV customers still saw ads despite growing bills. Newspaper subscribers still got pitched by businesses trying to steer opinion and sell products between news stories. Here was a new world in which the boundary between paying for a product and being the product was restored, briefly.
With its discounted $6.99 streaming plan, Netflix, the revolutionary entertainment-and-tech company that changed everything, has innovated its way all the way back around to basic cable. (We can have a little transitive fun with Netflix marketing here: Netflix, which Reed Hastings famously claimed to “compete with sleep,” is now trying to replace sleep with advertising.) Like its predecessors in media, it either couldn’t or wouldn’t leave that money, or those new customers, on the table. This was arguably inevitable. A pair of known and often blended strategies for monetizing media and attention were simply applied to, and by, a new class of media and attention firms.
It’s the app-ification of non-media businesses (shopping, ordering food, taking taxis, going to therapy, tracking your period) that presents newer and weirder ad-creep scenarios, in which situational norms are subtly eroded in favor of more ads. If you shop in a big-box store, sure, you expect to see a lot of promotional material from brands. Packaging is advertising! Perhaps paid arrangements have been made with the retailer about where and how products are displayed, and maybe your receipt even has a little ad on it, too. But the reason Amazon’s advertising business is so lucrative is because it’s more assertive than that. There’s hardly an interface on Amazon that doesn’t contain multiple dynamic ads, targeted at you personally or based on your current or recent activities on that site. In industry parlance, they’re more “relevant.” In practice, they amount to interference: with your searching, your browsing, your train of thought; with the completion of your intended act of commerce, which already involved your paying Amazon for toilet paper or a new phone battery.
Any brick-and-mortar equivalent — a salesperson following you from section to section pointing at the shelves? Brand representatives dangling knockoff headphones in front of your face at the Apple display case? Intercom announcements by a guy in a surveillance booth addressing you by your full birth name? — would be intolerable, a normative rupture that would feel absurd. (That’s not to suggest retailers aren’t inching in this direction anyway.)
Getting jostled around your smartphone or laptop interface by interfaces flanked and infested by highly informed ads, on the other hand, is something users have been conditioned to expect by the era’s defining internet companies and practically every other app or service they interact with. The only thing surprising about being monetized twice over by an app you use is that it wasn’t three times — there’s money in those diminished expectations for users’ time and environments, and the industry knows it.
Internet companies will reflexively make the case that targeted, real-time advertising like this adds value, allowing customers to learn about brands or products that they didn’t know they needed or wouldn’t have otherwise found, but it’s the most pathetically small and necessary act of self-respect to remember, as a customer but also as a conscious organism, that this is a massive, bold, fundamental lie. Your attention is being sold, with consent that you didn’t so much grant as exhaustedly relinquish, with the consequence of making your life microscopically more annoying, your choices a bit less certain, and your sense of consumerist suckerhood ever so slightly elevated.
But, again, you’re in a store, buying things. While extra inducements might feel annoying, disruptive, or slimy, they’re at most a minor drag on the pre-degraded experience of large-scale e-commerce. Likewise, the introduction of ads in an Uber or Lyft app is only a minor escalation of the fundamentally estranging ride-hailing arrangement, in which a platform uses algorithmic dispatching and antagonistic rider-driver mutual rating systems to turn a former service into an in-app purchase and a former job into joblike gig. So what if there are ads? What are you going to do, not ride?
From a corporate perspective, this looks something like free money; more accurately, it’s the imposition of a subtle cost, and only technically not a broken promise. This isn’t what users thought they were signing up for (an app for paying drivers) even as they literally were (terms of service across vastly different types of tech services are substantially the same).
As with all new forms of advertising, these small abrasions to the psyche and social fabric are individually tolerable, even when they’re surprising at first, but together represent a pretty big downgrade. The uniformity of user experience across tech categories — you’re looking at your already ad-filled screen, alone — makes further intrusions easier to justify and excuse. An initiative to monetize DDMs (despondent-diner minutes) spent staring off into space via dynamic gaze-tracking displays at Applebee’s would probably give diners, and maybe even shareholders, pause. By contrast, monetizing stray phone glances, however they’ve been collected, is smartphone business as usual — a screen-level metanorm that makes the presence of ads across digital life both a business imperative and a resigned user expectation. The tech industry created vast new digital spaces in which we’ve learned to live and consume, in brief episodes of engagement. Now, it’s realized that it has a golden opportunity here: to re-create the experience of watching TV at a gas pump at nearly infinite scale.
That tech-company ad creep and industry-wide drive toward subscription services (and subscription price increases, exemplified by streamflation) occurring at the same time looks at first glance like a contradiction, but they’re two expressions of the same imperative: to better monetize the user, distinct from a mere customer in her persistent presence and captivity in the increasingly winner-take-all economy that populates her home screen. They can also function like two sides of a vise. A subscription is a form of voluntary lock-in, and while paying subscribers might be galled at ads, they’re probably also the least likely to actually leave. Why not spam them a little?
Put another way, advertising is another way to pass along costs for companies that are lately desperate to pass along their costs. Given the current state of the tech industry — hundreds of thousands of job cuts in the last year alone — our future, as users, is looking both more expensive and more plastered with ads.
The original version of this story misstated the timing of Netflix’s embrace of ads and incorrectly said that Candy Crush offered a paid ad-free tier.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(3),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(136),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(408),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"408":408,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]