GIS-MX01
Two analysts were screening infill lots by hand across five different websites. Now the lots that fit are waiting for them at 7am with a draft already written.
- Client
- Land acquisition team, Seattle
- Year
- 2026
- Duration
- Since January 2026, pilot live since March
- Team
- 2 engineers, 1 designer
- Role
- Product & engineering
- Type
- Internal tools
- Approach
- Python ETL · PostgreSQL + PostGIS · pgvector retrieval · Next.js

Parcel page with cited zoning answers. Parcel, owner and price are placeholders.
The job
The team buys small infill lots in Seattle, mostly LR2, LR3 and NC2. Screening a parcel meant pulling it up in the King County parcel viewer, Seattle's zoning map, the SDCI permit portal, the assessor's records and the broker's listing site, then pasting lot size, zone and permit history into a shared spreadsheet. We timed 20 write-ups before starting. The median was 48 minutes.
Data
A nightly job loads King County parcels and assessor extracts, Seattle zoning, critical areas and shoreline layers, SDCI permits and the broker listing feed into PostGIS, joined on the parcel number. The sources don't always agree. Assessor lot area and the GIS polygon can differ by a few hundred square feet, so the parcel page shows both with their source and nothing gets averaged.

Data and AI pipeline, from public sources to analyst review.
AI workflow
For every lot that passes the buy box, the system retrieves the relevant sections of SMC Title 23 and an LLM drafts a parcel summary: key facts, flags, and answers to the standard questions (height, setbacks, density), each quoting the section and the date the code text was pulled. A citation gate sits after the model. If retrieval can't find a section, the answer is "no answer," not a guess. Parcels with critical-area or shoreline flags skip the AI entirely and go to an analyst. Analysts can ask follow-up questions on the parcel page, and those go through the same retrieval and the same gate. A set of analyst-checked questions re-runs every time the code text or the prompt changes.
The analyst's part
Analysts open the morning digest, review the parcel page, and edit the draft into a deal memo. The memo can't be marked ready until they've opened every cited section, and the audit log records who approved it against which code version. Go or no-go stays with the acquisitions lead.
Where it is now
Over the first 60 parcels in the pilot, median screening time is 9 minutes, and the digest surfaces 3 to 6 matching lots each morning. Next is Bellevue and Redmond, which publish their parcel and zoning data in different schemas.

A morning on the desk: what runs overnight, where the AI drafts, and where an analyst signs off.
Scope
- Internal web app behind the client's VPN and SSO
- Nightly ETL for five public sources and a listing feed, with runbooks
- Saved buy-box criteria and a 7am digest
- AI parcel summaries with section citations and a citation gate
- Regression set for the AI answers, re-run on every code pull
- Deal-memo export to their Google Doc template