# Florida Assisted Living Facility Inspections (`kingly_contest_7cb/florida-assisted-living-inspections`) Actor

Every licensed Florida assisted living facility (ALF) from the public AHCA FloridaHealthFinder records, with ECC, LNS and LMH specialty licenses, memory care, beds, inspection dates, deficiencies by class, sanctions and fines. Facts only, with a link to each official record.

- **URL**: https://apify.com/kingly_contest_7cb/florida-assisted-living-inspections.md
- **Developed by:** [Carina Hatton](https://apify.com/kingly_contest_7cb) (community)
- **Categories:** Lead generation, Business, Real estate
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 facilities

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Florida Assisted Living Facility (ALF) Inspections Scraper

Florida licenses about 3,000 assisted living facilities, and the state publishes a lot about each one: the license, bed counts, specialty licenses, inspection visits, every cited deficiency and its class, fines and sanctions. The problem is that it's spread across two state websites, one facility at a time. This Actor pulls it into one clean dataset, with one row per facility and the inspection history nested inside.

Everything comes from the Florida Agency for Health Care Administration (AHCA). Each record links back to the official state pages it came from.

### What you get

| Field group | Examples |
|---|---|
| Identity | AHCA file number, license number, facility name, license status, license dates, for-profit / not-for-profit |
| Location | street, city, ZIP, county, latitude/longitude, facility phone, website |
| Capacity | licensed capacity, ECC beds, OSS (Optional State Supplement) beds, private-pay beds, private and semi-private rooms |
| Specialty licenses | Extended Congregate Care (ECC), Limited Nursing Services (LNS), Limited Mental Health (LMH), as true/false flags and a list |
| Services | memory care, special programs, nurse availability, Medicaid services, payment forms accepted, languages, emergency power source |
| Ownership | licensee (business entities only), management company |
| Inspections | every survey visit in your window: date, type (standard, complaint, follow-up and so on), track ID, deficiencies cited |
| Deficiencies | survey date, tag (e.g. A0081), class (I to IV or unclassified), short requirement title, correction date |
| Enforcement | AHCA's deficiency counts by class, complaint count, sanction count, total fines, active emergency action, and legal sanctions with case number, type, dates, fine and status |
| Source | profile URL, inspections URL, attribution, scrape timestamp |

All dates are ISO (`YYYY-MM-DD`).

### Who it's for

- **Senior living referral agencies and placement advisors** who need to check a facility's record before recommending it
- **Elder law attorneys and care managers** doing due diligence
- **Operators, investors and brokers** sizing up competitors or acquisition targets by county
- **Vendors** (pharmacy, staffing, therapy, software) building target lists of ECC, LNS or memory care facilities
- **Journalists and researchers** tracking enforcement across the state

### Input

```json
{
  "counties": ["Hillsborough", "Pinellas"],
  "memoryCareOnly": false,
  "specialtyLicenses": ["ECC"],
  "includeInspections": true,
  "inspectionYears": 5,
  "maxFacilities": 0,
  "requestDelaySecs": 1.5
}
```

- **counties**: county names as AHCA writes them (`Miami-Dade`, `St. Johns`, `Palm Beach`). Leave empty for the whole state.
- **memoryCareOnly**: only facilities that list Memory Care as a special program.
- **specialtyLicenses**: any of `ECC`, `LNS`, `LMH`. A facility is kept if it holds at least one.
- **includeInspections**: turn off for a fast roster-only run (no deficiency charges).
- **inspectionYears**: how far back to go. `5` matches the window AHCA uses for its own counts. `0` returns everything back to 2008.
- **maxFacilities**: handy for a quick trial. `0` means no limit.
- **requestDelaySecs**: a polite pause between requests to the state sites (minimum 1 second).

### Output

One item per facility (shortened):

```json
{
  "file_number": "11969128",
  "license_number": "13208",
  "facility_name": "ANGEL VISION BONIFAY LLC",
  "license_status": "LICENSED",
  "license_expiration_date": "2027-10-20",
  "street": "108 WAGNER ROAD",
  "city": "BONIFAY",
  "zip": "32425",
  "county": "Holmes",
  "licensed_capacity": 18,
  "oss_beds": 16,
  "specialty_licenses": ["Limited Mental Health"],
  "has_ecc_license": false,
  "has_lns_license": false,
  "has_lmh_license": true,
  "memory_care_offered": false,
  "nurse_availability": ["Direct 24hr"],
  "ahca_class2_deficiencies": 5,
  "inspection_count": 17,
  "most_recent_inspection_date": "2026-09-10",
  "deficiency_count": 29,
  "deficiencies": [
    {
      "survey_date": "2026-02-18",
      "inspection_type": "Complaint",
      "track_id": "KIGJ",
      "deficiency_tag": "A0081",
      "deficiency_class": "3",
      "requirement": "TRAINING - STAFF IN-SERVICE",
      "correction_date": "2026-09-10"
    }
  ],
  "profile_url": "https://quality.healthfinder.fl.gov/Facility-Provider/Profile/?LID=393776",
  "inspections_url": "https://apps.ahca.myflorida.com/dm_web/facility_inspection_details.aspx?client_code=11&file_number=11969128&provider_type=Assisted%20Living%20Facility",
  "source_attribution": "Source: Florida Agency for Health Care Administration ..."
}
```

The **Facilities** table view in the Console shows the key columns. Download as JSON, CSV or Excel. In CSV, the nested lists are flattened into columns.

### Pricing

Pay per result:

| Event | Price |
|---|---|
| Facility | $0.01 |
| Deficiency (inside your inspection window) | $0.0025 |

Some examples:

- One county with 50 facilities and about 400 deficiencies costs about **$1.50**.
- The whole state with a 5-year window (about 3,000 facilities and 25,000 deficiencies) costs about **$93**.
- The whole state as a roster only, with inspections turned off, costs about **$30**.

You can set a maximum charge per run in Apify, and the Actor stops cleanly when it reaches that cap.

### Data sources and compliance

- [FloridaHealthFinder](https://quality.healthfinder.fl.gov/) facility list and profiles (AHCA)
- [AHCA facility inspection details](https://apps.ahca.myflorida.com/dm_web/) (AHCA)

This is public information published by the State of Florida. The Actor reads public pages only, with no login, at a slow fixed pace (one request at a time, with a pause between requests by default). It stores **facts only**. It keeps the deficiency tag, class and the state's short requirement title, but not the long statute or rule text. It doesn't store personal names: administrators, officers and individual owners are left out, and the licensee is kept only when it's a business entity. This dataset is not endorsed by AHCA or the State of Florida. Please check anything important against the linked state record.

### Limits

- A full-state run with inspections makes about 6,000 to 9,000 polite requests and takes roughly 3 to 4 hours. Use county filters for quick pulls.
- AHCA's own deficiency counts (the `ahca_*` fields) cover AHCA's reporting window. `deficiency_count` covers the window you choose, so the two can differ.
- Survey header rows such as "INITIAL COMMENTS" are not counted as deficiencies.
- If a state site is down, the facility is still returned with `inspections_complete: false` so you can rerun just those.

### Updates and support

AHCA updates these records continuously. Run the Actor on a schedule (weekly or monthly) to keep your copy fresh. Found a field that looks wrong, or need another state? Open an issue on the Actor's Issues tab.

# Actor input Schema

## `counties` (type: `array`):

Florida county names as AHCA writes them (e.g. Alachua, Miami-Dade, Hillsborough, St. Johns). Leave empty or use \["ALL"] for the whole state (about 3,000 facilities).

## `memoryCareOnly` (type: `boolean`):

Only return facilities that list Memory Care among their special programs on FloridaHealthFinder.

## `specialtyLicenses` (type: `array`):

Optional. Only return facilities holding at least one of these specialty licenses: ECC (Extended Congregate Care), LNS (Limited Nursing Services), LMH (Limited Mental Health).

## `includeInspections` (type: `boolean`):

Read each facility's AHCA inspection history (survey dates, deficiency tags and classes, correction dates). Turn off for a faster roster-only run.

## `inspectionYears` (type: `integer`):

How many years of inspections to include. 0 means everything AHCA publishes (back to 2008).

## `maxFacilities` (type: `integer`):

Stop after this many facilities. 0 means no limit.

## `requestDelaySecs` (type: `number`):

A polite pause between requests to the state sites. The minimum is 1.

## Actor input object example

```json
{
  "counties": [
    "Alachua"
  ],
  "memoryCareOnly": false,
  "specialtyLicenses": [],
  "includeInspections": true,
  "inspectionYears": 5,
  "maxFacilities": 0,
  "requestDelaySecs": 1.5
}
```

# Actor output Schema

## `facilities` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "counties": [
        "Alachua"
    ],
    "specialtyLicenses": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("kingly_contest_7cb/florida-assisted-living-inspections").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "counties": ["Alachua"],
    "specialtyLicenses": [],
}

# Run the Actor and wait for it to finish
run = client.actor("kingly_contest_7cb/florida-assisted-living-inspections").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "counties": [
    "Alachua"
  ],
  "specialtyLicenses": []
}' |
apify call kingly_contest_7cb/florida-assisted-living-inspections --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kingly_contest_7cb/florida-assisted-living-inspections"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mVY0OmChmAeY34aCs/builds/Fe1Yqji9D2jqLIPmh/openapi.json
