Minneapolis Building Permits Scraper — Contractor Leads
Pricing
$4.00 / 1,000 permits
Minneapolis Building Permits Scraper — Contractor Leads
Find contractor and construction leads from Minneapolis building permits: ~409k permits since 2016 from official city open data, refreshed daily, with contractor, valuation, address, ward and lat/long. Filter by contractor, ward or neighborhood; onlyNew skips repeats. $0.004/permit, no start fee.
Pricing
$4.00 / 1,000 permits
Rating
0.0
(0)
Developer
Parallel Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 days ago
Last modified
Categories
Security
Limited permissionsShare
Get fresh building permits from the City of Minneapolis as clean, analysis-ready JSON/CSV/Excel: permit number, issue date, address, parcel ID (APN), neighborhood, ward, latitude/longitude, permit & work type, valuation, fees, new/eliminated dwelling units, job description and the contractor/applicant name and address.
Who it's for: contractors, suppliers, lenders and investors who need a daily list of new Minneapolis building permits with the contractor, valuation and address, at $0.004 per permit.
Who uses it
- Roofers, HVAC, solar, window, landscaping and remodel companies building lead lists
- Building-material suppliers and lenders prospecting active contractors
- Investors tracking teardowns, new construction and additions
- Journalists and researchers following local development
Input
| Field | Meaning |
|---|---|
| cities | Minneapolis (default, live) and/or St. Paul (history only, July 2015 to June 30, 2025) |
| daysBack | Permits issued in the last N days (default 14). Use 3650 to reach back to the start of the city's records (Dec 2016) |
| minValue | Minimum permit valuation in $ |
| permitTypes | e.g. Res, Comm (empty = all) |
| workTypes | e.g. New, Addition, Remodel, Misc, Wreck |
| keyword | Text in the job description, e.g. roof, solar, deck |
| contractorSearch | Case-insensitive "contains" match on contractor/applicant name, e.g. roofing |
| wards | Ward numbers, e.g. ["13"] (Minneapolis and St. Paul) |
| neighborhoods | Minneapolis neighborhood names, "contains" match, e.g. Linden Hills (ignored for St. Paul) |
| onlyNew | true returns only permits not delivered by an earlier run with the same filters (default false) |
| maxItems | Cap on results, per city |
Example input
{"daysBack": 7,"minValue": 10000,"permitTypes": ["Res"],"workTypes": [],"keyword": "roof","maxItems": 200}
Example output (real record from the 2026-10-12 cloud run)
{"city": "Minneapolis","permitNumber": "BLDG1204564","issueDate": "2026-10-09T18:18:46.000Z","completeDate": null,"status": "Issued","milestone": "Final Inspection","address": "410 THOMAS AVE S","parcelId": "2902924130003","neighborhood": "Bryn - Mawr","ward": "7","latitude": 44.97316,"longitude": -93.31382,"permitType": "Res","occupancyType": "SFD","workType": "Misc","value": 13000,"fees": 337.3,"dwellingUnitsNew": 0,"dwellingUnitsEliminated": 0,"description": "Remove shingles on house & detached garage, inspect decking, install ice & water shield to code, install new shingles & roof components","contractor": "JTR Roofing Inc","contractorAddress": "11200 Stillwater Blvd N #106B, Lake Elmo","source": "City of Minneapolis Open Data (CCS Permits)"}
Data quality & history (measured, not promised)
We checked the official feed on 2026-10-13 so you know what you get before you run it:
- History back to December 1, 2016: about 409,000 Minneapolis permits in total, roughly 40,000 to 47,000 a year (42,698 in 2017, 47,056 in 2024, 39,308 in 2025). Set
daysBackhigh and raisemaxItemsto pull multi-year history for market studies or contractor track records. - Volume right now: 11,124 permits issued in the 90 days to Oct 11, 2026, about 120 a day.
- Field completeness across the 2,000 most recent permits:
| Field | Filled |
|---|---|
| Contractor/applicant name & address, parcel ID, latitude/longitude, permit value, fees, permit & work type, status | 100% |
| Neighborhood, ward | 99.6% |
| Job description | 99.5% |
| Occupancy type (SFD, duplex, commercial...) | 75.8% |
| Dwelling units new/eliminated (the city leaves it blank on the rest; we output 0) | 42.5% |
| Complete date (mostly blank because the permit is still open) | 8.1% |
- Straight from the source: every row comes from the City of Minneapolis CCS Permits feed at run time, sorted newest first, with the same permit number the city uses, so you can de-duplicate daily runs on
permitNumber.
St. Paul history (optional)
Checked on 2026-10-15 against the City of Saint Paul's Approved Building Permits feed:
- About 318,000 permits issued July 2015 to June 30, 2025 (29,383 in 2016, 29,549 in 2020, 33,218 in 2024). The feed has no permits after June 30, 2025.
- Across the 2,500 most recent St. Paul permits: contractor name & address and job description 100%, parcel ID (PIN) 99.2%, ward 98.8%, latitude/longitude 95.0%, estimated value of work 87.3%, final date 11.8%.
- St. Paul rows use the same columns.
permitTypeis the city's permit category (Building, Electrical, Mechanical, Plumbing...),subTypeadds detail (e.g. Solar PV Systems),neighborhoodis the district council (e.g. District 3), andfees/ dwelling units are blank because the city doesn't publish them.
FAQ
How do I get only new permits every day without paying for repeats? Schedule the actor daily with onlyNew: true and a daysBack of 2 or more for overlap. Permits you already received with the same filters (cities, minValue, permitTypes, workTypes, keyword, contractorSearch, wards, neighborhoods) are skipped before output, so you are only charged for new rows. State is stored in the named key-value store twin-cities-permits-state (latest 50,000 permits per filter set). Change a filter and you start a fresh feed.
Can I get roofing (or solar, HVAC, deck) leads only? Use keyword, e.g. roof, solar, furnace, deck. It matches the job description text. Use keyword rather than workTypes for trade leads: in our check of Minneapolis permits issued Oct 8 to 22, 2026, 174 of the 211 roof jobs were filed under work type Misc, so a work-type filter would miss most of them. For solar, keyword: solar found 389 Minneapolis permits issued Oct 2025 to Sep 2026, with a median permit value of $7,225.
How do I get the permits into Google Sheets, my CRM or Slack? Every run saves a dataset you can download as CSV, Excel or JSON, or read through the Apify API. To automate it, put the actor on an Apify schedule and connect one of Apify's integrations (Google Sheets, Slack, email, Zapier, Make or a webhook) so each day's new permits land where your team works.
Does it cover St. Paul? Yes, for history. Add St. Paul to cities. St. Paul's official open-data permit feed has about 318,000 permits issued from July 2015 to June 30, 2025, and the city stopped updating it after that date, so it can't give you fresh St. Paul leads. A recent daysBack returns nothing for St. Paul and logs a warning instead of charging you. Suburbs aren't covered.
Pricing
Pay per event: $0.004 per permit returned ($4 per 1,000). No start fee, no proxies needed, runs in seconds. With onlyNew: true you're only charged for permits you haven't received before.
What that means in practice, based on the city's own volumes (47,056 permits in 2024, 39,308 in 2025):
| Use | Rows | Cost |
|---|---|---|
Every new Minneapolis permit, daily onlyNew feed | about 108 to 129 a day on average | about $0.43 to $0.52 a day |
Same feed filtered with minValue, a ward, or a contractor | a fraction of that | proportionally less |
| One full year of history (e.g. 2024) | 47,056 | about $188 |
| Everything since Dec 2016 | about 409,000 | about $1,636 |
Set maxItems to cap any run.
Data source & legality
Official public open data published by the City of Minneapolis (Open Data portal). No login, no personal account data. Always follow local rules for marketing outreach.
Related actors
Other public-data Actors from parallelstudio: