Package 'permittimelines'

Title: Garage-Conversion and ADU Building Permit Timeline Data for Four U.S. Cities
Description: Provides reproducible access to prepared public building-permit records measuring how long residential garage-to-accessory-dwelling-unit (ADU) and garage-to-habitable-room conversion permits waited between application and issuance in Los Angeles, San Diego, San Francisco, and Seattle. Includes one row per unique application with the measured wait, application-year cohort completion rates, and small-cell-suppressed timeline aggregates, prepared from each city's official open-data portal with a committed, dependency-free build script.
Authors: Assaf Ichaki [aut, cre]
Maintainer: Assaf Ichaki <[email protected]>
License: MIT + file LICENSE
Version: 0.1.1
Built: 2026-08-24 13:41:30 UTC
Source: https://github.com/asafichaki/permittimelines

Help Index


Garage-Conversion and ADU Building Permit Timeline Data

Description

R access to prepared public building-permit records measuring how long residential garage-to-ADU and garage-to-habitable-room conversion permits waited between application and issuance in Los Angeles, San Diego, San Francisco, and Seattle.


Load application-year cohort completion rates

Description

Loads, for each city and application year, how many cleaned applications were submitted, how many had an issued permit at retrieval time, and the resolved share. Cohorts are always formed on the application year, never the issue year: a large share of permits issued in any given year were filed earlier, so issue-year grouping oversamples slow permits.

Usage

permit_cohorts(city = NULL)

Arguments

city

Optional city slug filter, as in permit_records.

Value

A data frame with one row per city and application year from 2015 onward with at least 30 cleaned applications; earlier or thinner city-years are present in permit_records but carry no cohort row. publishable is TRUE once a cohort has at least 30 applications and at least 75 percent of them resolved; younger cohorts are censored toward fast permits and must not be aggregated.

Examples

cohorts <- permit_cohorts("los-angeles")
cohorts[, c("year", "submitted", "issued", "resolved")]

Return provenance, method, and citation metadata

Description

Returns the authoritative city open-data sources, the prepared interactive dataset page, repository, license, version, retrieval date, the method constants used to build the bundled files, the interpretation caveats that must accompany any published use, and citation information.

Usage

permit_metadata()

Value

A named list containing the four city sources, the prepared interactive dataset, repository, license, version, retrieval date, method constants, interpretation caveats, and recommended citation.

Examples

permit_metadata()$caveats

Load prepared permit records

Description

Loads one row per unique residential garage-conversion permit application in Los Angeles, San Diego, San Francisco, and Seattle. Applications whose permit had been issued when the records were retrieved carry the measured wait in days; applications with an empty issued_date had no issued permit at retrieval time, which may mean a stalled review or an abandoned project. The source records do not distinguish the two, and none of them are marked denied.

Usage

permit_records(city = NULL)

Arguments

city

Optional city slug to filter on: one of "los-angeles", "san-diego", "san-francisco", "seattle". NULL (the default) returns every city.

Value

A data frame with one row per unique application. project is "adu" or "habitable-room". in_mature_cohort flags the issued rows inside the city's aggregate window (see permit_timelines).

Examples

records <- permit_records()
table(records$city, records$project)

Load suppressed timeline aggregates

Description

Loads percentile waits and within-N-days shares for each city, computed over the city's mature cohort window (its last four publishable application-year cohorts, listed in mature_years). Cells with fewer than 30 records are suppressed: suppressed is TRUE and every statistic is NA. Percentile columns are lower-tail order statistics of the sorted waits (quantile type 1, no interpolation), matching the published interactive explorer; for even-sized groups the median is the upper of the two central observations.

Aggregates are reported separately per review track, project type, and permit type group. Never pool review tracks into one median: both tracks of a city can get faster while the pooled median rises, purely from a mix shift.

Usage

permit_timelines(city = NULL)

Arguments

city

Optional city slug filter, as in permit_records.

Value

A data frame with one row per aggregate cell. dimension names the grouping ("overall", "review_track", "project", "permit_type_group", "project_and_permit_type") and group the cell inside it.

Examples

timelines <- permit_timelines("los-angeles")
subset(timelines, dimension == "review_track" & !suppressed)