The fight to build more public bathrooms in America

Today’s cities are almost completely devoid of public toilets. An unfolding movement is trying to change that.

One spring evening in 2005, Carol McCreary filed into a meeting of her neighborhood association in Portland, Oregon. The group was setting its agenda for the year, and the question of public toilets came up. 

Old Town, the neighborhood where McCreary lived, was a hot spot of bars and social services agencies — yet it had only two functioning public toilets.

The problem was intractable, someone in the room said. The association had been lobbying the city for public bathrooms for 20 years with no success. “That really stuck in my mind,” McCreary told The Hustle.

McCreary, who had moved to Portland a few years earlier after working in public health for two decades across Morocco, Yemen, and Iraq, decided to do something about it.

Six months later, in February 2006, she and five others released a report arguing that bathrooms were a human right.

McCreary’s group gave itself a logo — a sketch of two people with their legs crossed — and a pithy name: Public Hygiene Lets Us Stay Human, or PHLUSH for short. She printed out some T-shirts and made some signs.

Then, she took to the streets.

Carol McCreary (second from right in the background) took to the streets to lobby for more public bathrooms in Portland, Oregon (Carol McCreary)

PHLUSH built a toilet kiosk (literally, a giant replica of a toilet) that she towed across the city on a wooden cart, passing out flyers whenever anyone approached. She went to neighborhood events, block parties, anything she could think of. 

McCreary, it turned out, was on the vanguard of a movement.

Enjoying this article?

Get the Hustle’s 5-minute weekday roundup that keeps you hip to happenings in tech, business, and internet… things.

Portland is one of a growing number of other cities in the US where people are fed up with the lack of bathrooms — and they’re taking action. 

We’ve all been stuck in the middle of a city with nowhere to go. But why does the US have so few bathrooms to begin with? And why does it take such a monumental effort to fix such a seemingly small problem?

Where did all the bathrooms go? 

Exactly how the US got its public bathroom problem is difficult to untangle — but certainly, it wasn’t always like this.

In the early 1900s, American cities were flush with public toilets, thanks to a confluence of factors: 

  • The paucity of indoor plumbing meant few homes had private bathrooms. Many venues, like theaters, also didn’t have bathrooms. People from all class backgrounds had little choice but to seek out public toilets.
  • Because most people went to the bathrooms in saloons, well-organized temperance activists pushed for public restrooms as a way to keep people out of bars in the 1910s and 1920s.
  • Before the rise of the automobile, most people relied on trains and buses to get around. These stations almost always had bathrooms available.

An advertisement for a fancy “modern” home bathroom in 1911, when indoor plumbing was an extreme luxury (New York Public Library; Photo by Smith Collection/Gado/Getty Images)

It all came crashing down for two overarching reasons. First, the rise of the automobile convinced cities to shutter public bathrooms in transit hubs. 

“There was a slow, slow movement away from on-the-street public bathrooms to gas-station bathrooms,” Lezlie Lowe, the author of a book on public toilets called No Place To Go, told The Hustle. While some of those gas stations were located in downtown cores, many were not.

Second, a period of disinvestment following World War II meant cities lost the political will to pay for their upkeep.

According to Lowe, the number of public bathrooms plummeted especially quickly in the 1980s and 1990s, when many cities released budgets that slashed funding for public bathrooms.

Take a look at any city, and you’ll see the decline at play.

In 1940, the New York City subway system, for instance, had 1,676 public bathrooms. Today, it has 78. Only two public bathrooms in the entire city of 8.3m, meanwhile, are open 24 hours.

In cities across the country, the number of public bathrooms per capita has sunken to new lows:

Zachary Crockett / The Hustle

An ideological shift had taken place.

Whereas in the early 20th century, many politicians considered providing bathrooms a civic duty, Lowe said, that idea disappeared by the end of the century. Instead, politicians began to refer to public bathrooms as dirty, dangerous places.

“It feeds into this notion of, [public bathrooms] are never nice and we shouldn’t put money towards them,” she said. “There’s kind of a self-fulfilling prophecy there.”

The broken economics of public toilets

Today, there’s another reason for the dearth of public restrooms in cities: They’re expensive to build.

Most public bathrooms cost between around $80k and $500k, depending on the size and the sophistication of the model. But sometimes they can go way over that.

Last month, San Francisco unveiled plans to build a 150-square-foot public toilet for $1.7m. It is an eye-popping figure, and the steep cost comes from a few key line items: 

  • Base construction contract: $750k
  • Planning & Design: $450k
  • Architecture and engineering fees: $300k 
  • Rec and Park project management: $175k
  • Construction management: $150k

This can largely be attributed to arduous bureaucratic standards. San Francisco requires nearly all public projects to undergo a comprehensive Civic Design Review, a process that assigns a committee to study both the structure and aesthetics of new buildings. 

Some experts say it doesn’t have to be like this.

Chad Kaufman is the president of Public Restroom Company, which makes prefabricated park restrooms for nearly every major city in the US — Los Angeles, San Diego, Denver, Orlando, Dallas, Phoenix, Tucson, New York. 

In total, the Public Restroom Company is behind over 1.5k prefabricated restrooms across the US.

Because they are built off-site, Kaufman’s bathrooms can be produced cheaply and shipped across the country in large numbers. Exterior aesthetics isn’t a top concern — but maybe it doesn’t need to be. 

Chad Kaufman (center) with his team, standing in front of one of the company’s bathroom designs (Public Restroom Company)

According to Kaufman, cities often have specific requirements for their public bathrooms. They want steel toilet seats, stall doors that don’t touch the floor, a sink on the outside of the building to discourage lingering, toilets mounted on the wall instead on the floor, and so on. 

But the real cost of a public bathroom, Kaufman told The Hustle, is not building a bathroom — it’s the upkeep.

While cities “might have grant funds or public funds to build things,” he said, “they typically don’t have operational funds to maintain these things.” 

And maintenance isn’t cheap.

The city of Sacramento recently pegged annual maintenance fees for a planned public bathroom at $341.5k. In San Francisco, that number is closer to $600k.

Despite these fiscal concerns, Kaufman, who travels to trade shows for parks and rec associations to pitch cities on his prefabricated bathrooms, thinks he is starting to witness a sea change. 

In the two decades since Kaufman got into this business, he’s seen a gradual shift in cities’ willingness to pay for public sanitation. “It’s the one thing that the public complains about the most in a public park or in a municipality,” he said. 

That shift is thanks, in no small part, to the work of advocates like Carol McCreary.

Portland’s foray into the bathroom biz

In 2007, a year after Carol McCreary co-founded PHLUSH, she swayed the city of Portland to her side. The city decided to build — and sell — its own public bathroom prototype.

With its budget surplus, Portland bankrolled the design of a one-seat, steel bathroom complete with a maintenance closet, a cleaning hose, and motion sensors.

It could stay open 24 hours, was easy to maintain, and was cheap: $90k

It was called the Portland Loo.

A Portland Loo in the wild (City of Portland)                                                                             

The design followed the principles that PHLUSH had laid out, and it took a central piece of advice from PHLUSH — that the sink should be located outside the bathroom.

The first Portland Loo opened in 2008, in McCreary’s Old Town neighborhood. PHLUSH representatives stood by as the mayor-elect inaugurated the bathroom with a “first flush.”

Since then, the Loo has proven to be incredibly successful.

So far, nearly 160 of them have been sold across the US and Canada, including ~25 in Portland.

A private manufacturer, Madden Fabrication, now builds and sells them to cities across the world, and eight percent of the profits are put back into the operating budget of the Portland Parks & Recreation department.

The Loo has helped turn Portland into a leader in public bathroom access. Lowe, the author of No Place To Go, pointed to the fact that the Portland city council has become distinctly supportive of public bathrooms. 

“That notion that it can be considered an essential part of the infrastructure of the city,” she said, “that is the solution.”

McCreary won’t give up until America has access to public bathrooms (Carol McCreary)

McCreary doesn’t take credit for sparking this movement. She isn’t the first public bathroom activist, she said, and since she got into this work, “groups have lived and died out and lived and died out.” 

But PHLUSH seems to have reenergized the public bathroom movement in the US. 

Justin Jeffree, a former member of the boy band 98 Degrees, recently founded a PHLUSH chapter in Cincinnati. The group has also inspired other public bathroom activist groups. DC has one called DC Public Restrooms; New York has a group called NYC Restrooms for All. 

And they are pushing their cities to invest more in public sanitation. In New York City, for instance, a bill that would create one new public bathroom in every city ZIP code is up for a vote this year.

In other words, a movement has begun in the bowels of public bathroom infrastructure.

Get the 5-minute roundup you’ll actually read in your inbox​

Business and tech news in 5 minutes or less​

Psst

How'd Bezos build a billion dollar empire?

In 1994, Jeff Bezos discovered a shocking stat: Internet usage grew 2,300% per year.

Data shows where markets are headed.

And that’s why we built Trends — to show you up-and-coming market opportunities about to explode. Interested?

[email-submission-form button-text="Join Free" include-trends-opt-in="true" success-url="https://thehustle.co/new-thank-you-v2/" default-source="thehustleco" default-medium="home-exit-popup" default-campaign="home-page" form-id="exit-popup-general" optinmonster-conversion="true"]
<script type="text/javascript"> var onloadCallback = function() { grecaptcha.render('verify-your-humanity', { 'sitekey' : '6LdddrcZAAAAALyttpvOqiwQGwq5BNhgDz4tMQGE' }); }; function getCookieValue(a) { var b = document.cookie.match('(^|[^;]+)\\s*' + a + '\\s*=\\s*([^;]+)'); return b ? atob(decodeURIComponent(b.pop())) : ''; } function getCookie(name) { var cookieArr = document.cookie.split(";"); for(var i = 0; i < cookieArr.length; i++) { var cookiePair = cookieArr[i].split("="); if(name == cookiePair[0].trim()) { return decodeURIComponent(cookiePair[1]); } } return null; } function setHiddenFieldValue(wrappingDiv, searchParams, className, utmName, cookieName, defaultValue) { var el = wrappingDiv.getElementsByClassName(className)[0]; var existingVal = el.getAttribute('value'); if (utmName == 'ref') { var newVal = searchParams.get(utmName) || getCookie(cookieName); } else { var newVal = searchParams.get(utmName) || getCookieValue(cookieName); } if ((existingVal == null || existingVal == '' || existingVal == defaultValue) && (newVal != null && newVal != '')) { el.setAttribute('value', newVal); } } function setHiddenFieldValueFromUtm( wrappingDiv, searchParams, className, utmName, defaultValue ) { var el = wrappingDiv.getElementsByClassName(className)[0]; if (el != null) { var existingVal = el.getAttribute("value"); var newVal = searchParams.get(utmName); if (newVal != null && newVal != "") { el.setAttribute("value", newVal); } } } function initForm() { var wrappingDivs = document.getElementsByClassName('email-submission'); Array.prototype.forEach.call(wrappingDivs,wrappingDiv => { var sp = new URLSearchParams(window.location.search); setHiddenFieldValue(wrappingDiv, sp, 'funnel-source', 'utm_source', 'funnel_source', 'thehustleco'); setHiddenFieldValue(wrappingDiv, sp, 'funnel-campaign', 'utm_campaign', 'funnel_campaign', 'home-page'); setHiddenFieldValue(wrappingDiv, sp, 'funnel-medium', 'utm_medium', 'funnel_medium', 'home-exit-popup'); setHiddenFieldValue(wrappingDiv, sp, 'funnel-referral', 'ref', 'funnel_referral', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-a', 'a', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-c', 'c', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-o', 'o', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-oc', 'oc', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-e', 'e', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-f', 'f', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-r', 'r', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-t', 't', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s1', 's1', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s2', 's2', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s3', 's3', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s4', 's4', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s5', 's5', ''); var error_message = getCookieValue('validate-email-message'); if (error_message && error_message.trim() != '') { var error = wrappingDiv.getElementsByClassName('funnel-error')[0]; var prev_email = getCookieValue('funnel_email'); error_message = prev_email + " is not valid. Please try again"; error.innerHTML = error_message; error.style = ''; } }); if (false) { initCaptchaFormV2(); } } function initCaptchaFormV2() { var v3RecaptchaResponseEl = document.getElementById('recaptcha-response-v3'); v3RecaptchaResponseEl.parentNode.removeChild(v3RecaptchaResponseEl); var wrappingDiv = document.getElementById('email-submission'); var subForm = wrappingDiv.getElementsByClassName('email-submission')[0]; var captchaVersion = document.createElement('input'); captchaVersion.class = 'g-recaptcha hidden-input'; captchaVersion.type = 'hidden'; captchaVersion.name = 'g-recaptcha-response-v2'; captchaVersion.value = 'true'; subForm.appendChild(captchaVersion); var captchaEl = document.createElement('div'); captchaEl.id = 'verify-your-humanity'; subForm.prepend(captchaEl); var captchaApiScriptEl = document.createElement('script'); captchaApiScriptEl.src = 'https://www.recaptcha.net/recaptcha/api.js?onload=onloadCallback&render=explicit'; captchaApiScriptEl.async = true; captchaApiScriptEl.defer = true; document.head.appendChild(captchaApiScriptEl); } window.addEventListener('DOMContentLoaded', (event) => { initForm(); }); if(typeof hp_interval == 'undefined') { var hp_interval = 0; var hp_ts = 0; var hp_try = 0; jQuery(document).ready(function ($) { hp_interval = setInterval(function(){ $('input.hp_ts').val(hp_ts); hp_ts += 1; if(hp_ts >= 180) { clearInterval(hp_interval); } },1000); $('.email-submission:not(.prevent-default)').submit(function (e) { var form = $(this); if(hp_ts < 3 && hp_try < 1) { e.preventDefault(); if (form.find('.email-form-submit-message').length < 1) { form.find('.email-form-wrap').after('<p class="email-form-submit-message" style="padding: 0em 1.5em;">Too fast! Are you a human? Try again please.</p>'); } hp_try += 1; hp_ts = 0; $('input.hp_try').val(hp_try); } }); }); } </script> <div class="email-signup" id=email-submission> <div class="funnel-error" style="display:none;"></div> <form class="email-submission " id="exit-popup-general" action="https://cms.thehustle.co/api/v1/contacts/wordpress_create" method="post" autocomplete="email"> <div class="email-form-wrap"> <input class="funnel-source hidden-input" type="hidden" name="source" value="thehustleco"> <input class="funnel-campaign hidden-input" type="hidden" name="campaign" value="home-page"> <input class="funnel-medium hidden-input" type="hidden" name="medium" value="home-exit-popup"> <input class="funnel-form-id hidden-input" type="hidden" name="form-id" value="exit-popup-general"> <input class="funnel-referral hidden-input" type="hidden" name="referral_code"> <input class="funnel-fail-url hidden-input" type="hidden" name="fail_url" value=""> <input class="funnel-ip-country-wordpress hidden-input" type="hidden" name="ip_country_wordpress" value="US"> <input class="funnel-submission-url hidden-input" type="hidden" name="submission_url" value="https://thehustle.co/the-fight-to-build-more-public-bathrooms-in-america/"> <input class="funnel-a hidden-input" type="hidden" name="a" value=""> <input class="funnel-c hidden-input" type="hidden" name="c" value=""> <input class="funnel-o hidden-input" type="hidden" name="o" value=""> <input class="funnel-oc hidden-input" type="hidden" name="oc" value=""> <input class="funnel-e hidden-input" type="hidden" name="e" value=""> <input class="funnel-f hidden-input" type="hidden" name="f" value=""> <input class="funnel-r hidden-input" type="hidden" name="r" value=""> <input class="funnel-t hidden-input" type="hidden" name="t" value=""> <input class="funnel-s1 hidden-input" type="hidden" name="s1" value=""> <input class="funnel-s2 hidden-input" type="hidden" name="s2" value=""> <input class="funnel-s3 hidden-input" type="hidden" name="s3" value=""> <input class="funnel-s4 hidden-input" type="hidden" name="s4" value=""> <input class="funnel-s5 hidden-input" type="hidden" name="s5" value=""> <input class="funnel-success-url hidden-input" type="hidden" name="success_url" value="https://thehustle.co/new-thank-you-v2/"> <input id="recaptcha-response-v3" class="g-recaptcha hidden-input" type="hidden" name="g-recaptcha-response" value=""> <div class="signup-icon" style="display:none;"> <svg width="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6Zm-2 0-8 5-8-5h16Zm0 12H4V8l8 5 8-5v10Z" fill="#848B92"></path></svg> </div> <input type="hidden" name="hp_ts" class="hp_ts" value="0"> <input type="hidden" name="hp_try" class="hp_try" value="0"> <input type="text" name="first_name" placeholder="Enter your name" value=""> <input class="signup-email" type="email" name="email" placeholder="Your email address" required autocomplete="email"> <input class="email-submit om-trigger-conversion" type="submit" value="Join Free"> </div> <div class="validate-mistake-emails-message" style="display:none;"></div> <div class="form-options" style="display:none"> <div class="form-options-wrap"> <div class="trends-opt-in"> <input id="trends_opt_in_email_submission" class="trends-opt-in-checkbox" type="checkbox" name="trends_opt_in"> <label for="trends_opt_in_email_submission" id="trends_opt_in_label" class="trends-opt-in-text">Yes, I’d like to receive additional marketing emails on hot business opportunities from Trends, by the Hustle.</label> </div> <div class="privacy-text"> <p>We're committed to your privacy. The Hustle uses the information you provide to contact you about our relevant content and services. You may unsubscribe from these communications at any time. For more information, check out our <a href="https://thehustle.co/privacy">Privacy Policy</a>.</p> </div> </div> </div> <div submit-success> <template type="amp-mustache"> <p class="c-message c-message--success">Thank you for subscribing.</p> </template> </div> <div submit-error> <template type="amp-mustache"> <p class="c-message c-message--failed">Your submission failed. Please try again!</p> </template> </div> </form> </div>