Orlando FL Code Enforcement Scraper — Code Violation Leads
Pricing
from $2.10 / 1,000 code enforcement cases
Orlando FL Code Enforcement Scraper — Code Violation Leads
Scrape City of Orlando, Florida code enforcement cases via the official open-data API: case number, status, case type (housing, lot, zoning, sign, business tax, tree, pool), violation, opened/resolved dates, address, parcel ID, neighborhood, lat/lon. Distressed-property and contractor leads.
Pricing
from $2.10 / 1,000 code enforcement cases
Rating
0.0
(0)
Developer
Groundplane Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Features
Share
The Orlando code enforcement cases scraper gives you one row per code enforcement case for Orlando, Florida, straight from the City of Orlando via the official open-data API. No login or coding needed: run it in your browser, on a schedule, or through the Apify API, and export results as JSON, CSV or Excel.
Get City of Orlando, Florida code enforcement cases as a clean, filterable list: housing, lot (overgrown / junk), zoning, sign, commercial, tree, pool, abatement and business-tax cases with status, dates, address, parcel ID and neighborhood. Data comes from the official open-data API (data.cityoforlando.net dataset k6e8-nw6w, "Code Enforcement Cases"). The city refreshes the dataset daily; the newest case opened date at the 2026-11-08 check was 2026-11-08 itself, so cases currently appear within a few days of opening. The lag varies: at the October 2026 build the newest case lagged about 3 weeks. Every run states the newest case date it found in its status message, and flags the run PARTIAL if that date is over 45 days old.
What you get
Each row is one code enforcement case as published by the City of Orlando (caseNumber is unique, ~262,000 cases; about 98% were opened from 2016 on, because the city keeps a rolling ~5 years of cases plus older cases that are still on file). Rows are sorted newest opened date first with a stable :id tiebreak, so large runs never skip or repeat rows.
Sample output (real run)
{"caseNumber": "2026-14801Z","caseType": "Zoning","caseTypeCode": "Z","violation": "PARKING ON THE GRASS","status": "Open","stage": "Status Inspection","openedDate": "2026-09-23","resolvedDate": null,"daysToResolve": null,"address": "4712 BAY WILLOW CT","parcelId": "292207863402840","propertyClass": "Duplex","revenueClass": "RESIDENTIAL","assessedValue": 127736.0,"neighborhood": "The Willows","commissionerDistrict": "5","commissioner": "Shan Rose","source": "Staff","comments": "VEHICLES BEING PARKED ON FRONT LAWN","locationNotes": null,"latitude": 28.584735,"longitude": -81.443687,"dataSource": "City of Orlando Code Enforcement via data.cityoforlando.net"}
Canary input
{ "maxItems": 5 }
Expected: the run ends Complete: 5 of N matched row(s) delivered, capped at maxItems 5, with the 5 newest cases in the source.
Output fields
| Field | Meaning |
|---|---|
| caseNumber | Case number (apno), unique |
| caseType | Case type name as published (Housing, Lot, Zoning, ...) |
| caseTypeCode | Case type code (H, LOT, Z, ...) |
| violation | Case name / violation as published |
| status | Case status (Open, Closed, Lien, CEB, ENF, Foreclose) |
| stage | Current case stage as published |
| openedDate | Case opened date (YYYY-MM-DD) |
| resolvedDate | Resolved date (YYYY-MM-DD), null while open |
| daysToResolve | Days to resolve as published, null while open |
| address | Property address, null if the city publishes none |
| parcelId | Orange County parcel ID |
| propertyClass | Property use description |
| revenueClass | Dept. of Revenue class (RESIDENTIAL, COMMERCIAL, ...) |
| assessedValue | Assessed value as published |
| neighborhood | Neighborhood |
| commissionerDistrict | City commissioner district |
| commissioner | The district's elected city commissioner, as published by the city |
| source | How the case was reported (Staff, Citizen, ...) |
| comments | Case comments, free text written by city staff |
| locationNotes | Free-text location notes from city staff (e.g. a cross street when there is no address) |
| latitude / longitude | WGS84 coordinates converted from the city's state-plane values |
| dataSource | Provenance line, constant |
Use cases
- Real-estate investors / wholesalers: distressed-property data, e.g.
caseTypes: ["Housing", "Lot", "Abatement"],statuses: ["Open", "Lien", "CEB"]. - Contractors (roofing, lawn care, junk removal, pool repair):
textContains: "roof"orcaseTypes: ["Pool"]. - Property managers and researchers: case volume and time-to-resolve by neighborhood.
How to scrape Orlando code enforcement cases
- Click Try for free (or Start) on this page. A free Apify account is enough.
- Leave the prefilled input to get a quick sample, or set the filters described below.
- Set maxItems to cap how many rows (and how much) a run returns.
- Click Start and wait a few seconds to a minute.
- Download the results as JSON, CSV or Excel, or connect them to Google Sheets, Zapier, Make or a webhook.
Input
| Field | Description |
|---|---|
| caseSince | Optional real date, YYYY-MM-DD. Invalid dates fail fast with a clear message. Empty = all cases, newest first |
| caseTypes | Code or name, matched exactly (case-insensitive), see the case type table below. Other text of 4+ characters falls back to a partial name match (e.g. Towing); note partial text such as Zoni also matches Towing and Zoning Endpoints (DMV), so use Z or Zoning for regular zoning cases only |
| statuses | Open, Closed, Lien, CEB (Code Enforcement Board), ENF, Foreclose (rare, 2 cases). ~97% of cases are Closed |
| neighborhoods | e.g. Parramore, College Park. ~25-30% of recent cases have no neighborhood |
| textContains | Matches the violation name and case comments |
| excludeNoAddress | Default false. On drops cases with no street address: "No Address" and blank/whitespace-only addresses (mostly parking tickets, ~24% of recent cases). Many of these still carry locationNotes |
| maxItems | Default 200. Must be a whole number of 1 or more; 0, negatives and fractions fail the run with a clear message |
Case types (code / name as published, case count at the 2026-11-08 check)
| Code | Name | Cases | Notes |
|---|---|---|---|
Z | Zoning | 64,531 | |
LOT | Lot | 38,410 | overgrown lots, junk, debris |
H | Housing | 38,133 | |
TKT | Ticket | 34,142 | mostly parking tickets, often no address |
SGN | Sign | 30,125 | |
BUS + BTR | Business Tax Receipt | 19,635 + 11,834 | two codes for the same type; Business Tax Receipt returns both |
COU | Certificate of Use | 9,164 | |
DMV | Towing and Zoning Endpoints | 6,683 | towing / vehicle cases, not regular Zoning |
COMM | Commercial | 4,491 | |
A | Abatement | 2,387 | |
TREE | Tree | 1,788 | |
POOL | Pool | 776 | |
AMS | After Midnight Alcohol Sales | 277 |
Pricing (pay per event)
$3 per 1,000 cases ($0.003 each) plus Apify's minimal $0.00005 start fee. Example: 200 cases = 200 × $0.003 + $0.00005 ≈ $0.60; all cases from a typical month (~1,800-2,600, median ~2,000) ≈ $5.40-$7.80, about $6 at the median. If a run hits your max charge limit, it stops and reports PARTIAL with the rows it delivered.
Troubleshooting
- The run says PARTIAL and mentions stale data: the city's newest case is over 45 days old, so the feed may have stalled at the city. The rows delivered are still the newest the city has published.
- Zero matches: a healthy empty result reads
Complete: 0 row(s) matched your filters. Loosen the filters (case types match exactly; a misspelled type returns nothing). If the source itself were empty or its columns renamed, the run fails loudly and names the problem instead of reporting zero. - Rows with null fields: the city omits a field when it has no value (for example
resolvedDatewhile a case is open, orneighborhoodon about a quarter of cases). A null is the city's own record, not a scrape error. If a value arrives in a format the actor cannot parse (a non-ISO date, a currency-formatted value), it ships null and the run reports PARTIAL with the count. - Caps:
maxItemscaps delivered rows and is stated inside the status. The max charge limit stops a run early with a PARTIAL status; raisemaxTotalChargeUsdin the run options to get more rows. - Still stuck? If this keeps happening, please open an issue on this actor's Issues tab and we'll fix it fast.
Data caveats
Data is provided as published by the City of Orlando. address is the city's derived address with the trailing "ORLANDO FL" removed ("No Address" and city-only remnants become null). latitude/longitude (WGS84) are converted from the city's state-plane gpsx/gpsy (NAD83 Florida East, US feet, EPSG:2236); 0 or missing becomes null (about 76% of 2026 cases have coordinates). The city's own geocode column has been empty since 2022-05-18 and is only used as a fallback for older rows. locationNotes is free text from staff (e.g. a cross street or the address as reported). assessedValue, propertyClass and revenueClass come from the parcel record attached by the city. Case comments are free text written by staff about the property and the violation; they may contain abbreviations or typos and can occasionally mention people. commissioner is the elected city commissioner for the case's district, published by the city as part of the case record. A case is an allegation/inspection record, not proof of a violation; check the case status.
Changelog
- 0.2 (2026-11-08): deep-audit fix round. Added the core-column sentinel and per-row validation (a renamed source column now fails the run loudly instead of shipping hollow rows; off-format dates and values ship null and are counted, never silently wrong); the Complete/PARTIAL status contract with delivered/matched/scanned counts and the source's newest case date on every status; a freshness check (PARTIAL when the newest case is over 45 days old); the fleet retry standard; explicit maxItems parsing. Refreshed the case counts and freshness notes to the 2026-11-08 source check.
- 0.1: first release.
License and disclaimer
Source: City of Orlando Open Data (public records). This actor uses only the official public open-data API and is not affiliated with or endorsed by the City of Orlando.
FAQ
How much does it cost to scrape Orlando code enforcement cases?
You pay $0.003 per result ($3 per 1,000) plus a $0.00005 start fee, and nothing else. That is the free-plan price: on paid Apify plans you pay less per result (Bronze 10%, Silver 20%, Gold and above 30% off). Apify's free plan includes $5 of monthly credit, which covers about 1,600 results. See Pricing above for a worked example.
Is it legal to scrape Orlando code enforcement cases?
This Actor reads public records from the City of Orlando via the official open-data API, using only public endpoints (no login, no CAPTCHA bypass, no private accounts). See the source/license section above for the dataset's terms. You are responsible for how you use the data; this is not legal advice.
How fresh is the data?
Each run reads the source live, so you get whatever the agency has published at that moment. How often the agency updates, and any known lag, is described in the data caveats/notes section above.
Can I use it via API, on a schedule, or with Google Sheets?
Yes. Every Apify Actor has a REST API and client libraries for Python and JavaScript. You can schedule daily or weekly runs, and send results to Google Sheets, Slack, Zapier, Make, n8n, webhooks, or an AI agent via the Apify MCP server.
I need another city, county or field. Can you add it?
Open an issue on the Issues tab with the city or data source you need. We build new public-records scrapers regularly.
More public-records scrapers by Groundplanes
Same clean output, pay-per-result pricing and official public data sources:
Restaurant & food inspections
- Maricopa County (Phoenix) Restaurant Inspections Scraper
- Las Vegas Restaurant Inspections & Grades Scraper (SNHD)
- Pittsburgh Restaurant Inspections Scraper (Allegheny County)
- Delaware Restaurant Inspections Scraper — Statewide Violations
- Boulder CO Restaurant Inspections Scraper — 2013–2026 Snapshot
- Montgomery County MD Restaurant & Food Inspections Scraper
- NY State Restaurant Inspections Scraper — NYSDOH, Non-NYC
- Boston Restaurant Inspections Scraper — Health Violations
- Santa Clara County Restaurant Inspections Scraper — San Jose
Code violations & distressed property leads
- Pittsburgh Code Violations Scraper — Distressed Property Leads
- New Orleans Code Violations Scraper — Code Enforcement Leads