Portland for All · Emergency-Response Data Brief
How emergency response times, call volumes, and staffing have changed for Portland Police Bureau and Portland Fire & Rescue.
Reading these charts: the bureaus measure response time on different clocks — fire's is turnout+travel; police's also includes time a call waits in the dispatch queue. Compare trends, and compare like-for-like (travel vs travel). Every chart has a copyable data table beneath it.
PPB is asking for a bigger budget. But the money already climbed ~30% while response got 182% worse — and the slowdown is almost entirely calls waiting for a free unit, not the drive to the scene. The problem isn’t dollars; it’s how the bureau deploys the officers it has.
Four things to understand to read these charts correctly — written plainly, so they can be paraphrased into a post or a web page.
Response time = the wait in the dispatch queue + the travel to the scene — the clock as the caller feels it, from the moment 911 has your emergency to the moment help is at the door. The queue (waiting for a free unit to be sent) is the part that explodes when staffing is short; travel is the drive. We add them together because that total is what people actually experience — a metric that counts travel only would hide the part of the wait that got worst.
For the public: “Response time is the whole wait — from when 911 has your emergency to when help arrives — not just the drive.”
p90 means 9 of 10 calls are answered faster than this number; 1 in 10 is slower. Two reasons it’s the right yardstick: (a) it’s the national public-safety standard — NFPA 1710, the fire benchmark this comparison is anchored to, is defined as a p90 target (on scene within 5:20 for 90% of high-priority calls), so matching it keeps police and fire like-for-like. (b) the average hides the crisis; p90 exposes it — response times are lopsided: most calls are normal, but a long tail drags out badly, and that tail is the harm we care about. When a system is overwhelmed the tail blows up first, so p90 moves sharply while the average barely twitches. PPB publishes averages, which makes the problem look smaller than it is.
For the public: “We report the 1-in-10 worst wait — that’s the emergency people actually fear, and it’s the national standard fire is graded on.”
If two response charts show different numbers, it’s almost always which calls are counted — not a contradiction. These charts use high-priority calls only (life-safety / urgent); Nick’s chart blends all calls (high + medium + low). We use high-priority because it’s a true emergency-response number — routine calls drag the figure down until it stops looking like emergency response — and because it matches fire, which is also high-priority. Blending in low-priority calls makes the change look less alarming, not because things improved but because routine calls dilute the signal. Our chart axes now say “high-priority” so the two can sit side by side without confusion.
The two bureaus start their stopwatches at different moments: police response includes the dispatch-queue wait; fire’s clock starts later, at unit notification, so it excludes that wait. That alone makes the police number structurally larger. So the honest comparison isn’t a single minutes gap — it’s direction: police response is degrading several times faster than fire’s, and where the same component exists on both sides (travel vs travel) we compare those.
For the public: “We’re not claiming police are exactly N minutes slower than fire — the bureaus time things differently. The story is the direction: police response is getting worse, fast, while fire’s has held.”
When a 911 call comes in, a BOEC dispatcher assigns it a priority number (1–9) by urgency and danger — not by the type of incident. PPB rolls those into three tiers. The same kind of call can fall in any tier depending on severity: a crash with injuries is High, a fender-bender is Low.
Tiers: PPB Dispatched Calls open data (Priority field, PriorityNumber 1–9). Examples are the most common call categories in each tier, 2024.
The like-for-like comparison, and the standard. Fire and police run on different clocks, so the honest read is the trend and the components that match (travel vs travel) — not a single minutes gap.
Turnout/travel for high-priority calls — % change vs FY2020 (=0)
What this shows. The like-for-like comparison: fire (turnout+travel) vs police travel-only — the components that measure each bureau actually getting to the scene. Because the bureaus run on different clocks, each line is shown as % change from FY2020 (=0%); a rate of change is comparable across bureaus even when absolute minutes aren't.
What to look for. Even on travel alone, police degrades faster than fire (+34% vs +11% by FY2025). Police full response — which adds the dispatch-queue wait — climbs to +182%; that staffing-driven blow-up is broken out in chart 2 and charts 5–8. Absolute minutes are in the table below.
What this shows. Each series is indexed to FY2020 (=0%) and plotted as percent change, because the bureaus measure on non-comparable clocks: PF&R reports NFPA-1710 turnout+travel; PPB's open data splits time-in-queue from travel, so police is shown travel-only to match fire's travel component. A rate of change is comparable across series even where absolute minutes are not — the chart asserts trajectory, not a minutes gap.
What to look for. Police travel +34% vs fire turnout+travel +11% by FY2025; police full response (queue + travel) +182%. Caveats: FY2019 is half-covered in the police feed and flagged PARTIAL; the Aug-2020 BOEC queue-cap change (4h→14h) inflates later full-response figures, which is why the like-for-like read is travel-only. All values p90, high-priority. Absolute minutes: table below.
What this shows. On the most charitable comparison we can build — police travel time alone, the metric that flatters them most — Portland police response is still degrading three times faster than fire. This isn't a measurement artifact; it's the honest floor of the gap.
What to look for. Add back the dispatch-queue wait people actually experience and police response has nearly tripled (+182%) since 2020. Fire faces the same city, the same traffic, the same budget pressure — and held. The difference is how the bureau is staffed and deployed, not the streets.
| FY | Fire (turnout+travel) | Police (travel only) | Police (full, incl. queue) |
|---|---|---|---|
| 2019 | 7:24 | — | — |
| 2020 | 7:38 | 11:45 | 14:32 |
| 2021 | 7:57 | 13:24 | 19:46 |
| 2022 | 7:55 | 13:55 | 24:39 |
| 2023 | 8:19 | 14:34 | 36:17 |
| 2024 | 8:27 | 15:09 | 38:01 |
| 2025 | 8:27 | 15:42 | 40:59 |
| FY2020→FY2025 change: fire +11%, police travel +34%, police full response +182%. | |||
Share of high-priority fire responses meeting the 5:20 turnout+travel target
What this shows. The share of high-priority fire responses that arrive within the 5:20 benchmark. The dotted line is the NFPA 1710 national target of meeting that standard 90% of the time.
What to look for. Even fire — the better-performing bureau — is drifting below its own target and trending down. It's still far ahead of police, but the direction is the wrong way for everyone.
What this shows. Share of high-priority fire responses meeting the 5:20 total-response benchmark, year by year, with the dotted line marking the NFPA-1710 target of clearing that standard 90% of the time. This is a compliance rate against a fixed national clock, not an indexed change.
What to look for. The compliance share sits below the 90% line and trends downward, even though fire remains well ahead of police on the same chart. Caveat: NFPA-1710 is a turnout+travel standard not directly comparable to PPB's queue+travel full-response clock — the two bureaus are never summed; this card scores fire against fire's own target.
What this shows. Even the bureau that's working is slipping. Fire — by far the stronger performer — is drifting below its own national target and heading the wrong way.
What to look for. If the well-run bureau is already missing the standard 10% of the time and falling, the city has no margin to spare. Fire is still far ahead of police, but everyone is trending down — the question is whether Portland reverses it or watches the better half erode too.
| FY | % within 5:20 |
|---|---|
| 2019 | 58% |
| 2020 | 55% |
| 2021 | 49% |
| 2022 | 48% |
| 2023 | 44% |
| 2024 | 43% |
| 2025 | 42% |
| NFPA 1710 target: 90%. Police publishes no equivalent standard. | |
If response is slowing, is it because demand is rising — or because there's no free unit to send? Total dispatched volume is flat-to-down, and the growth is the dispatch-queue wait, not the drive: the signature of a capacity problem, not a surge.
Police high-priority response, split into its two components (minutes)
What this shows. The police high-priority response time, split into its two parts: the blue bar is actual travel time; the orange bar stacked on top is time waiting in the dispatch queue. The dashed line is fire, for scale.
What to look for. The orange (queue) segment grows from a sliver into the majority of the bar. The slowdown isn't cars driving slower — it's calls waiting longer for any car to be free, which points at officer availability, not traffic.
What this shows. PPB's open data splits a high-priority response into two clocks — time-in-queue (call accepted, waiting for an available unit) and travel (unit assigned to on-scene) — stacked here to total p90 response; the fire dashed line is NFPA-1710 turnout+travel, plotted for scale only and not a like-for-like sum. Both segments are p90, high-priority.
What to look for. The orange queue segment, near-zero early, comes to dominate the bar while the blue travel segment stays comparatively flat — isolating the slowdown to dispatch wait, not drive time. Caveat: the Aug-2020 BOEC queue-cap change (4h→14h) widens the measurable tail, so later queue segments are partly a recording-window effect; the directional growth survives it.
What this shows. Break the wait apart and the story is plain: cars aren't driving slower — calls are sitting in the queue with no car free to send. The travel time barely moves; the wait for any unit is what explodes.
What to look for. Queue time grows from a sliver into the majority of the response. You can't pave your way out of that, and you can't blame traffic — it's an availability problem, which is to say a staffing-and-deployment problem the city can actually fix.
| FY | Travel | Dispatch-queue wait | Total response | Fire (ref) |
|---|---|---|---|---|
| 2020 | 11:45 | 2:47 | 14:32 | 7:38 |
| 2021 | 13:24 | 6:22 | 19:46 | 7:57 |
| 2022 | 13:55 | 10:44 | 24:39 | 7:55 |
| 2023 | 14:34 | 21:43 | 36:17 | 8:19 |
| 2024 | 15:09 | 22:52 | 38:01 | 8:27 |
| 2025 | 15:42 | 25:17 | 40:59 | 8:27 |
Police high-priority demand vs speed, by fiscal year
What this shows. Two things on one chart for police: green bars are the number of high-priority calls; the purple line is how slow p90 response got. If rising demand were the cause, bars and line would climb together.
What to look for. They move in opposite directions — calls fall while response times rise. Fewer calls but slower service is the signature of a capacity / deployment problem, not a demand surge.
What this shows. Two PPB series on a shared timeline: green bars are the annual count of high-priority calls (workload), the purple line is p90 high-priority response (speed). A genuine demand-driven slowdown would show both rising together; decoupling points elsewhere.
What to look for. Calls fall while p90 response climbs — the two series diverge rather than track. Caveat: call counts are sensitive to classification and the same Aug-2020 BOEC queue-cap window that inflates response tails, so read the opposing direction, not the precise gap. All p90, high-priority.
What this shows. The "we're just overwhelmed by calls" defense fails its own chart. Demand is falling. Response is getting slower. Fewer calls, worse service — that is not what being overwhelmed looks like.
What to look for. When workload drops and speed still craters, the bottleneck is on the supply side — how the bureau is staffed and deployed, not how much the public asks of it. More 911 volume isn't the problem, so more money for volume isn't the fix.
| FY | High-priority calls | p90 response (mm:ss) |
|---|---|---|
| 2020 | 70,770 | 14:32 |
| 2021 | 70,909 | 19:46 |
| 2022 | 68,417 | 24:39 |
| 2023 | 61,979 | 36:17 |
| 2024 | 53,295 | 38:01 |
| 2025 | 52,212 | 40:59 |
All dispatched police calls per year, with the high-priority subset, 2020–2025
What this shows. Total dispatched police demand per calendar year, 2020–2025 — every 911/non-emergency call PPB was sent to (green bars), with the high-priority subset broken out (purple line). This is the reactive universe — what the community calls police about — counted, not weighted by time on scene.
What to look for. Demand is flat-to-down: total calls slip from ~224k to ~209k (−7%), and the high-priority subset falls harder, ~70k→51k (−27%). So the rising response times elsewhere in this report are not a story of surging demand — calls went down while waits went up, which points back at staffing, not call volume.
What this shows. Annual count of dispatched 911/non-emergency calls PPB was sent to, 2020–2025, with the high-priority subset broken out — counts of calls, not workload weighted by time on scene.
What to look for. Totals fall ~224k to ~209k (−7%) and the high-priority subset ~70k to 51k (−27%). As raw counts with no time-on-scene weighting this bounds demand, not effort — but it does rule out rising volume as the cause of the longer waits elsewhere in this report.
What this shows. Police demand isn't surging — it's falling. Total calls are down −7%, and the urgent ones down −27%.
What to look for. Calls went down while waits went up. The response-time crisis is a story about staffing and deployment, not a city overwhelming its police.
| CY | All calls | High-priority | Δ vs 2020 |
|---|---|---|---|
| 2020 | 224,484 | 70,389 | +0.0% |
| 2021 | 225,740 | 71,611 | +0.6% |
| 2022 | 213,128 | 64,211 | -5.1% |
| 2023 | 204,402 | 58,150 | -8.9% |
| 2024 | 198,672 | 52,137 | -11.5% |
| 2025 | 208,742 | 51,207 | -7.0% |
| 2020→2025. PPB Dispatched Calls open data (RegJIN). Call COUNTS — community-initiated demand, not officer-hours or time on task. | |||
High-priority dispatched calls per year, 2015–2025 (two definitions, shown separately)
What this shows. High-priority police calls per year across the full decade. Diane asked for ten years; the City's open data only starts in 2019, so the earlier years (2015–2020, the dashed grey line) come from a different City report that counts “high priority” more broadly — it runs about 1.7× larger, which is why the two lines are kept separate, never joined. The solid blue line is the like-for-like Priority 1/2/3 count we use everywhere else.
What to look for. Whichever definition you use, high-priority demand is not rising — it is flat then falling. Our Priority-1/2/3 count drops ~70k→51k (−27%) since 2019; the broader tier was already flat-to-down before that. So the longer waits elsewhere in this report are not a story of more urgent calls flooding in.
What this shows. Two non-comparable high-priority series shown side by side: City open-data Priority 1/2/3 (2019–2025) and the PPB/TAC report's broader High/Medium/Low “High” grouping (2015–2020). They differ ~1.67× in the 2019–2020 overlap, so they are plotted as distinct lines and never stitched into one trend; pre-2019 Priority-1/2/3 is simply not published.
What to look for. Both definitions show flat-to-falling high-priority volume — the open-data line is down ~27% (2019→2025). The seam is a definitional artifact, not a real jump; the overlap years make the ~1.7× gap explicit. Demand is ruled out as the driver of the rising response times.
What this shows. Ten years of data, one conclusion: the urgent calls are not overwhelming the city. Even on the broadest definition, high-priority demand is flat-to-falling.
What to look for. The number of serious calls is down ~27% since 2019 — yet waits keep climbing. This is a staffing and deployment story, not a city drowning in 911 calls.
| CY | Priority 1/2/3 (open data) | “High” tier (PPB/TAC report) |
|---|---|---|
| 2015 | — | 125,900 |
| 2016 | — | 125,100 |
| 2017 | — | 129,100 |
| 2018 | — | 124,700 |
| 2019 | 69,922 | 117,000 |
| 2020 | 70,389 | 116,300 |
| 2021 | 71,611 | — |
| 2022 | 64,211 | — |
| 2023 | 58,150 | — |
| 2024 | 52,137 | — |
| 2025 | 51,207 | — |
| Two DIFFERENT definitions, shown side by side — never summed or joined. Priority 1/2/3 is the City open data (2019–2025); the broader “High” tier is the PPB/TAC report (2015–2020), which runs ~1.67× larger in the overlap years. Pre-2019 Priority-1/2/3 isn't published. See docs/BACKFILL.md. | ||
PPB is asking for a bigger budget. But the money climbed ~30% while response got worse — and even after officers rebounded from the FY2022 trough, response kept slowing. The shortfall isn't dollars, and it isn't simply headcount: it's how the force is deployed.
PPB total budget (all funds) vs filled sworn officers, by fiscal year
What this shows. PPB's total budget, all funds (blue bars) against the number of filled sworn officers (purple line). “Sworn” = badge-carrying police, as opposed to civilian staff.
What to look for. The money line climbs from ~$237M to ~$308M while officers fell from a 2020 peak of 934 into the high-700s — more dollars are buying fewer cops on the street. That undercuts the claim that a bigger budget is what produces more policing capacity.
What this shows. Bars are PPB's adopted budget, all funds, by fiscal year (City Budget Office), in nominal dollars — not inflation-adjusted, so real growth is smaller than the line implies. The series is filled sworn officers (badge-carrying, excludes civilian staff); authorized strength is confirmed but some filled-counts are reported/estimated where the city hasn't published a clean year-end figure.
What to look for. ~$237M→~$308M nominal (+~30%) against filled sworn ~934 (2020) → high-700s. The estimate caveat is why this card's staffing source carries a hollow confidence dot. Read the divergence, not the absolute dollar level: more budget, fewer officers, regardless of the inflation adjustment.
What this shows. Portland is spending more on policing than ever — roughly 30% more — and getting fewer officers for it. The budget line and the staffing line cross. "Fund the bureau and response will follow" is not what the city's own numbers show.
What to look for. If a third more money bought a smaller force, the next dollar won't buy speed either. The bottleneck isn't the size of the appropriation — it's hiring, retention, and how thinly the existing force is spread. That's where the response crisis actually lives.
○ = partly reported/estimated; see the staffing note under “How to read this report.”
All sources & how to verify ↓| FY | Budget (all funds) | Filled sworn |
|---|---|---|
| 2019 | — | 881 |
| 2020 | $236.8M | 934 |
| 2021 | $223.3M | 824 |
| 2022 | $230.9M | 773 |
| 2023 | $249.0M | 809 |
| 2024 | $261.7M | 804 |
| 2025 | $282.4M | 822 |
| 2026 | $308.5M | 798 |
Authorized vs filled sworn officers — the gap is unfilled funded positions
What this shows. Two officer counts: authorized (positions the budget already funds) and filled (officers actually on staff). The shaded band between them is unfilled funded positions — jobs the city is paying for but can't fill.
What to look for. The shaded gap persists and widens. PPB isn't blocked by a lack of funding — it can't hire and retain up to the headcount it's already funded for. More budget can't fix a hiring problem.
What this shows. Authorized (funded) sworn positions against filled sworn officers, with the shaded band between them measuring unfilled funded positions — headcount the budget pays for but no body occupies. Authorized strength is confirmed; some filled-counts are reported/estimated where the city hasn't published a clean year-end figure.
What to look for. The shaded gap persists and widens rather than closing — funded seats the bureau cannot fill, distinct from a funding shortfall. Caveat: the estimate on filled counts is why staffing here carries lower confidence; the existence and direction of the gap is robust to it.
What this shows. The money is already appropriated. The jobs are already funded. They sit empty. Portland's problem isn't a budget the council won't pass — it's positions the bureau can't fill.
What to look for. The gap between funded and filled doesn't shrink with more dollars because dollars were never the constraint — hiring and retention are. Authorizing more positions on top of the ones already going unfilled funds vacancies, not officers.
○ = partly reported/estimated; see the staffing note under “How to read this report.”
All sources & how to verify ↓| FY | Authorized (funded) | Filled | Unfilled gap |
|---|---|---|---|
| 2019 | 1,001 | 881 | 120 |
| 2020 | 916 | 934 | -18 |
| 2021 | 882 | 824 | 58 |
| 2022 | 882 | 773 | 109 |
| 2023 | 881 | 809 | 72 |
| 2024 | 839 | 804 | 35 |
| 2025 | 877 | 822 | 55 |
PPB cost per dispatched call and high-priority response time, by fiscal year
What this shows. An efficiency ratio: total PPB budget divided by the number of dispatched calls (blue bars = dollars per call), against p90 response time (purple line). What is the public getting per dollar?
What to look for. Cost per call climbs and response gets slower at the same time — Portland is paying more than ever for worse service. (A budget÷volume ratio, not a true unit cost, but the direction is unambiguous.)
What this shows. An efficiency ratio: total PPB budget divided by dispatched-call volume (blue bars = dollars per call), plotted against p90 response (purple line). It is a budget÷volume quotient, not a true unit cost — it attributes the whole bureau budget to dispatched calls and ignores proactive and non-dispatch work.
What to look for. Dollars-per-call rises while p90 response gets slower — more spent per call and worse service in the same years. Caveat: because the denominator is call volume, part of the per-call climb reflects falling call counts, not just rising spend; the joint direction (cost up, speed down) is unambiguous regardless.
What this shows. Per call answered, Portland is paying more than ever — and getting it slower than ever. The price went up and the product got worse at the same time.
What to look for. When cost-per-call and response time climb together, you are not underfunding a service — you are overpaying for a failing one. The next dollar buys the same broken ratio. Spending isn't the lever; how the bureau is staffed and deployed is.
| FY | Cost per call | p90 response (mm:ss) |
|---|---|---|
| 2020 | $969 | 14:32 |
| 2021 | $1,025 | 19:46 |
| 2022 | $1,039 | 24:39 |
| 2023 | $1,170 | 36:17 |
| 2024 | $1,348 | 38:01 |
| 2025 | $1,387 | 40:59 |
| Budget ÷ all dispatched calls (an efficiency ratio, not marginal cost). | ||
Filled sworn officers (police) vs total personnel (fire, FTE) — y-axis starts at 650
What this shows. Both bureaus' staffing in absolute headcount — police filled sworn officers and total fire personnel (FTE). The y-axis starts at 650 (not zero) so the year-to-year movement is legible; the values are real counts, not an index.
What to look for. Police peaked at 934 sworn in FY2020, shed ~160 officers by FY2022, then partly recovered (toward ~820) — all while its budget kept climbing and its response kept getting worse. Fire, by contrast, held its ranks and its response. The lesson isn't to hire more — it's that more dollars bought neither the headcount nor the service.
What this shows. Absolute headcount for both bureaus — PPB filled sworn officers and total PF&R personnel (FTE) — as real counts, not an index. The y-axis is truncated at 650 (not zero) to make year-to-year movement legible, which visually exaggerates the proportional size of the swings.
What to look for. Police peak at 934 sworn (FY2020), shed ~160 to FY2022, then partly recover toward ~820; fire holds roughly flat. Caveat: the truncated axis amplifies these moves, and sworn excludes civilian staff, so this is officer/firefighter headcount only — read it alongside the budget line, not on its own.
What this shows. Police staffing cratered and clawed part of the way back — 934, down ~160, then toward ~820 — while the budget climbed the whole time and response kept getting worse. Fire just held, and held its service with it.
What to look for. More dollars bought police neither the headcount nor the speed. Fire is the control group: same city, same pressure, stable ranks, stable response. The takeaway isn't "hire more at any cost" — it's that money alone clearly didn't buy either one.
○ = partly reported/estimated; see the staffing note under “How to read this report.”
All sources & how to verify ↓| FY | Fire FTE | Police sworn | Fire index | Police index |
|---|---|---|---|---|
| 2019 | 729 | 881 | 100 | 100 |
| 2020 | 725 | 934 | 99 | 106 |
| 2021 | 735 | 824 | 101 | 94 |
| 2022 | 752 | 773 | 103 | 88 |
| 2023 | 800 | 809 | 110 | 92 |
| 2024 | 800 | 804 | 110 | 91 |
| 2025 | 774 | 822 | 106 | 93 |
| 2026 | — | 798 | — | 91 |
Filled sworn officers vs full high-priority response (incl. dispatch-queue wait), FY2020–2025
What this shows. Police filled sworn officers (blue, left axis) against p90 full response time including the dispatch-queue wait (purple, right axis), FY2020–2025. The response axis is zero-based; each line is read by its direction.
What to look for. Through FY2022 the lines open like scissors — officers fall, response climbs. But after FY2022 officers recover while response keeps right on climbing to +182%. So this isn't a simple headcount story: what grew is the wait for a free unit to dispatch, not the number of badges.
What this shows. Filled sworn count (left axis) and p90 high-priority full response — dispatch-queue wait plus travel (right axis) — on a shared FY2020–2025 timeline; the response axis is zero-based, so the climb is read by slope, not against a floating baseline. Two series on independent axes show co-movement, not a fitted causal coefficient.
What to look for. Officers fall through FY2022 then recover while response climbs monotonically to +182%, so the headcount correlation breaks after FY2022. The component that grew is the wait for a free unit, not travel — this chart asserts the divergence, it does not itself decompose the wait.
What this shows. Portland got its officers back after FY2022 — and full response time kept climbing anyway. More badges did not buy speed.
What to look for. If the force recovered while the wait still grew to +182%, the problem was never just headcount — it is the wait for a free unit to dispatch. You cannot hire your way out of a deployment problem.
○ = partly reported/estimated; see the staffing note under “How to read this report.”
All sources & how to verify ↓| FY | Filled sworn | p90 response, full (mm:ss) |
|---|---|---|
| 2020 | 934 | 14:32 |
| 2021 | 824 | 19:46 |
| 2022 | 773 | 24:39 |
| 2023 | 809 | 36:17 |
| 2024 | 804 | 38:01 |
| 2025 | 822 | 40:59 |
Total fire personnel (FTE) vs high-priority response (turnout+travel), FY2019–2025
What this shows. The same pairing for fire: total personnel in FTE (vermillion, left axis) against p90 response — turnout+travel (purple, right axis). The response axis is zero-based, so the line's near-flatness is honest, not a scaling trick.
What to look for. Fire held its staffing and its response — up just +14% over six years, a fraction of police's blow-up. The contrast is the whole argument: police outcomes collapsed despite rising dollars, while fire's held.
What this shows. Fire's total personnel in FTE (left axis) against p90 high-priority response measured as NFPA-1710 turnout+travel (right axis), zero-based so the line's near-flatness reflects the data, not axis compression. This is a different clock from police — turnout+travel, not queue+travel — so the figures are not summable across bureaus.
What to look for. Response rises only +14% across the six-year window, a fraction of police's trajectory and within plausible year-to-year drift. Because turnout+travel carries no dispatch-queue component, this is the comparable lower bound for fire, not a full door-to-door time.
What this shows. Fire faced the same city — same traffic, same budget pressure — and held its response to +14% over six years. The collapse was never inevitable; one bureau simply avoided it.
What to look for. Fire kept its staffing and kept its response flat while police outcomes collapsed despite rising dollars. The contrast is the whole argument: this is about how a bureau is staffed and deployed, not streets no bureau can control.
| FY | Fire FTE | p90 response (mm:ss) |
|---|---|---|
| 2019 | 729 | 7:24 |
| 2020 | 725 | 7:38 |
| 2021 | 735 | 7:57 |
| 2022 | 752 | 7:55 |
| 2023 | 800 | 8:19 |
| 2024 | 800 | 8:27 |
| 2025 | 774 | 8:27 |
The citywide averages hide who got left behind. Police calls carry a location and a priority, so they break out by precinct and by call tier (fire data is citywide only). East Portland — the lower-income, most diverse precinct — is slowest in every year, and every priority of call got slower (High = priority 1–3, Medium = 4, Low = 5–9 — what falls in each tier?).
FY2025 p90 high-priority police response (incl. dispatch-queue wait), by PPB precinct
What this shows. The latest (FY2025) p90 high-priority response — the full wait including the dispatch queue — drawn on the city map. Each of PPB's three precincts is shaded by how long a high-priority call waits there now (darker = slower), labeled with that wait and its change since FY2020. Same numbers as the line chart below, placed in space.
What to look for. The map removes any doubt about where the slowdown lands. The deepest shade sits over East Portland — the lower-income, most diverse part of the city. The worst response isn't scattered citywide; it is concentrated in the precinct that was already the slowest to begin with.
What this shows. FY2025 p90 high-priority full response (dispatch-queue wait plus travel) aggregated to PPB's three precinct polygons and shaded by magnitude, each labeled with its current wait and change since FY2020. A three-bin choropleth conveys rank and rough magnitude, not a continuous surface — within-precinct variation is averaged away.
What to look for. East Portland holds the deepest shade: slowest now and already slowest at baseline. With only three areal units this is a coarse spatial summary, not a per-capita or call-density rate — darker means a longer p90 wait, not more calls.
What this shows. The slowdown has an address. The worst police response in the city sits over East Portland — the lower-income, most diverse part of town.
What to look for. The worst response isn't scattered citywide — it is concentrated in the precinct that was already slowest. The part of Portland with the least is waiting the longest, and the map leaves no doubt where.
| Precinct | FY2025 response | Change since FY2020 |
|---|---|---|
| Central | 40:11 | +214% |
| East | 46:33 | +216% |
| North | 36:20 | +131% |
| The value shading each precinct on the map. Full response incl. dispatch-queue wait; PPB only, boundaries verified stable 2019–25. | ||
p90 high-priority police response by precinct (incl. dispatch-queue wait), FY2020–2025
What this shows. Police high-priority response — the full wait including the dispatch queue — drawn separately for each of PPB's three precincts. Each call is placed in a precinct by its own latitude/longitude (a spatial join to the current PPB district boundaries); fire stays citywide and is not shown here.
What to look for. The collapse is not evenly spread. East Portland — the lower-income, most diverse precinct — is the slowest in every single year and rose the most in absolute terms. The citywide average hides that the worst-served part of the city got left furthest behind.
What this shows. Police p90 high-priority full response (queue+travel) plotted as a separate series per precinct, each call assigned by a spatial join of its latitude/longitude to the current PPB district boundaries; fire is citywide and not shown. Boundaries are held at their present definition across all years, so any historical redistricting is not reflected.
What to look for. East Portland is the slowest series in every year and rose the most in absolute terms, a divergence the citywide average masks. These per-precinct lines are not exposure-normalized — they show where the wait lands, not calls per capita.
What this shows. The collapse is not evenly shared. East Portland — the lower-income, most diverse precinct — is the slowest in every single year.
What to look for. The citywide average is a comforting fiction: it hides that the worst-served part of the city got left furthest behind. East didn't just stay slowest — it rose the most. An average is not neutral when the gap is the story.
| FY | Central | East | North |
|---|---|---|---|
| 2020 | 12:47 | 14:45 | 15:45 |
| 2021 | 15:20 | 20:59 | 22:34 |
| 2022 | 20:33 | 26:33 | 27:09 |
| 2023 | 28:13 | 49:44 | 32:17 |
| 2024 | 33:34 | 46:56 | 34:30 |
| 2025 | 40:11 | 46:33 | 36:20 |
| FY2020→FY2025 change: Central +214%, East +216%, North +131%. Full response incl. dispatch-queue wait. PPB only; boundaries verified stable 2019–25. | |||
p90 high-priority police response split into travel + queue, by precinct and fiscal year
What this shows. Each precinct's p90 response split into travel (blue, the drive) and dispatch-queue wait (orange, time before any unit is sent). Queue here is the derived penalty (full response minus travel), so each stacked bar sums to that precinct's p90 response.
What to look for. Travel barely moves anywhere — the growth is the orange queue segment in all three precincts, and it is deepest in East. The mechanism is the same citywide (no free car to send), but its weight lands hardest where response was already worst.
What this shows. Each precinct's p90 full response decomposed into travel (measured drive time) and queue, where queue is the derived remainder — full response minus travel — not an independently logged interval, so the two segments sum to that precinct's p90 by construction. Both are p90, high-priority.
What to look for. Travel is near-constant across precincts and years; the entire stacked-bar growth is the queue segment, deepest in East. Because queue is a residual, any error in the travel measurement loads onto it — read it as the dispatch-availability penalty, not a directly clocked wait.
What this shows. The slowdown has a cause, and it isn't traffic. Travel barely moved — what grew is the queue, the time before any unit is even sent.
What to look for. Same mechanism citywide — no free car to send — but its weight lands hardest in East, where response was already worst. This is a deployment failure, not a driving-distance problem, and it falls heaviest on those with the least.
| Precinct | Travel | Dispatch-queue wait | Total response |
|---|---|---|---|
| Central | 13:34 | 26:37 | 40:11 |
| East | 15:51 | 30:42 | 46:33 |
| North | 17:23 | 18:57 | 36:20 |
| Queue = full response − travel (a derived penalty; p90 components don't sum). Latest complete fiscal year. | |||
p90 police response by call-priority tier (incl. dispatch-queue wait), citywide, FY2020–2025
What this shows. Police p90 response — the full wait including the dispatch queue — drawn separately for each call-priority tier. High is priority 1–3 (the set the city publishes a response time for); Medium and Low are added here. Fire publishes only its high-priority metric, so it is not split by tier.
What to look for. The collapse is not confined to urgent calls. Every tier climbs steeply, and the lower the priority the longer the absolute wait — a low-priority call now takes the better part of an hour at the 90th percentile. The high-priority line (the one matched against fire) is the floor, not the whole story.
What this shows. Police p90 full response (queue+travel) split by call-priority tier: High is priority 1–3, the only band the city publishes a response time for, with Medium and Low reconstructed here from the same open data. Fire reports a single high-priority metric and is not tier-split, so no cross-bureau tier comparison is drawn.
What to look for. Every tier climbs steeply and the absolute wait lengthens as priority falls, with low-priority reaching the better part of an hour at p90. The published high-priority line is the floor; the lower tiers are added context, not official metrics, and none are exposure-normalized.
What this shows. The collapse is not confined to emergencies — every priority tier is climbing steeply. The number the city publishes is the best case, not the whole.
What to look for. A low-priority call now takes the better part of an hour at the 90th percentile. The high-priority figure matched against fire is the floor — the real experience of calling for help is worse than the headline admits.
| FY | High | Medium | Low |
|---|---|---|---|
| 2020 | 14:32 | 35:30 | 103:35 |
| 2021 | 19:46 | 73:44 | 180:36 |
| 2022 | 24:39 | 81:55 | 175:03 |
| 2023 | 36:17 | 110:00 | 193:56 |
| 2024 | 38:01 | 108:33 | 192:12 |
| 2025 | 40:59 | 118:13 | 227:06 |
| FY2020→FY2025 change: High +182%, Medium +233%, Low +119%. Full response incl. dispatch-queue wait. PPB only, citywide. High = priority 1–3, Medium = 4, Low = 5–9. | |||
p90 police response split into travel + queue, by priority tier and fiscal year
What this shows. Each tier's p90 response split into travel (blue, the drive) and dispatch-queue wait (orange, time before any unit is sent). Queue here is the derived penalty (full response minus travel), so each stacked bar sums to that tier's p90 response.
What to look for. Travel barely moves at any priority — the growth is the orange queue segment across all three tiers. The same mechanism (no free car to send) drives the delay whether the call is urgent or not.
What this shows. p90 (90th-percentile) response per priority tier, decomposed into measured travel and a derived queue penalty — full response minus travel — so the two segments sum to that tier's p90 by construction.
What to look for. Queue is not an independently logged field; it is the residual left after subtracting drive time, so it absorbs any dispatch-side latency. Across all three tiers travel stays near-flat while that residual grows.
What this shows. The drive isn't the problem — the wait before any car is even sent is, and it's growing at every priority.
What to look for. Urgent or not, Portlanders wait for the same reason: no free car to send. That is a staffing and deployment choice, not a map.
| Tier | Travel | Dispatch-queue wait | Total response |
|---|---|---|---|
| High priority | 15:42 | 25:17 | 40:59 |
| Medium priority | 17:54 | 100:19 | 118:13 |
| Low priority | 19:35 | 207:31 | 227:06 |
| Queue = full response − travel (a derived penalty; p90 components don't sum). Latest complete fiscal year. | |||
Everything above is reactive — 911-dispatched calls. This is the proactive half: officer-initiated stops (Oregon STOP Act), a separate clock never summed with dispatched calls. The Portland echo of the Catalyst California finding — proactive effort flows to traffic, not the violent crime the public calls about — with the caveat that Oregon records no stop duration, so these are counts and shares, not officer-hours.
Traffic as a share of officer-INITIATED stops vs community-dispatched calls
What this shows. Two side-by-side bars, each adding to 100% within its own universe: what officers chose to stop people for (left, PPB Stops 2024) vs what the public called about (right, Dispatched Calls). The bars are never summed — they have different denominators and different clocks.
What to look for. Nearly all proactive stops — ~98% — cite only a traffic offense, while traffic is under a tenth of what the community dispatches police to. This is the Portland echo of the Catalyst California finding: officer-initiated police effort flows overwhelmingly to traffic enforcement, not to the violent crime the public most associates with policing.
What this shows. Two within-universe share distributions, each normalized to 100% of its own denominator: officer-initiated stops by reason cited (PPB Stops 2024) versus dispatched calls by group. Different denominators, different clocks — never summed.
What to look for. These are shares of counts, not officer-hours: neither stops nor calls carry a time-on-task field, so the ~98% describes the mix of proactive stops, not time spent. It is the Portland echo of Catalyst California's finding, not a reproduction of its officer-hours calc.
What this shows. Almost everything police choose to initiate is a traffic stop — while traffic is a sliver of what the public actually calls them for.
What to look for. The discretionary half of policing — ~98% traffic — points where the bureau sends itself, not where the community asks it to go. That deployment choice is the budget debate.
| Universe | Traffic | Everything else |
|---|---|---|
| Officer-initiated stops (proactive) | 98.1% | 1.9% |
| Community-dispatched calls (reactive) | 8.7% | 91.3% |
| Stops: PPB Stops Data Collection 2024 (traffic-offense-only vs other-crime). Calls: PPB Dispatched Calls CY2025 (FinalCallGroup). Different denominators, different clocks; neither is time-on-task. | ||
Composition of dispatched demand by call group, share of all calls
What this shows. The composition of dispatched demand — community-initiated 911/non-emergency calls — by call group, as a share of all calls per year. This is the reactive universe: what Portlanders call police about.
What to look for. Disorder/quality-of-life calls are the largest bucket (~46%), with Crime next; Traffic is a small slice (~8%). This is call mix, not time on task (the data carries no time-on-scene field) — so it shows what police are asked to handle, which is mostly not violent crime.
What this shows. Per-year share-of-all-calls composition of dispatched, community-initiated 911/non-emergency demand by call group — the reactive universe, normalized within each year.
What to look for. These are shares of call counts, not time on scene: the data carries no time-on-scene field, so ~46% disorder and ~8% traffic describe demand mix, not workload hours. It captures what police are asked to handle, not how long each takes.
What this shows. What Portlanders actually call police about is mostly disorder and quality-of-life — not the violent crime that dominates the policing debate.
What to look for. Traffic is just ~8% of community demand. The public sets this agenda, and it looks nothing like where proactive effort goes.
| Call group | Calls | Share |
|---|---|---|
| Disorder | 94,935 | 45.5% |
| Crime | 58,231 | 27.9% |
| Traffic | 18,104 | 8.7% |
| Alarm | 12,124 | 5.8% |
| Other | 10,219 | 4.9% |
| Civil | 8,349 | 4.0% |
| Assist | 6,545 | 3.1% |
| Community Policing | 233 | 0.1% |
| Community-initiated dispatched demand (call mix, not time allocation). FinalCallGroup field, PPB Dispatched Calls open data. | ||
Share of dispatched calls by type vs officer-initiated stops by reason, 2024
What this shows. The two universes side by side, as a single 2024 snapshot: the full category mix of dispatched calls (left) against officer-initiated stops by reason cited (right). Traffic is the same colour in both, so the eye carries from the thin call slice to the near-whole stop circle. Two different denominators — never summed.
What to look for. What the public calls about is diverse — disorder 47%, crime 28%, traffic only ~8%. What officers initiate is monolithic — ~98% of stops cite a traffic offense. The same Traffic wedge that is a sliver of community demand is essentially the entire proactive workload.
What this shows. A single 2024 snapshot pairing two within-universe distributions: dispatched calls by category (left) and officer-initiated stops by reason cited (right), each summing to 100% of its own denominator — never combined.
What to look for. Both are shares of counts, not time: with no time-on-task field, traffic at ~8% of calls versus ~98% of stops contrasts demand mix against proactive mix, not hours. The shared Traffic colour guides the eye, but the two circles keep separate denominators.
What this shows. Side by side the contrast is stark: community demand is diverse, but what police choose to initiate is almost entirely traffic.
What to look for. The same Traffic wedge that is only ~8% of what the public calls about is ~98% of proactive stops. The bureau's discretionary effort doesn't mirror the city's actual needs.
| Category | Count | Share of its universe |
|---|---|---|
| What the public calls about (dispatched) | — | |
| Disorder | 92,473 | 46.5% |
| Crime | 54,667 | 27.5% |
| Traffic | 16,172 | 8.1% |
| Alarm | 13,788 | 6.9% |
| Civil | 7,804 | 3.9% |
| Other | 7,445 | 3.7% |
| Assist | 6,145 | 3.1% |
| Community Policing | 178 | 0.1% |
| What officers initiate (stops, by reason) | — | |
| Traffic offense | 23,717 | 98.1% |
| Other crime | 450 | 1.9% |
| Two separate universes, never summed. Calls: PPB Dispatched Calls (RegJIN) CY2024, FinalCallGroup. Stops: PPB Stops Data Collection 2024, REASON cited (traffic-offense-only vs other-crime) — not filing division. | ||
A standing share of overtime exists purely to backfill absent officers — the closest public proxy for absenteeism, since Oregon publishes no per-officer sick-leave series. The slowdowns land against falling calls and a force too thin to cover its own shifts.
Sworn overtime worked to backfill absent members, vs all sworn overtime, 2020–2025
What this shows. How much overtime exists purely to cover absent officers. Each bar is all sworn overtime for the year (grey); the orange chunk is the City overtime dashboard's own “Backfill” flag — “working a shift for a member who is absent.” Oregon publishes no per-officer sick-leave series, so backfill overtime is the closest measurable absenteeism proxy — it counts the hours absence forces onto someone else.
What to look for. Backfill holds at ~a quarter of all sworn overtime, year after year — a flat share, not a worsening spike, but a chronic one. Whatever the cause of the absences, the bureau routinely pays overtime to cover shifts an absent member left open rather than fielding a force that can cover itself — a standing deployment cost, not a demand problem.
What this shows. Annual sworn overtime, with the City overtime dashboard's own "Backfill" flag — overtime 'working a shift for a member who is absent' — broken out as a share of the yearly total.
What to look for. This is a proxy, not a direct measure: Oregon publishes no per-officer sick-leave series, so backfill overtime stands in for absenteeism and may under- or over-count it depending on how shifts are coded. The share holds near ~a quarter of all sworn overtime across years.
What this shows. Roughly a quarter of all police overtime exists for one reason: to cover officers who didn't show.
What to look for. Year after year the bureau pays extra to backfill absent members rather than field a force that can cover itself — a standing deployment cost, not a demand problem.
| CY | All sworn OT | Backfill (absent-cover) | Backfill share |
|---|---|---|---|
| 2020 | 23,837 | 6,110 | 25.6% |
| 2021 | 19,820 | 4,071 | 20.5% |
| 2022 | 22,129 | 5,099 | 23.0% |
| 2023 | 24,675 | 6,856 | 27.8% |
| 2024 | 26,618 | 7,017 | 26.4% |
| 2025 | 29,013 | 6,427 | 22.2% |
| 2020→2025. City of Portland Police Overtime dashboard (PPB open data), sworn ranks only. 'Backfill' = the dataset's own flag for working a shift for an absent member. Work Hours (actual), not pay-multiplied. | |||
Alternate presentations of the cost-per-call chart — same data as the report above, kept for internal review and design comparison.
Police cost per call (up) and high-priority response time (down), 2020 through 2025
Mirror (bars): cost rises above the centre line, response time falls below it — both grow away from centre.
Police cost per call and high-priority response time, side by side, 2020 through 2025
Dual axis with side-by-side labeled bars — no line over the chart.
Police cost per call (up) and high-priority response time (down), shaded — 2020 through 2025
Mirror as shaded areas — the same read as the bar mirror with less ink.
This report asserts nothing it can’t show you. Every dataset below is the City of Portland’s own published record (or the U.S. Census) — click through to check any number yourself. Charts that combine or re-cut these (e.g. the dispatch-queue split, or the overtime “Backfill” proxy) describe exactly how in each chart’s caption and the methodology notes.
Every chart is built from these original files, exactly as published by the City (or the U.S. Census). Each filename is a direct download of the source artifact we hold; the SHA-256 fingerprint lets you confirm, byte-for-byte, that it matches the copy published by the source (linked above) — so nothing here is taken on trust. Nothing is re-processed or hand-edited. Checksums regenerated 2026-07-01.
| File | Covers | Fetched | Size | SHA-256 |
|---|---|---|---|---|
| DispatchedCalls_OpenData_2019_0.xlsx | 2019 | 2026-06-01 | 28.2 MB | dd8aa1404d08… |
| DispatchedCalls_OpenData_2020_2.xlsx | 2020 | 2026-06-01 | 25.6 MB | 39990ba2ab62… |
| DispatchedCalls_OpenData_2021_1.xlsx | 2021 | 2026-06-01 | 26.1 MB | 3d01e48cdaf4… |
| DispatchedCalls_OpenData_2022.xlsx | 2022 | 2026-06-01 | 29.4 MB | e720acebe74d… |
| DispatchedCalls_OpenData_2023_1.xlsx | 2023 | 2026-06-01 | 23.8 MB | b3c7904d16e5… |
| DispatchedCalls_OpenData_2024_1.xlsx | 2024 | 2026-06-01 | 23.1 MB | 4c27c0e31220… |
| DispatchedCalls_OpenData_2025.xlsx | 2025 | 2026-06-01 | 24.2 MB | a86493b44224… |
| DispatchedCalls_OpenData_2026.xlsx | 2026 | 2026-06-01 | 10.3 MB | cae8e3eb85b8… |
| File | Covers | Fetched | Size | SHA-256 |
|---|---|---|---|---|
| ppb_tac_police_context_2021.pdf | 2015-2020 | 2026-06-26 | 1.4 MB | e5023864636c… |
| File | Covers | Fetched | Size | SHA-256 |
|---|---|---|---|---|
| ppb_stops_2013.pdf | 2013 | 2026-06-23 | 721 KB | c5e05113bbdd… |
| ppb_stops_2014.pdf | 2014 | 2026-06-23 | 1.7 MB | 9328db063758… |
| ppb_stops_2015.pdf | 2015 | 2026-06-23 | 504 KB | f2ea01a34d37… |
| ppb_stops_2016.pdf | 2016 | 2026-06-23 | 959 KB | 30e57cdbcbf2… |
| ppb_stops_2017.pdf | 2017 | 2026-06-23 | 1.1 MB | 50ee7baf6b02… |
| ppb_stops_2018.pdf | 2018 | 2026-06-23 | 1.7 MB | 88e97e47732a… |
| ppb_stops_2019.pdf | 2019 | 2026-06-23 | 1.7 MB | cf58a7fe3bf3… |
| ppb_stops_2020.pdf | 2020 | 2026-06-23 | 1.4 MB | 9b829e3dd31a… |
| ppb_stops_2021.pdf | 2021 | 2026-06-23 | 1.6 MB | 964346db994a… |
| ppb_stops_2022.pdf | 2022 | 2026-06-23 | 1.7 MB | a803b368dd33… |
| ppb_stops_2023.pdf | 2023 | 2026-06-23 | 1.4 MB | aa35d0559a09… |
| ppb_stops_2024.pdf | 2024 | 2026-06-23 | 1.4 MB | 23a181ce04df… |
| File | Covers | Fetched | Size | SHA-256 |
|---|---|---|---|---|
| staffing/ppb_overtime_raw.csv | — | 2026-06-23 | 4.4 MB | 3d93848a9162… |
| File | Covers | Fetched | Size | SHA-256 |
|---|---|---|---|---|
| pfr_apr_2018-2019.pdf | FY2018-2019 | 2026-06-01 | 1.0 MB | e934a88aad5c… |
| pfr_apr_2019-2020.pdf | FY2019-2020 | 2026-06-01 | 3.4 MB | 4b38d5e2fcb2… |
| pfr_apr_2020-2021.pdf | FY2020-2021 | 2026-06-01 | 1.5 MB | 20c8a564562c… |
| pfr_apr_2021-2022.pdf | FY2021-2022 | 2026-06-01 | 3.1 MB | a8fb9b5df922… |
| pfr_apr_2022-2023.pdf | FY2022-2023 | 2026-06-01 | 4.0 MB | 48253f908f75… |
| pfr_apr_2023-2024.pdf | FY2023-2024 | 2026-06-01 | 1.6 MB | ed7a4b132af3… |
| pfr_apr_2024-2025.pdf | FY2024-2025 | 2026-06-01 | 1.6 MB | cb40cda6039e… |
| pfr_apr_2024-2025_v0.pdf | FY2024-2025 | 2026-06-01 | 1.6 MB | 56f2d8052a5d… |
| File | Covers | Fetched | Size | SHA-256 |
|---|---|---|---|---|
| staffing/cbo_police_analysis.pdf | — | 2026-06-01 | 365 KB | f1efe37ec9e0… |
| staffing/cbo_police_fy2023-24_analysis.pdf | — | 2026-07-01 | 1.1 MB | e176b3e7cf13… |
| File | Covers | Fetched | Size | SHA-256 |
|---|---|---|---|---|
| staffing/katu_staffing_investigation_2024.html | — | 2026-07-01 | 364 KB | 8d015b531d6e… |
| staffing/ppb_2024_annual_report.pdf | — | 2026-07-01 | 7.4 MB | d9aae6684d69… |
| staffing/ppb_2025_annual_report_draft.pdf | — | 2026-07-01 | 7.7 MB | a580ffbef4b5… |
| staffing/ppb_filled_fox_2021.html | — | 2026-07-01 | 111 KB | def5dad64b93… |
| staffing/ppb_filled_kgw_2019.html | — | 2026-07-01 | 106 KB | 89f697db55cb… |
| staffing/ppb_filled_kgw_2022.html | — | 2026-07-01 | 244 KB | 7a11c3b24f31… |
| staffing/ppb_fy2023-24_requested_budget.pdf | — | 2026-07-01 | 1.4 MB | d14fc83a07ca… |
| staffing/ppb_staffing_report.html | — | 2026-07-01 | 66 KB | b66028c983c1… |
| staffing/ppb_staffing_report_20231109.html | — | 2026-07-01 | 115 KB | 531206b7aa14… |
📱 View the shareable social version
The purpose-built social cut. ⤓ Download this version (PNG).