Open the map →

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.

A real block — 214–255 Steiner St

The sign says 9–11. The tickets say 9:14.

203 street-cleaning citations on this block over two years: the earliest at 9:00am sharp, 90% written by 9:39am. The posted two-hour window is real — the risk is not evenly spread inside it.

when tickets are written here posted window
How it works

Three moves. No tickets.

01

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.

02

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.

03

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.

Why this exists

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.

— Alejandro · parked on the Tuesday side
Questions, answered

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 two years of SFMTA citations — on a typical 9–11am block, the median ticket lands around 9:14am. The posted sign is always the source of truth.

What are the dashed truck routes on the map?

An experiment — that's why the layer is marked Beta. San Francisco doesn't publish where sweepers start or which way they drive, so CURB is trying to figure it out from the paper trail: two years of street-cleaning tickets (DataSF) give each block a typical ticket time, and blocks sharing a corridor and sweep window are connected in the order the tickets land. The dashed line with arrows is that reconstruction — START marks the end of the run ticketed earliest. It's an estimate from public citation records, never live tracking, and it sharpens as the method is refined. 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.

The receipts

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.

Sweep schedule

The posted day & window for every block. DataSF · yhqp-riqs

Parking citations

23.8M tickets since 2008, stamped to the minute — the real ticket time on each block. DataSF · ab4h-6ztd

Address index

The city's addressing system (EAS) — the key that pins each citation to a block. DataSF · 3mea-di5p

Permit areas

The ~30 lettered residential permit (RPP) zones. DataSF · hi6h-neyh (2017 set)

Meters & color curb

Metered streets and their commercial / passenger / red loading rules. DataSF · 6cqg-dxku

White school zones

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

Neighborhoods

Boundaries for the per-neighborhood ticket stats. DataSF · j2bu-swwd

How the "9:14" is built

From 650k tickets to one minute

Here's the hard part: SFMTA logs every citation with a timestamp and an address, but stopped attaching coordinates around 2021 — so all that's left is an officer-typed string like 0121 STEINER ST. Reconstructing "when does this block get ticketed" means putting those strings back on the map:

  1. Match each citation's address to a specific block using the city's address index (EAS), then check it against that block's posted schedule to throw out bad matches.
  2. For every block side, take ~2 years of its matched street-cleaning tickets and measure the window they actually fall in — earliest to latest.
  3. Across ~18,000 block-sides, the median of that window is about 22 minutes; ~87% land all their tickets within 45. On the example block above, the median ticket lands at 9:14.

Where it's fuzzy, said plainly: it's a text-to-block match, not GPS, so any single block can be off — the posted sign is always the real answer. The pattern shows when tickets land, not whether your block gets swept (you only see blocks that were ticketed). It's refreshed monthly, and it's 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.

In the news

The paper trail.

Reporters keep pulling the same thread CURB is built on — SFMTA's own citation records. The recent coverage, if you want the full story:

Alejandro
The human behind it Alejandro

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.

Open source

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.