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.
- Total users
- 3
- Monthly active
- 1
- Total runs
- 115
- Bookmarked
- 0
- Rating
- Not rated yet
- Last modified
- 12 days ago
Overview
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
- Create a free Apify account with $5 in credit.
- Open the Seattle Building Permits Scraper.
- Set your inputs and any filters, then click Start.
- 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
| Field | Type | What it does | Default |
|---|---|---|---|
| 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 for | What it is | Price 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.
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.
{
"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.
