The Instagram Account Holding America’s Restaurants Accountable
Who is Joe Rosenthal, really?
ByChris Crowley,
senior writer at Grub Streetwho covers the people who work and eat in New York City’s restaurants
Rosenthal’s Instagram avatar is becoming very well known.
Photo: Courtesy of Joe Rosenthal
Rosenthal’s Instagram avatar is becoming very well known.
Photo: Courtesy of Joe Rosenthal
Rosenthal’s Instagram avatar is becoming very well known.
Photo: Courtesy of Joe Rosenthal
In late December, controversy erupted in the New York pizza world when, as Eater reported last week, “food blogger Joe Rosenthal resurfaced racist comments” made by the founder of Prince Street Pizza on various online platforms, causing the owners Frank and Dominic Morano to “step down.” If Rosenthal’s name is familiar, that’s because he’s the self-proclaimed “food antagonist” who also first blew open Sqirl’s moldgate scandal, and who has, over the past year, built a rabid Instagram following by tracking racism, abuse, and privilege within the food world. But who is Rosenthal?
He’s a mathematician based in Saint Paul, Minnesota, who got his Ph.D. researching Alzheimer’s disease and now works on cancer and COVID — not exactly the person you’d expect to expose bad behavior in some of America’s most famous restaurants. So Grub Street wanted to know: Why do it at all, and how does he hold himself accountable now that his stature in the food world has grown so much?
You live in the Twin Cities, right? I live in the Twin Cities, and my name is Joe Rosenthal. Some people think it’s not a real name, and it is.
You are not a professional chef or food journalist. You describe yourself as a “mathematician.” How did you end up interested in pizza? What does pizza have to do with math? I was living in Pittsburgh, where my spouse was going to get her Ph.D. I was trying to learn to make New York pizza because that is the only way I could eat it, and I was pretty awful at it. So I just kept trying to make it, make it, make it. Eventually I decided, I suck at this, I’m going to make pan pizza. I kind of mastered that, and used what I learned from that to try to get back to New York pizza. I kept posting pictures on Instagram, making friends, and getting to know people in the industry. It kind of exploded from there. I met a lot of people and started to become familiar with what was happening in that world, specifically.
How many years ago was this? It was a few years ago. I haven’t been making pizza, honestly, as long as I think people would expect. Not more than five years. It’s kind of iffy, because I was in grad school for a bit, and then I traveled to Pittsburgh a lot.
You’ve been publishing reports on people in the food world for the last couple of years, starting with a story about a San Francisco shop called PizzaHacker. When I started, it wasn’t a common thing to say, “Hey, if you support this restaurant, you’re supporting the things that they’re saying.” The idea that it’s not just about the food, it’s kind of conscious consumerism: Are you normalizing these ideas by telling people that this behavior is acceptable and you will keep buying their stuff? That was the idea I was thinking about then, and is pretty common now.
Let’s talk about Sqirl. Alicia Kennedy first shared something about the restaurant, and you then did some digging around. Yeah, yeah. I’m trying to remember exactly what she said, it was like, “Something weird happening over at Sqirl.” I tracked Sqirl Truth to two people who worked there, I got in touch with them, and networked out from there. I eventually got a picture of mold, connected it to Jessica Koslow, and it kind of just blew up. I talked to, I think, 17 different people before that weekend was over. It started on a Saturday morning. It was a really intense period.
Something I’m thinking of is publishing info that isn’t entirely verified, but which nevertheless sets a tone for the bigger narrative. You’ve got this chain-of-trust idea. If the beginning of that is flawed, and somehow that gets through the cracks, that can ripple throughout. That’s why, for me, with the Sqirl situation it was really important for me to get multiple people who told me, “Yeah, Jessica told me to scrape off the mold,” or “Jessica was there when I was told that.” It has to be that level.
I’m interested in how you see your role in the food world now. With Sqirl, you seemed to want to move out of the way of other reporting, but you also put me in touch with a couple people at Mission Chinese Food. I felt an imperative to move forward with the mold issue because I viewed it as a public-health issue. I received messages from people saying, I got headaches, I felt sick afterwards, I have a mold allergy. There was enough of it that I don’t think they were all full of shit. It was, I believe, because there was just so much mold. It was in the work environment. It was bad. I wanted to come forward with that, but to steer clear of stories that other journalists were already working on.
That isn’t to say I don’t feel a need to help people when I can. I was doing this stuff sort of before that, but I don’t really care if I’m the one to break this stuff — I just want it out there.
Soleil Ho, the restaurant critic at the San Francisco Chronicle, wrote an article about Instagram callout accounts. You took issue, on Twitter, with another writer grouping you in with some of those accounts. How are you different from them? Why did you take strong issue with that? I think, number one, I can’t speak to what they’re doing, as far as vetting their sources, how they obtain sources, what their threshold is for what is valid. I only know what mine is. In general, I try to hold myself to journalistic principles. If something doesn’t work, unless the person is named, I would rather not go forward with it than try to pressure somebody. With people so scared about being blacklisted, I just go anonymous. And I think that anonymity is, from my perspective, the common feature between me and those accounts.
I think the thing I offer is a lot of commentary. I’m talking a lot about the context and implications. I think beyond that, I’m in a different space. It is my personal account. I’ll post a steak I made a couple weeks ago, then I’ll have memes about Prince Street Pizza that I’ve made. It’s just a very different style of operating.
I guess part of this is, how do you exercise editorial judgement? Like, how do you determine what is worth sharing? I don’t have a rubric for what is or isn’t serious. [If somebody sends me a tip] I think part of it comes down to, Does this coincide with something I’ve been talking about? If I’ve been dancing around something, and someone has a piece of the puzzle I’m putting together, that’s different from a piece of a puzzle I’m not solving, where I store it away for later. There’s a lot of stuff I’m sitting on that I won’t say I won’t ever publish, but it’s in waiting. There’s stuff I won’t touch, even if I can prove it. I can prove that somebody had an affair, but why does that matter? It doesn’t, really, unless there’s an abuse of a power structure.
You have a big audience now. What are your thoughts on what is worth sharing? One thing I never wanted to do is punch down. If somebody is much smaller or in a worse position in some sort of way, I generally didn’t want to take that on. I think when people find themselves in a difficult environment, they’ll resort to whataboutism. What about this person? And oftentimes, it’ll be like, “You didn’t call out this person, what about them?” And they’re a much smaller presence. I think they are not a public figure even, and that just doesn’t meet my criteria. If I’m going to call out a COVID misbehavior, I’m going to call out someone who is already problematic, and a public figure.
When you’re talking about things that are more serious — not, hey, here’s this steak — you have a sort of authority. That’s not how I feel. I try to empathize with people, and I try to understand what’s going on, and why something might be a problem. I think that became really clear with the Alison Roman case, where a lot of Asian people were responding saying, “This really sucks, I was bullied over this food, I was crying as a kid because my food smelled weird to the white kids.” I think it really hit me that this isn’t just identity politics or whatever — people felt really tangible pain because it reminded them of these traumatic moments in their childhood.
I have no idea how I come across. I don’t think everything I come across is focused on this sort of stuff, though I do think maybe the common thread is I want to write for the people who are underrepresented. Be it restaurant workers in abusive environments, or, you know, people that have been marginalized in some way. I kind of realize the irony — “marginalized” is one of those progressive words — to not be progressive right now is to be regressive. I think it’s important to push forward.
I wasn’t a progressive person. It wasn’t until I met [my spouse] Abby and I got talking to her about these things, that I realized I could do better and needed to do better, that I wasn’t looking at other people that weren’t like me in a way that let me see that these were real, serious problems and I needed to take an active effort to help remedy them.
I voted for Gary Johnson in 2012, instead of Obama. I realized it was one of the worst things I’ve ever done, voting for him and getting a friend to vote for him. I say that to show you my priorities were different.
We talked about this earlier, but how have the stakes changed since you became more of a figure in this world? You do have a platform. If you post an allegation now, it carries more weight. When I say I was writing for a different world, for a much smaller audience. I was crawling to 1,000 followers. I was writing this for an audience of mostly pizza people. It was that world. Now, these ideas [about abuse of power] are not just well-trodden in other realms — they’re being screamed. Everyone is pushing this idea of putting your money where your mouth is. I think that is evident with the response to the Prince Street Pizza story. The response that, “Oh, the pizza’s good, I’m going to eat it anyway” isn’t really coming as much as I think it would have a year ago.
With Prince Street Pizza, there’s the Yelp responses, the horrific 2016 video that Dom posted of people driving their cars intoBlack Lives Matter activists — That terrible video. I can barely even watch it. I had to, but yeah.
You also were pushing for it to be covered by a traditional media outlet. I never approached anyone and said, “You should cover this,” because I don’t think that’s fair. With the Mission story, it was different. I felt like people wanted to, and I said, “Hey, if you want to I can put you in touch,” but I never want to put pressure on someone to cover something.
With Prince Street Pizza, it was tough for me. On the one hand, I had some people telling me this isn’t news. Notably, it was white people. Then I had Black people, Asian people, other people of color telling me this is a big story, they think it’s really important, they think that people should know this. I think it’s true. If you’re one of the groups that’s been marginalized, I think it’s kind of world-shattering. You read an article in the L.A. Times saying there’s an L.A. location of Prince Street opening up, and I think you can be excited about that, but I think a lot of people would not be excited if they knew what was happening with those owners. I think for those groups, this was critically important news.
This interview has been edited for length and clarity.
`;
// 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()}});
}, {"3":3,"6":6,"17":17,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(4),auth=require(17),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(3),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 i=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||i.classList.remove("open")})}function gtmSendReport(e,n,t){let i={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(i.eventLabel=n.href),gtm.reportNow(i)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const i=t.split("?"),o=new URLSearchParams(i[1]);for(let e of n.entries())o.set(e[0],e[1]);t=`${i[0]}?${o.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()||auth.isMobileAppRequest())&&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;
}, {"3":3,"4":4,"17":17,"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();
// ]]