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:
filed— owner / architect filed the application. Under DBI plan review.approved— plan review complete. About to issue.issued— permit live, work can legally start.complete/cancelled/withdrawn— closed states.
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:
- 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. - 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:
| Field | What it tells you |
|---|---|
permit_type_definition | Standardized scope: "new construction", "additions alterations or repairs", "demolitions", "otc alterations permit", etc. |
estimated_cost / revised_cost | Owner-reported value, with revised figure populated post plan-review on 98% of recent permits. |
existing_use / proposed_use | Building use codes (R-2 multifamily, R-3 SFR, B office, M retail, etc.) on both ends of the work. |
existing_units / proposed_units | Unit count change — flags ADU additions and conversions. |
neighborhoods_analysis_boundaries | Which of the 36 SF Analysis Neighborhoods the property sits in. |
supervisor_district | 1–11. SF's other major geo bucket. |
voluntary_soft_story_retrofit | Y/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:
- Project value above $250,000. Below that, it's usually small remodel or single-trade work that won't support a real GC fee.
- Permit type: "new construction", "additions alterations or repairs", or "demolitions". OTC alteration permits dominate by volume but most are minor.
- Status = filed with no contractor named in
3pee-9qhc. The clean window for outreach. - Recent filing date. Filed in the last 14 days is ideal. Older than 90 days and you're entering a permit that's likely close to issuance.
- Real scope keywords in
description. "Tenant improvement", "TI", "addition", "interior remodel", "MEP" — these signal substantive work. "Repair", "replace in kind", or "no expansion" usually mean a small fix.
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.
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:
- The bid window is fully visible. You can see every permit in plan review with one query, no portal scraping required.
- Speed matters more. Because the data is current and complete, contractors who check daily get a real first-mover advantage.
- Geography is filterable. 36 Analysis Neighborhoods plus 11 supervisor districts, both populated on every row. Carve up your bid territory however you want.
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 →