Seattle Open Data Scraper
Pricing
from $1.99 / 1,000 results
Seattle Open Data Scraper
Seattle Open Data Scraper extracts City of Seattle datasets, such as building permits, or searches the public catalog. Save clean, flat records directly as JSON, CSV, or Excel spreadsheets for easy tracking and research
Pricing
from $1.99 / 1,000 results
Rating
0.0
(0)
Developer
Kawsar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Seattle Open Data Scraper: data.seattle.gov (Socrata)
Extract building permits, civic records, and public dataset catalogs from Seattle's open data platform into flat JSON, CSV, or Excel files.
The default setup fetches building permit details (cap of 100 rows per run). Set up automated schedules whenever you need fresh exports for reporting, tracking, or analysis.
Use Cases
- Permit Tracking: Export building permit details—including class, type, key dates, estimated cost, and address—straight into a spreadsheet.
- Civic Research: Collect dataset snapshots on a regular schedule to analyze changes over time.
- Catalog Search: Search available public datasets by keyword to easily grab dataset IDs and direct links.
- Filtered Exports: Apply custom filtering conditions when you only need records matching a specific permit class or status.
- Newsroom & Planning Desks: Refresh target data tables before stories, meetings, or public hearings while keeping strict limits on row counts.
Extracted Data & Schema
Each extracted record includes a link back to the source record along with a timestamp marking when it was pulled.
| Field | Type | Description |
|---|---|---|
permitnum | string | Permit identification number |
permitclass | string | Broad permit classification |
permitclassmapped | string | Mapped permit classification category |
permittypemapped | string | Mapped permit type category |
permittypedesc | string | Specific permit type description |
permitDescription | string | Detailed project work description |
housingunits | string | Total housing units associated with the permit |
housingunitsremoved | string | Housing units removed |
housingunitsadded | string | Housing units added |
estprojectcost | string | Estimated project valuation in USD |
applieddate | string | Date application was submitted |
issueddate | string | Date permit was officially issued |
expiresdate | string | Date permit expires |
completeddate | string | Date work/inspection was completed |
statuscurrent | string | Current processing status |
originaladdress1 | string | Street address |
originalcity | string | City |
originalstate | string | State |
originalzip | string | ZIP code |
link | object | Record link object |
latitude | string | Geographic latitude coordinate |
longitude | string | Geographic longitude coordinate |
location1 | object | Record location object |
daysoutcorrections | string | Days spent awaiting corrections |
numberreviewcycles | string | Number of review cycles completed |
zoning | string | Property zoning designation |
dwellingunittype | string | Specific dwelling unit type |
standardplan | string | Standard plan indicator |
dependentbuilding | string | Dependent building indicator |
housingcategory | string | Housing classification category |
catalogId | string | Dataset identifier from catalog searches |
catalogName | string | Dataset title from catalog searches |
permalink | string | Catalog entry permalink |
domainName | string | Dataset host domain |
scrapedAt | string | UTC timestamp recorded at scrape time |
sourceUrl | string | Full web address used during extraction |
error | string | Error details if a row fails; empty on successful records |
Sample Output
{"permitnum": "6064208-CN","permitclass": "Single Family/Duplex","permitclassmapped": "Residential","permittypemapped": "Building","permittypedesc": "New","permitDescription": "Establish use as single family dwelling and construct a new single family residence with attached garage all per plan.","housingunits": "1.0","housingunitsremoved": "0.0","housingunitsadded": "1.0","estprojectcost": "380715.0000","applieddate": "2006-03-08T00:00:00.000","issueddate": "2006-08-10T00:00:00.000","expiresdate": "2008-02-10T00:00:00.000","completeddate": "2008-02-07T00:00:00.000","statuscurrent": "","originaladdress1": "","link": {},"location1": {},"scrapedAt": "2026-10-12T00:00:00+00:00","sourceUrl": "https://data.seattle.gov/resource/76t5-zqzr.json?$limit=50&$offset=0","error": ""}
Input Options
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | rows | Select rows to export a single dataset, or catalog to search available datasets. |
datasetId | string | 76t5-zqzr | Dataset identifier (e.g. building permits). Used in rows mode. |
where | string | empty | Custom filtering condition for rows mode (e.g., permitclassmapped = 'Residential'). |
query | string | permits | Keyword search query used in catalog mode. |
maxItems | integer | 100 | Maximum number of records to pull (hard limit: 1000). |
timeoutSecs | integer | 300 | Overall run execution timeout limit in seconds. |
requestTimeoutSecs | integer | 30 | Timeout per individual network request in seconds. |
proxyConfiguration | object | {"useApifyProxy": false} | Network configuration settings. |
Sample Input Configuration
{"mode": "rows","datasetId": "76t5-zqzr","where": "permitclassmapped = 'Residential'","query": "permits","maxItems": 100,"timeoutSecs": 300,"requestTimeoutSecs": 30,"proxyConfiguration": { "useApifyProxy": false }}
How Data Collection Works
- Runs extract records in batches of 50.
- Paging proceeds sequentially until all matching records are gathered or your configured
maxItemsthreshold is hit. - Built-in deduplication prevents identical permit or catalog IDs from appearing twice in your output.
- Requests automatically retry up to 3 times if temporary connection interruptions occur, using exponential backoff (2s, 4s, 8s).
- Unhandled request errors are captured directly inside an
errorfield on a individual record row, allowing the run to finish gracefully without crashing.
Frequently Asked Questions
How many rows can I export in a single run?
The default limit is set to 100 records per run, with a maximum limit of 1,000. If you need to pull large historical datasets, set up scheduled runs using filtered queries to break up your collection.
What happens if I enter an invalid filter or dataset ID?
Instead of crashing the entire run, the actor records an error row containing details about what went wrong and continues processing.
Why is the work description field labeled permitDescription?
The platform reserves description for internal schema handling, so we renamed the field to permitDescription to keep the dataset structure consistent and clear.
Disclaimer
Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, sponsored by, or otherwise officially associated with Seattle Open Data or its owners. All data is collected from publicly available sources. Users are responsible for complying with the source's terms of use, rate limits, and attribution or licensing requirements.
Is web scraping legal?
This Actor only collects publicly available data from Seattle Open Data, mostly through its public API or feed, without logging in or bypassing any access controls. Scraping public data is generally legal, but how you use it matters:
- Personal data: If the results include personal data (for example names, emails, or profile details), laws such as the GDPR in the EU and the CCPA in California may apply. Only collect and store personal data when you have a legitimate reason.
- Copyright: Some content (articles, images, descriptions) may be protected by copyright. Do not republish full copyrighted content without permission.
- Terms of use: Respect the source's terms, stated rate limits, and any attribution or non-commercial-use requirements listed in the Data source and licence section.
- Legal advice: This is general information, not legal advice. If you're unsure, consult a lawyer.
To learn more, read Apify's guide: Is web scraping legal?