Ben Leventhal transformed restaurants twice. His newest project is all about loyalty.
ByAdam Platt,
a features writer at New Yorkwho served for many years as the magazine’s critic
Photo: Kirra Cheers
Photo: Kirra Cheers
This article was featured in One Great Story, New York’s reading recommendation newsletter. Sign up here to get it nightly.
I’m not afraid to admit it. Growing up, my favorite restaurant was Planet Hollywood,” says the man who has arguably done more than anyone to shape the tastes and habits of the unruly online age of New York City dining. Ben Leventhal’s ideal dish back then was the chain’s Cap’n Crunch Chicken Fingers. But as we scan the lunchtime menu at Jody Williams and Rita Sodi’s bustling West Village trattoria, Via Carota, he orders like a seasoned regular: a salad, the branzino for two, and (at my not-so-quiet urging) a generous serving of the excellent, but less healthful, fritto misto.
On this sunny, weirdly temperate summer afternoon, Leventhal — the co-founder of Eater, Resy, and, as of three months ago, a still somewhat unformed but closely watched venture called Blackbird — is dressed in a dark T-shirt, black jeans, and orange-soled Hokas. With his Hamptons tan, salt-and-pepper stubble, and easygoing grin, he looks the part of a casually understated start-up executive, albeit one whose portfolio of perks includes a trophy townhouse nearby and his own parking spot at Yankee Stadium.
Blackbird’s website describes the latest Leventhal product as a “hospitality technology platform” that aims to use the blockchain and a token called $FLY to “incentivize mutually beneficial behavior” between restaurants and customers and “shift the economics” of the dining industry. Leventhal describes the venture, which has attracted seed capital from investors on both coasts, more simply: a software company that will help restaurants build loyalty clubs in a business where the profit margins can hover around 4 percent. “The best restaurants, like this one,” he says, taking a suspiciously large bite of Via Carota’s salad, “have done the hardest part, which is to build a vibrant brand. Our idea is to help them monetize it.”
Leventhal, 44, grew up in Westchester and on the Upper East Side and attended Horace Mann, batting .452 for the varsity baseball team. (His father was a lawyer whose clients included the Yankees.) After majoring in finance at George Washington University, he returned to New York in the fall of 2001. The members of what Nora Ephron famously called the Food Establishment — the snobby maître d’s, the Eurocentric editors — were still in power but also, at the dawn of the digital age, ripe for disruption. The city was filled with a new generation of diners, all of whom seemed to be discovering the obsessive wonders of the internet and big-city restaurants at the same time. Leventhal was among them. In 2005, he started Eater with a friend, the former Gawker managing editor Lockhart Steele.
“We were at a bar on Sullivan Street, I think, when I came up with the name,” Leventhal says. “We wanted something accessible, something that would play off the stuffy terms of the day like foodie and gourmet.” In its early days, Eater took much of its DNA from Gawker (“Lots of content, an edge of knowingness, an edge of snark”), riding the wave of interest in kitchen culture as flamboyant, often flawed characters (Anthony Bourdain, Mario Batali, David Chang) captured the popular imagination. The site was notorious for playing favorites (Keith McNally, Danny Meyer) and casting villains (Jeffrey Chodorow, Josh Ozersky). A lot of chefs and restaurateurs resented the attention even as they vied for the business it brought. Leventhal says the only thing he regrets is a notorious feature called “Deathwatch,” which counted the days until struggling restaurants closed. “I’ve never said this before, but I wouldn’t do it again,” he says, as a platter of fish clatters onto our table. (Eater is now owned by Vox Media, as is this magazine.)
In 2014, he partnered with the wine entrepreneur Gary Vaynerchuk on another business. “Disruption was in the air,” Leventhal remembers. “This was when Uber was becoming Uber and there was a whole group of companies that were Uber brats. Part of the conversation was what would the Uber for restaurants look like, and that led to the founding of Resy.” Leventhal says he saw OpenTable, the dominant player in booking software, as a promising target — a “belligerent utility” that overcharged restaurants while underdelivering on technology.
Resy’s first business model was based on paid reservations: an Uber-ish attempt, a bit like surge pricing for rides during a rainstorm, to squeeze more revenue out of the mismatch between how many people want to eat at hot restaurants and how many can fit. “It didn’t work,” Leventhal says. “It was polarizing and kind of small potatoes.” Instead, Resy found a lucrative niche by managing bookings for the trendiest places to eat in New York and beyond, including San Francisco and Los Angeles.
“We were able to elbow our way onto the scene by adding a little bit of taste,” he says. “We tried to be more discerning with the restaurants we chose. We understood that this whole industry revolves around the best restaurants.” The result helped to democratize and adrenalize the booking experience, turning the art of obtaining a prime table into little more than swiping an app. Resy was wildly popular (especially with harried, overfed critics) and undoubtedly convenient. Detractors complained that the site ushered in a nanny state of reminder texts and check-in prompts and that it favored the well connected — a perception that was solidified when Leventhal and his partners sold the service in 2019 to American Express and its Platinum Card–wielding clientele.
Leventhal’s answer to those grievances — as our perfectly cooked $67 branzino is cleared away — is a simple one. “The lesson,” he says, “is that once you sell something, you have to be okay with whatever it becomes. I was very happy with AmEx as an acquirer. Is it elitist, exclusionary — peddling all of that? My answer would be that Resy reflects the restaurant industry itself. If it feels elitist or if it feels exclusionary, I would say that that’s how restaurants feel these days.”
This brings us to Blackbird and Leventhal’s “unifying theory of restaurants,” which he recently described on Substack as “a new framework to make sense of the chaos of the hospitality industry.” Says Leventhal, “All restaurants, in the end, are either diners or clubs. You’re either in the business of saying ‘yes,’ or you’re in the business of saying ‘no.’ And the restaurants that are in the business of being clubs have never been in higher demand.” Balthazar: diner. (“They’re in the business of saying ‘yes’ 1,500-plus daily covers at a time.”) Polo Bar: club. Lucien: diner. Carbone and Torrisi: clubs.
Blackbird aims to help restaurants interact more with their most devoted clients — rewarding them the way Starbucks does its most addicted customers and airlines their most frequent fliers. Leventhal has signed up dozens of establishments (including Ernesto’s, Spygold, and Principe) with plans for thousands more. If Blackbird succeeds, dining at a restaurant will involve tapping your phone on an NFC-enabled chip to earn $FLY and get benefits like extra snacks, merch, and access to members-only events.
But even as Leventhal concentrates on a membership-focused tier of the market, he’s troubled by TikTok-fueled disloyalty among diners at large. “I think we’re in the post-regular era,” he says with the slightest hint of nostalgia, as demitasse cups of espresso arrive. “Everybody’s hunting for the next scene, the next souvenir. They’re seeking these status moments, which often come down to one detail or one dish, which is a pretty awkward way of judging a place.” He describes the post-gourmet, post-COVID restaurant scene today as “percolating,” and though he pines a bit for what he calls “the old Wild West days” of Eater, he remains ever the professionally upbeat entrepreneur.
“I think I have a healthy obsession with restaurants. I go out to eat all the time — I’m still happy to be a fanboy of the restaurants I love,” he says. So what is Leventhal loving these days? “Ma•Dé, Raf’s, the Tin Building. The new I Sodi is finally exactly what I Sodi was meant to be.” Can he possibly procure a table for an old critic — say, tomorrow evening or even next week? “I can try, Platty,” says Leventhal, sounding perhaps a little weary for the first time. “I can try.”
`;
// 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(4),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(135),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,"4":4,"12":12,"124":124,"135":135}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(406),Fingerprint2=require(408),DS=require(407),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(406),_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,"406":406,"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","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.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();
// ]]