Home / Find SF construction jobs early

How to find San Francisco construction jobs before your competition

San Francisco publishes every building permit application and issuance daily through the city's open data portal at data.sfgov.org. Both in-review and issued permits live in the same dataset, distinguished by the status field — and unlike most major cities, the in-review window is fully visible without a portal scrape. The information you need to win mid-market construction work in SF is sitting in two Socrata datasets that almost no contractor reads directly.

The contractors who win consistently in SF aren't the ones with the largest sales teams or the longest client lists. They're the ones who built a habit around the daily DBI permit feed. This guide walks through how the data works, what to look for, and what to do when you find a real job.

Where San Francisco construction data lives

The primary source is the SF Department of Building Inspection (DBI) Building Permits dataset on the official DataSF portal — Socrata dataset i98e-djp9. It's updated daily. One row per permit. Both applications and issuances live in the same table, distinguished by the status field:

The contact-level data (contractor name, license number, role) lives in a sister dataset, 3pee-9qhc — the Building Permits Contacts feed. Joining the two on permit_number gives you the full picture: project scope plus who's named on the permit.

The two stages — filed vs. issued

Just like in other major cities, SF tracks two separate moments on every job:

  1. Application filed. Owner or design professional submits drawings to DBI and pays the application fee. Status reads filed. Wait time depends on the project's planning track and complexity — typically 6–16 weeks for a major alteration.
  2. Permit issued. All review steps clear, fees paid, the permit is live. The GC, by this point, is almost always already chosen.

The window between filed and issued is the practical opportunity for any contractor who isn't already on the project. Reach the owner during that window — usually a few weeks to a few months — and you have a real shot. Wait for issuance, and you're behind. SF's advantage over Chicago and many other cities: the in-review permits are right there in the same dataset. No separate portal scrape needed.

What's actually in an SF permit record

SF DBI's permit feed is unusually scope-rich. Each permit row includes structured fields most jurisdictions don't expose:

FieldWhat it tells you
permit_type_definitionStandardized scope: "new construction", "additions alterations or repairs", "demolitions", "otc alterations permit", etc.
estimated_cost / revised_costOwner-reported value, with revised figure populated post plan-review on 98% of recent permits.
existing_use / proposed_useBuilding use codes (R-2 multifamily, R-3 SFR, B office, M retail, etc.) on both ends of the work.
existing_units / proposed_unitsUnit count change — flags ADU additions and conversions.
neighborhoods_analysis_boundariesWhich of the 36 SF Analysis Neighborhoods the property sits in.
supervisor_district1–11. SF's other major geo bucket.
voluntary_soft_story_retrofitY/N flag. Identifies seismic-retrofit work, which has its own contractor pool.

The contacts table (3pee-9qhc) adds the people side: first_name, last_name, firm_name, role (contractor, architect, engineer, project contact), license1, sf_business_license_number, is_applicant. About 25,000 distinct contractor records appear across the past 12 months of permits.

What to look for in an SF filing

SF DBI issues thousands of permits a week — OTC alterations, sign permits, soft-story retrofits, single-trade work, plus the real construction jobs. The signal-to-noise ratio is the same problem every contractor faces. The filings that matter share a few characteristics:

See today's SF filings, scored and filtered

Permit Pipeline reads i98e-djp9 + 3pee-9qhc daily, scores every SF permit A+/A/B, and emails GCs and subs only the ones worth calling. Try a free sample digest.

Get the sample →

Why SF data has a structural advantage for the in-review window

SF is one of the few major cities where in-review permits are in the same Socrata dataset as issued permits. Chicago requires a separate scrape of webapps1.chicago.gov to see in-review filings. NYC's DOB NOW data covers in-review well but is split across multiple datasets. SF puts filed, approved, and issued rows side-by-side in i98e-djp9, with status as the single lifecycle field.

That means three things for SF contractors:

What to do when you find a real one

A clean SF filing gives you the address, the property block/lot, the project value, the work description, and (if filed) the contractor + architect of record. That's enough to reach out cleanly without sounding generic:

"I saw your application for [address] filed last week. We've completed three similar projects in [neighborhood] in the past year. If your team is still building out the bid list, I'd love a quick call."

Specificity matters. Owners and project managers hear from contractors all the time; they ignore generic outreach. They respond to messages that prove the contractor read the actual filing. The fastest way to kill your response rate is to send the same templated note to every owner in a CSV.

Why most SF contractors are too late

The default for most GCs is to wait for an invitation to bid, or to chase published RFPs. Both are downstream signals — by the time a job is on a bid list, ten others know about it. The contractors who consistently win mid-market SF work are watching the daily permit feed and reaching out during plan review, not after issuance.

Permit Pipeline scores every new SF filing A+/A/B and emails subscribers the top-graded leads each weekday morning. You see 20–50 filings instead of 400, and the ones you see are pre-filtered for project value, scope, and contractor-slot openness. See what today's SF feed looks like.

Want a free sample of today's top SF filings?

Yesterday's top 20 A+ leads, scored and formatted for a GC or sub. No credit card.

Get the sample →