Know where
to park.
San Francisco street sweeping, block by block — including the part no sign tells you: when tickets actually land. Free, open source, no accounts — live from SF open data.
PARKING
The sign says 9–11. The tickets say 9:11.
221 street-cleaning citations on this block, 2024–2026: the earliest at 9:00am sharp, 90% written by 9:21am. The posted two-hour window is real — the risk is not evenly spread inside it.
Three moves. No tickets.
Open the map
Every curb in SF, colored by what's coming: green is clear, amber sweeps within a day, red means move it. Permit zones and loading zones are one toggle away.
Tap where you parked
Get the verdict for that exact curb side: the next sweep, the permit rules — and the real ticket time, reconstructed from two years of SFMTA citations on that block.
Get pinged first
One tap sets a push alert ~30 min before your block is swept — or drop it into your calendar. Works as an app from your home screen.
I park on the street.
The street kept winning.
CURB began with one orange envelope too many. I park on the street like half this city, and I was done donating to the SFMTA one windshield at a time — so I pulled the city's own data and built the map I wished existed. Now the curb talks first.
The fine print, in plain words.
When does street sweeping happen in San Francisco?
Most residential blocks are swept weekly or twice a month in a fixed weekday window (for example, Tuesday 9–11am); many commercial corridors are swept overnight. Every block has its own schedule — CURB shows the exact rule for any curb when you tap it on the map.
When do street-cleaning parking tickets actually get written?
Usually in the first 30–40 minutes of the posted window, not spread across it. CURB reconstructs each block's real ticket times from the city's complete street-cleaning citation record — on a typical 9–11am block, the median ticket lands around 9:11am. The posted sign is always the source of truth.
Can I park after the street sweeper passes?
Yes — it's SFMTA's own rule: once the street sweeper has physically swept the curbside, you may park there, even if the posted sweeping hours haven't expired. The flip side: during the posted hours you may not park until the street has actually been swept — so if you're parked before the sweeper arrives, you can still be ticketed. The posted sign is always the source of truth. (SFMTA: Parking is allowed after sweeping.)
What are the dashed truck routes on the map?
An experiment — that's why the layer is marked Beta. San Francisco doesn't publish the sweeper routes openly, so I obtained the trucks' actual GPS through a public-records request. Where that data covers a block, the "when the sweeper passes" time is the city's real telematics — not a guess. The dashed path order is still reconstructed from two years of street-cleaning citation timing (DataSF) where GPS coverage is thin — START marks the end of the run ticketed earliest. Never live tracking, and the posted sign on your block always wins.
Is CURB free?
Yes. CURB is free, with no account, no ads, and no tracking — and open source under the MIT license: the whole app is on GitHub. It runs entirely on public San Francisco open data (DataSF).
What are San Francisco's residential permit parking areas?
About 30 lettered RPP areas limit non-permit parking — typically to 2 hours, Monday–Friday 8am–6pm; permit holders are exempt. CURB maps every area's boundary and typical rule from the Layers panel.
Is CURB allowed to use this ticket data?
Yes — it's public record the city itself publishes. CURB aggregates two years of SFMTA citations from DataSF (the city's open-data portal) into block-level statistics. It never tracks enforcement officers or live activity, and the posted sign is always the source of truth. The goal is moving your car before sweeping — exactly what the program wants.
Can CURB remind me before street sweeping?
Yes. One tap arms two pushes: a heads-up the evening before (~8pm) and an urgent alert ~30 minutes before your block is swept — or add the sweep to your calendar. On iPhone, install CURB to your Home Screen to receive push alerts.
No black box.
CURB invents nothing. Every line, time and color is computed from San Francisco's own public open data — mostly precomputed into static files the map reads instantly, none of it live tracking. Here's exactly what it runs on, and how the ticket times are rebuilt.
The posted day & window for every block. DataSF · yhqp-riqs
1M+ street-cleaning tickets (2024–mid-2026), stamped to the minute and GPS-located — the complete record via SF public-records request #26-5453. The open feed drops coordinates. DataSF · ab4h-6ztd
The city's addressing system (EAS) — pins older, address-only citations to a block (the 2024+ pull is GPS-located). DataSF · 3mea-di5p
The ~30 lettered residential permit (RPP) zones. DataSF · hi6h-neyh (2017 set)
Metered streets and their commercial / passenger / red loading rules. DataSF · 6cqg-dxku
The ~1,975 unmetered passenger-loading zones (627 by schools) DataSF leaves out — pulled from the city's own ArcGIS curb layer. SFMTA Digital Curb
Boundaries for the per-neighborhood ticket stats. DataSF · j2bu-swwd
From a million tickets to one minute
SFMTA logs every citation with a timestamp, but stopped attaching coordinates to the public feed
around 2021 — leaving an officer-typed string like 0121 STEINER ST. So I filed a
public-records request (#26-5453) and got the complete record back with GPS: about a million
street-cleaning tickets, 2024 to mid-2026, each one located. From there it's direct:
- Snap each ticket's GPS to the nearest street segment (within ~40m), then check it against that block's posted schedule to drop bad matches.
- For every block side, take all of its street-cleaning tickets and measure when they actually fall inside the posted window.
- Across ~22,000 block-sides, the typical block's tickets land in a ~15-minute burst — a median of about 25 minutes into the two-hour window. Citywide, ~77% are written in the first 45 minutes and ~90% within the first hour; on the example block above, the median ticket lands at 9:11.
Said plainly: the 2024-onward tickets are GPS-located, so each is matched to its block directly, not guessed from a text string — and the posted sign is still the real answer. The pattern shows when tickets land, not whether your block gets swept (you only see blocks that were ticketed). It's rebuilt from the city's own record and predictive from history — there's no live sweeper feed in SF, so nothing here is real-time. The full pipeline and the math are open source on GitHub.
New — the sweeper's own GPS: I also obtained San Francisco's actual street-sweeper telematics (public-records request #26-5451). Where the truck's GPS lands on a block I track, it confirms the story directly: the sweeper passes first, and the ticket follows a median of ~19 minutes later — the truck is ahead of the citation on about 78% of those blocks. Coverage is partial and growing as the city releases more; blocks that have it show a "Sweeper ~9:04a" line beneath the ticket time.
The paper trail.
Coverage of CURB — and the broader thread reporters keep pulling, SFMTA's own citation records:
A feature on CURB and the records-based finding behind it — SFMTA confirmed it hasn't objected to the app's use of public data.
How CURB started — one too many tickets, then a deep read of SF's public citation records.
Neighborhood by neighborhood, the post-pandemic enforcement comeback — Mission Bay leads, the Ingleside is the rare place tickets fell.
Citations are back at pre-pandemic levels — and enforcement is shifting into nights and Saturdays.
Street sweeping is the city's number-one ticket — half a million a year, more than Los Angeles writes.
A fully staffed enforcement push, district by district — and the old "no ticket once the sweeper has passed" grace quietly eroding.
A live citation tracker drew 50,000 visitors in a day before the city cut its data feed — the appetite for this information is real.
Product designer who codes. By day he builds design systems and interfaces; by night he turns whatever annoys him into small tools — this one started at a windshield on Valencia. CURB is designed, built and street-parked in San Francisco. Find him on GitHub.
CURB is free and MIT-licensed — the whole app is on GitHub, built on public DataSF data. Spot a wrong sweep time or a bug? Open an issue and I'll fix it.