Methods FAQ: Understanding Noise Pollution in Boulder
The Quiet Enjoyment Project · September 2026 · Companion to the report Understanding Noise Pollution in Boulder. Applies to the September 2026 report and to version 1.7 of the data package.
This page answers the questions we expect to get about how the report's numbers were made. Every figure on this page appears in the report or in the published data package, and every one of them can be re-run from that package on your own computer. If you think we got something wrong, the last question tells you how to reach us.
Where things are
- The report, as a web page: quietenjoymentproject.org/understanding-noise-pollution.html
- The report, as a PDF: Understanding-Noise-Pollution-in-Boulder-2026-09.pdf
- The data package (datasets, scripts, figures, checksums): understanding-noise-pollution.zip
- The package README, which maps every headline claim to the script that produces it: README.md
- To get the next report in the series as it publishes: sign up here
- Questions and corrections: yourneighbor@quietenjoymentproject.org
1. What is a "noise complaint" in this report, and what is it not?
It is a police calls-for-service record. When someone calls about noise, dispatch logs a call with a problem type. The report uses records typed NOISEB from the City of Boulder's open-data feed, covering January 1, 2023 through August 14, 2026: 9,961 records, of which 9,011 are analyzed (question 4 explains the difference). Each record carries a timestamp and a location at hundred-block precision, meaning a block such as "the 10XX block" of a street rather than a house number.
Here is what it is not. It is not a verified noise event: no one measured a sound level, and the record shows only that a call came in and roughly where. It is not a person: none of these records identifies who called or who made the noise. And it is not a clean count. Some records are duplicates, some were closed as unfounded, and some were canceled before an officer arrived (question 11). The report's own judgment is that, taken together, complaint records understate the noise rather than overstate it, for reasons set out in its section "These numbers undercount the problem."
2. What is the "CU walkshed," and how was the line drawn?
The CU walkshed is a 0.75-mile straight-line buffer around the boundary of the university district, drawn from the City's own official subcommunity polygon. The resulting shape ships in the package as cu_walkshed_15min.kmz, so you can open it in Google Earth or any GIS tool and see exactly where the line runs. A call counts as "inside" if its coordinates fall within that shape; the scripts do this with an ordinary point-in-polygon test, and the code is in the package.
3. Why 15 minutes? Why not some other distance?
Three-quarters of a mile is roughly a 15-minute walk at an ordinary pace, which is why the report calls the area a walkshed. We wanted a boundary that a reader can see on a map and that a critic can redraw. A straight-line buffer around a public polygon is easier to reproduce than a walking-time calculation over the street network, so that is what we used.
The headline does not hinge on this particular line, and the report checks it against two tighter boundaries. Inside the 15-minute walkshed, 70% of the city's complaints. Inside a half-mile ring around campus (also in the package, as cu_halfmile_buffer.kmz), 62%. Inside the City's own three campus-ring subcommunity polygons, a much tighter geometry, 47%. Draw the line tighter and the share falls, as it must, but it stays large.
4. You excluded one address. Which one, and what does that do to the numbers?
The 4500 block of 19th Street in north Boulder. Over the study period that one block generated 950 complaint calls, 9.5% of the citywide total, from a single ongoing two-party dispute unrelated to the report's subject. A dispute between two parties is not a pattern of neighborhood noise, so the block is removed from every figure in the report.
The effect is not small, and it cuts in the report's favor, which is why both numbers are on page one. The block lies outside the walkshed. With it included, the walkshed's share of the city's complaints is 63% (6,297 of 9,961). With it excluded, 70% (6,297 of 9,011). The same exclusion applies to the health-exposure calculations: the trailing-12-month party and noise file holds 3,043 records, 2,838 after the exclusion.
The raw data in the package still contains the block. Every script applies the exclusion in code, as a single line that skips addresses on that block, so anyone who disagrees with the choice can delete that line and re-run. The choice is visible and reversible.
5. What is a "permanent resident," and how did you get to 28,010?
No dataset labels who is a student, so the report uses the 2020 census at the block level (the PL 94-171 redistricting file and the Demographic and Housing Characteristics file) as a proxy.
The census counts 52,815 residents inside the walkshed. Set aside the 12,449 who live in group quarters, 11,763 of them in CU housing. Then set aside the 12,356 household residents aged 18 to 24, whom the proxy treats as students. What remains, household residents under 18 plus household residents 25 and over, is 28,010 people, including 3,957 children. That is 26% of Boulder's population and 36% of its permanent residents.
The proxy is deliberately simple, and it errs in two directions at once. Counting every household resident aged 18 to 24 as a student drops some people who are in fact permanent. Counting every household resident 25 and over as permanent keeps some who are not. Those errors run opposite ways. The census is also six years old at publication; it is the most recent block-level count that exists. The two census scripts in the package (permanent_pop2.py and age_split.py) reproduce these aggregates exactly from the public bulk files.
6. The report says permanent residents in the walkshed bear noise at 4.1 times the rate of permanent residents elsewhere. Why does that figure use the proxy on both sides?
Because a ratio is only fair if its two halves are measured the same way. The report's figure is 62 calls per 1,000 permanent residents per year inside the walkshed against 15 outside, a ratio of 4.1. Both numbers use the same census rule, under 18 plus 25 and over, applied block by block across the whole city and clipped to the city limits.
An earlier draft divided walkshed calls by walkshed permanent residents but divided outside calls by the total outside population, students and all. That mixed denominator produced 4.6x, which overstates the gap. It is superseded and does not appear in the report. If you instead use total population on both sides, the ratio is 2.4x. The script report_stats.py prints all three, each labeled, so that every ratio that has ever been shown is reproducible and named. The one the report uses is 4.1x.
7. Where does "154,000 resident-nights" come from?
It is a proximity estimate, built in three steps from the most recent 12 months of party- and noise-related calls, 2,838 of them after the standing exclusion.
First, keep only calls between 10 p.m. and 3 a.m.: 1,617 calls, 57% of the total. Second, for each of those calls, find every residential parcel within 600 feet, using the county assessor's parcel points. A parcel counts once per night no matter how many calls landed near it that night. Third, multiply by 2.2 residents per household. The result is 154,048, which the report rounds to an estimated 154,000 resident-nights a year within 600 feet of a documented nighttime noise call. The median nighttime call has 54 homes within 600 feet of it.
The figure moves with the radius, and the report says so: 43,000 at 300 feet, 306,000 at 900 feet. It is not a measurement of sound and not a measurement of sleep. It says how many people live close to where the calls happened, and nothing more.
It also changed during review, and the package records that. The assessor file repeats some parcels: 2,504 duplicate rows out of 23,133. Before those were removed, the estimate was 173,441. Version 1.4 of the package deduplicated the parcels by parcel number and the estimate fell to 154,048; the previously hard-coded median of 58 nearby homes became a computed 54. The README's version notes describe the change.
8. What counts as a "school night"?
The report gives two answers, and it labels which is which.
The simple version counts Sunday through Thursday nights: 46% of resident-nights, about 70,000 a year. The stricter version checks each night against the actual BVSD calendar and counts only nights before a day students are in school: roughly 54,000 a year, about 35%, or a third of the total. The stricter figure is lower because Sunday-through-Thursday nights include summers, breaks, and holidays when no one has school the next morning.
Thursday is why the distinction matters. In the trailing 12 months, 373 nighttime calls came in on Thursday nights, against 421 on Fridays and 413 on Saturdays. A school night runs close to weekend volume.
9. "A barking dog is three times as likely to draw a citation as a house party." How was that computed, and what does "charged" mean?
The citation figures come from Boulder Police records produced to us under the Colorado Criminal Justice Records Act, covering a three-year window that ends in October 2025. They are a separate source from the calls-for-service data and are published separately, in their original form, on our site's source-data page rather than in this package.
BPD's charge file has a field that marks whether a person was actually charged. We count only the rows where that field is filled in. Blank rows are reports taken with no citation issued; BPD confirmed that reading to us in writing on February 18, 2026. In the party-noise category, that leaves 67 charged citations. Another 47 rows in the file record a report taken with no one charged, and we do not count them.
Set those 67 charged citations against 8,192 noise complaints over the same window, and the citywide result is one charged citation per 122 complaints, or, as the report puts it, 121 times out of 122 a complaint ends with no charged citation. For barking dogs, the same file shows 312 charged citations against 13,065 animal calls. Divide one rate by the other and a dog complaint is 2.9 times as likely to end in a charge as a party complaint, citywide. The gap is not uniform across the city: 1 complaint in 46 ends in a charged citation in South Boulder, and 1 in 320 in the university district. Measured against the university district's rate, a dog complaint is more than seven times as likely to draw a charge.
Three cautions, all made in the report itself. Animal calls and noise calls are different categories of call, so this is a screening comparison rather than a like-for-like one. The party figure may be understated, because the nuisance-party ordinance code was missing from BPD's production; we have formally requested it. And the citation window (three years ending October 2025) is not date-matched to the complaint window (January 2023 through August 2026).
10. The report says complaints are up 29% in 2026. Over what window?
January 1 through August 15, 2026, compared with the same dates in 2025, counting only complaints inside the walkshed. (The feed was pulled the morning of August 15, 2026; its last record is 3:27 a.m. that day. On a strict cut at the end of August 14 the figure is 30%, so read it as 'about 29%'.) It has to be a same-period comparison, because noise in Boulder follows the academic calendar: a partial 2026 set against a full 2025 would tell you nothing.
The longer trend runs the same way. Walkshed complaints by school year: 1,408 in 2023–24, 1,515 in 2024–25 (up 8%), 1,777 in 2025–26 (up 17%). Spring 2026 on its own: 651, up 24%. These are recorded complaint calls, and the report says plainly that it cannot fully rule out a change in how often residents choose to report.
11. What are "dispositions," and why keep records you say are flawed?
A disposition is how a call was closed. Some are marked as duplicates, a second call about an incident already logged. Some were closed as unfounded or as a false alarm. Some were canceled before an officer arrived. Of the 9,011 analyzed records, 131 are duplicate-marked, 493 were closed unfounded or false alarm, and 192 were canceled.
We leave them in and disclose them rather than strip them out, for a reason. Those overcounts are visible in the published data, and anyone can remove them and re-run. The undercounts run the other way and cannot be seen in any file: the neighbor who loses sleep and never calls, the complaint routed to the university's warning line instead of to police, the caller told to phone back after 11 p.m., the caller who stops calling because nothing happens. The report's judgment is that the net bias runs toward undercounting. If you weigh it differently, the overcount entries are there to be excluded.
12. How are "term," "break," and "night" defined?
The academic windows were checked against the CU Registrar's published calendars. The exact window dates are defined in term_break_analysis.py in the package and were checked against the CU Registrar's published calendars; term-core excludes spring break, and where the move-in window overlaps the start of term, move-in takes classification priority. All rates are per night, so windows of different length compare fairly: roughly 140 term-core nights a year against 17 deep-winter nights.
A night runs past midnight. Calls logged before 6 a.m. are attributed to the evening before, so a 1 a.m. call on a Saturday belongs to Friday night.
On those definitions, the walkshed averages 6.0 complaints a night during term (73% of the citywide total) and 1.0 during deep winter break, when it is quieter than the rest of the city. Move-in averages 10.2 a night (78% of the citywide total). School-year Thursday through Saturday nights average 10.9, which over an eight-hour night is one call every 44 minutes; September Fridays and Saturdays run 19. The busiest single night in the data was Thursday, October 30, 2025, the eve of Halloween weekend, with 38 calls.
13. Six in ten complaints come from rentals. How is the rental comparison measured?
Two City datasets: the rental-license layer, with 10,830 active licenses, and the City's exact-address calls-for-service feed for licensed rental properties, trailing 12 months. Six in ten noise complaints citywide come from licensed rentals. Rentals hold roughly half of Boulder's dwelling units, so that is an overrepresentation, though a modest one. The sharper finding is concentration: the top tenth of rental addresses that drew any complaint accounts for 37% of all rental complaint calls.
Half of the 10,830 licenses sit inside the walkshed, and those rentals draw complaints at 3.5 times the rate of licensed rentals elsewhere when measured per license. Per unique parcel the ratio is 3.3; per dwelling unit, 2.8. The report gives all three because the choice of denominator matters and a reader should see how much.
Two limits. The license layer is a 2026 snapshot compared against calls from 2023 to 2026. And the report's statement that more than half of licensed rentals belong to business entities or owners who live outside Boulder is computed from the license-holder fields in the City's unabridged public layer. We removed those fields from the package to minimize personal data, so that one figure cannot be re-derived from the package alone; the unabridged layer remains available from the City.
14. What can this data not show?
Noise levels. No decibel record exists anywhere in the data, because Boulder operates no noise monitoring that we can find. No figure in the report can say that a legal limit was exceeded at any address, and the WHO and EPA thresholds the report cites are long-term averages, not single-event limits.
Who called, or who made the noise. None of the records identifies a caller or a noisemaker. The citywide file locates calls to the hundred-block. The rental-calls feed carries exact incident addresses, exactly as the City publishes them, and those identify properties rather than people.
Health outcomes in Boulder. The dose-response relationships the report cites come from the global literature. A city of 108,000 is too small for that epidemiology, and the report makes no claim about local outcomes.
Whether any given complaint was justified, and why enforcement differs from one part of town to another. The data shows the gap; the reasons are the subject of the next report.
15. What personal information is in the data package?
Nothing beyond what the government already publishes. The package holds City of Boulder open-data records (incident numbers, timestamps, coordinates, and, in the rental-calls feed, exact incident addresses as the City publishes them), Boulder County Assessor parcel points with no owner information, federal census aggregates, and OpenStreetMap street geometry. It contains no student records, no University production data, and no information about complainants, because none exists in these sources. Where a source carried named individuals that the analysis did not need, the rental layer's license-holder fields, we removed them. Joining these files adds nothing beyond what the City's own portal already permits.
16. How do I reproduce the numbers?
Download the package and unzip it. The file checksums.txt carries a SHA-256 hash of every other file, so you can confirm your copy matches the published original.
The scripts are the analysis code as run, with file paths rewritten to the package layout. Run any script from the package root; it reads from ./data and writes to ./data and ./figures. They are Python and import matplotlib, numpy, scipy, shapely, and pyproj. The README's table "Where each headline number comes from" tells you which script produces which claim: report_stats.py for the 70% share and the 4.1x ratio, night_stats.py for the per-night figures, term_break_analysis.py for term versus break, health_exposure.py for resident-nights, report_charts2.py and report_maps_v3.py for the trend, the rental rates, and the maps.
The two census scripts, permanent_pop2.py and age_split.py, need the public 2020 census bulk files for Colorado (about 220 MB, not duplicated in the package) unzipped into ./census/. The download addresses are in each script's header. Each script prints the county totals as it runs, 330,758 residents and 12,094 university group quarters, and those numbers confirm a correct download.
Two things cannot be re-derived from the package alone: the citation and disposition figures, which rest on the BPD records described in question 9, and the rental-ownership share described in question 13.
The package is at version 1.7. Its README lists what changed in each version, including corrections that came out of two adversarial reviews. The derived datasets, scripts, and figures are released under Creative Commons Attribution 4.0.
17. I think you got something wrong. How do I tell you?
Write to yourneighbor@quietenjoymentproject.org with the basis: which figure, what you believe the right one is, and how you got there. A re-run of the relevant script is ideal but not required. We re-run the analysis either way, and if we erred we publish the correction promptly and prominently, on the site and in the package.
We also want records. If you know of city or university records that bear on these questions, tell us. Several findings in this series began as a neighbor's suggestion.
Share this page: quietenjoymentproject.org/methods-faq.html. To get the next report as it publishes: sign up.
The Quiet Enjoyment Project · yourneighbor@quietenjoymentproject.org · 885 Arapahoe Avenue, Boulder, CO 80302 · quietenjoymentproject.org