ParseForge Scrapers

Seattle Building Permits Scraper

parseforge/seattle-permits-scraper

BusinessDeveloper toolsReal estate

Collects Seattle building permits from the DCI open data portal. Filter by permit type, class, status, date range, ZIP code, or keyword, and get each permit as a flat row with full project details.

Run this scraper See the API call
Total users
3
Monthly active
1
Total runs
115
Bookmarked
0
Rating
Not rated yet
Last modified
12 days ago

Overview

ParseForge

Seattle Building Permits Scraper

Scrape Seattle building permits by type, status, date range, ZIP code, or keyword, up to a million per run. Each permit comes with its full application details, project description, and current status. Export to CSV, JSON, Excel, or XML.

The Seattle Department of Construction and Inspections public permit portal is built for one-at-a-time lookups. This Actor reads the open data feed directly, so you can pull every permit that matches your filters in one batch. No browser, no manual searches, and no copy-pasting.

Who uses it What they scrape Seattle DCI Permits for
Contractors and tradespeople Find new construction leads the day permits are filed in their service ZIP codes.
Real estate investors Spot neighborhoods with rising renovation activity before prices move.
Market researchers Quantify permit volumes by type and class across Seattle quarters.
Insurance adjusters Verify permit history for a property after a claim is opened.

What it does

This Actor collects Seattle building permits from the city's open data portal and returns each one as a flat row with permit number, type, status, address, valuation, and dates.

  • ๐Ÿ—๏ธ Permit type filter: Addition/Alteration, New Construction, Demolition, Tenant Improvement, and more.
  • ๐Ÿข Permit class filter: Commercial, Multifamily, Single Family/Duplex, Industrial, Institutional, and Vacant Land.
  • ๐Ÿ“… Date range filter: Set an applied-date window to pull only recent activity or a historical slice.
  • ๐Ÿ“ ZIP code filter: Narrow results to a single original ZIP code like 98101.
  • ๐Ÿ” Full-text search: Search across permit number, description, and address with a keyword.
  • ๐Ÿ“Š Status filter: 24 statuses from Initiated and Reviews In Process to Issued, Completed, and Canceled.
  • โš™๏ธ Max items control: Set a hard cap from 1 to 1,000,000 permits per run.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

What you can do with Seattle DCI Permits data

๐Ÿ“‹ Build a daily construction lead list.

A contractor sets the Actor to pull Single Family/Duplex Addition/Alteration permits filed in the last day for ZIP codes 98115 and 98105, and exports the CSV into their CRM.

๐Ÿ“ˆ Track neighborhood renovation velocity.

An investor runs the Actor monthly for Multifamily New Construction permits across all Seattle ZIPs to chart which areas are adding units fastest.

๐Ÿข Audit commercial tenant improvement activity.

A market analyst filters by Commercial class and Tenant Improvement type for the last quarter to report on office retrofit demand downtown.

๐Ÿ“ Verify permit history for a property portfolio.

An insurance team searches by address keyword across a list of properties to confirm permit statuses before renewing policies.

Why choose this scraper

What you get
Fresh leads Permits appear as soon as they hit the open data feed, often before they show up on lead-resale platforms.
No manual lookups One run replaces hours of typing addresses into the city's permit portal one by one.
Fixed schema Every row has the same columns, so you can append runs and build a clean historical dataset.

How it compares

This Actor and the other Seattle Building Permits Scraper both pull from the same city open data feed. Here is how the filtering and output compare based on what each listing describes.

Feature ParseForge Seattle Building Permits Scraper
Permit type filter Yes, 17 types including Addition/Alteration, New Construction, Demolition, and Tenant Improvement Not listed
Permit class filter Yes, 7 classes including Commercial, Multifamily, and Single Family/Duplex Not listed
Current status filter Yes, 24 statuses from Initiated to Completed Not listed
Applied date range filter Yes, from and to dates in YYYY-MM-DD format Not listed
ZIP code filter Yes, exact match on original ZIP Not listed
Full-text keyword search Yes, across permit number, description, and address Not listed

Configure the run

Drive the Actor from permit type, class, status, applied-date range, ZIP code, and a free-text keyword, alone or together, and filters run as each permit is read so only matches reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

{
 "maxItems": 10
}

A larger pull:

{
 "maxItems": 200
}

Pricing

Pay-per-result: $0.0339 per result collected. You pay only for the results written to your dataset.

Results collected Approximate cost
100 results $3.39
1,000 results $33.90
10,000 results $339.00

New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the Seattle Building Permits Scraper.
  3. Set your inputs and any filters, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to Seattle DCI Permits through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/seattle-permits-scraper"

Then prompt it in plain language to run the scraper and read back the results.

Troubleshooting

Why am I getting no results?

Your filters may be too narrow. Try removing one filter at a time, starting with the keyword or ZIP code. Also check that your applied-date range covers a period with known activity.

Why does my run stop before reaching maxItems?

The Actor stops when there are no more permits matching your filters. If you expected more, broaden your date range or remove a filter.

Why are some permits missing fields?

The city's open data feed sometimes has blank fields when an applicant has not supplied that information. The Actor returns whatever the city publishes.

Why is my date filter not working as expected?

The applied-date fields expect YYYY-MM-DD format. Make sure you are using four-digit years, two-digit months, and two-digit days with hyphens.

Why does the ZIP code filter return no results for a valid ZIP?

The filter matches the original ZIP field exactly. Try the search without the ZIP filter first to confirm permits exist for that area, then check the ZIP format in the results.

FAQ

Question Answer
Where does the data come from? The Actor reads Seattle's public open data portal, the same dataset that powers the city's own permit search. It is updated by the Department of Construction and Inspections.
How fresh is the permit data? The open data feed is typically updated daily. Permits appear in the Actor's results shortly after they are entered into the city's system.
Can I search by contractor name? The keyword filter searches across permit number, description, and address fields. If the contractor name appears in the description, it will match.
What is the difference between permit type and permit class? Permit type describes the work (e.g., New Construction, Demolition). Permit class describes the property use (e.g., Commercial, Single Family/Duplex). You can combine both in one run.
Can I get permits for a specific date range? Yes. Set the applied-date from and to fields in YYYY-MM-DD format. Both bounds are inclusive.
Does this Actor need a Seattle permit portal login? No. It reads the public open data feed directly. No account, no API key, and no browser automation.
What export formats are supported? You can export your dataset to CSV, JSON, Excel, or XML from the Apify run console.
How many permits can I collect in one run? You set the maximum, from 1 up to 1,000,000. The Actor stops when it hits your cap or runs out of matching permits.
Can I schedule this to run daily? Yes. Use Apify's scheduler to run the Actor every morning with your filters, and new permits will land in your dataset automatically.
Does the Actor return the full permit description? Yes. The description field contains the project scope as written by the applicant.

Related actors

Browse the full ParseForge collection for more scrapers.

๐Ÿ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

โš ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by City of Seattle. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

Input

FieldTypeWhat it doesDefault
maxItems integer Maximum number of permits to collect per run. 10
permitType string (17 options) Filter by Seattle DCI permit type description not set
permitClass string (7 options) Filter by property use class not set
status string (24 options) Filter by current status not set
appliedFrom string Lower bound for applieddate (inclusive) not set
appliedTo string Upper bound for applieddate (inclusive) not set
zip string Filter by original ZIP (e.g. '98101') not set
keyword string Full-text search across permit number, description and address not set

Pricing

from $25.42 per 1,000 results

Charged forWhat it isPrice each
result Single result in the default dataset. $0.02542 to $0.0339

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

API

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST ยท run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~seattle-permits-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "helloWorld": 123
  }'

Examples

Input that runs as-is.

input.json
{
  "helloWorld": 123
}

Reviews

No reviews yet. Be the first.

Issues

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

Related scrapers

Run Seattle Building Permits Scraper on Apify All scrapers