# HUD FHA-Approved Condominium Projects (`tehsnarf/hud-fha-approved-condominiums`) Actor

Scrapes HUD's FHA-approved condominium project list (HRAP/DELRAP approval data) by state, with approval status, expiration date, and project composition.

- **URL**: https://apify.com/tehsnarf/hud-fha-approved-condominiums.md
- **Developed by:** [Chris Hoover](https://apify.com/tehsnarf) (community)
- **Categories:** Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## HUD FHA-Approved Condominium Projects

Scrapes HUD's official FHA-Approved Condominium Projects list (HRAP/DELRAP approval database) by
state, returning every matching condo project's approval status, expiration date, project
composition, and location fields — normalized into a clean dataset.

### Use cases

- **Mortgage lender pre-screening** — quickly check whether a condo project is FHA-approved before
  underwriting a buyer's loan.
- **Buyer's agent / condo eligibility checks** — confirm a listing's FHA eligibility for
  low-down-payment buyers without manually searching HUD's legacy web form.
- **Approval-expiration monitoring** — track condo projects with approvals nearing expiration
  (`expirationDate`) for renewal outreach or portfolio risk review.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `states` | array | `["CA"]` | 2-letter state codes to search. Leave empty for one combined "All States" search. |
| `statusCode` | string | `A` | `X`=All, `A`=Approved, `E`=Expired, `R`=Rejected, `W`=Withdrawn |
| `maxItems` | integer | 100 | Max total records across all state searches |
| `delaySeconds` | number | 1.5 | Polite delay before each page-fetch request |
| `concurrency` | integer | 3 | How many state searches run concurrently |

### Output fields

| Field | Description |
|---|---|
| condoName | Condominium project name |
| condoId | HUD condo ID (e.g. S009020) |
| phase | Submission/phase number |
| address | Full street address |
| city / state / zip | Parsed from address |
| county | County name |
| projectComposition | Free-text project composition / HOA name |
| manufacturedHousing | Yes/No flag |
| fhaConcentration | FHA concentration percentage |
| approvalMethod | HRAP / DELRAP / NEW |
| documentStatus | e.g. "Recorded/ Uploaded" |
| status | Approved / Expired / Rejected / Withdrawn |
| comments | "Exists" (has a linked comment) or "None" |
| statusDate | Status date (MM/DD/YYYY) |
| expirationDate | Expiration date (MM/DD/YYYY), with a "(nearing expiration)" note when HUD flags it |
| detailUrl | Full URL to the condo's HUD detail page |
| searchState / searchStatusCode | Search parameters used for this record |
| sourceTimestamp | ISO timestamp this record was retrieved |

### Example output

```json
{
  "condoName": "MARLYN CONDOMINIUM",
  "condoId": "P015284",
  "phase": "001",
  "address": "3901 CATHEDRAL AVE NW WASHINGTON, DC 20016",
  "city": "WASHINGTON",
  "state": "DC",
  "zip": "20016",
  "county": "DISTRICT OF COLUMBIA",
  "projectComposition": "121 units",
  "manufacturedHousing": "No",
  "fhaConcentration": "4.95%",
  "approvalMethod": "HRAP",
  "documentStatus": "Recorded/ Uploaded",
  "status": "Approved",
  "comments": "None",
  "statusDate": "08/30/2024",
  "expirationDate": "08/30/2027",
  "detailUrl": "https://entp.hud.gov/idapp/html/f17condo-maint.cfm?key=P015284&phase=001&mode=Q&came_from=oth",
  "searchState": "DC",
  "searchStatusCode": "A",
  "sourceTimestamp": "2026-08-13T08:33:19.543117+00:00"
}
```

### Pricing

$3.00 per 1,000 results.

| Results | Cost |
|---|---|
| 100 | $0.30 |
| 500 | $1.50 |
| 1,000 | $3.00 |
| 5,000 | $15.00 |

### Notes

- HUD's condo search is a legacy ColdFusion form: a session cookie is issued per search, and
  pagination is a stateful multi-page POST flow (not simple query-string links). This actor
  replicates that flow directly via `httpx`, no browser required.
- Search results are public HUD program data — no login, no personal data. Properties listed here
  are approval records, not for-sale listings.

# Actor input Schema

## `states` (type: `array`):

2-letter state codes to search (e.g. CA, TX). Leave empty to search All States in one combined query.

## `statusCode` (type: `string`):

X=All, A=Approved, E=Expired, R=Rejected, W=Withdrawn

## `maxItems` (type: `integer`):

Maximum total number of condo project records to scrape across all state searches

## `delaySeconds` (type: `number`):

Polite delay each fetch waits before requesting a page

## `concurrency` (type: `integer`):

How many state searches to run concurrently (pages within one state are fetched sequentially since pagination is stateful)

## Actor input object example

```json
{
  "states": [
    "CA"
  ],
  "statusCode": "A",
  "maxItems": 100,
  "delaySeconds": 1.5,
  "concurrency": 3
}
```

# Actor output Schema

## `results` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("tehsnarf/hud-fha-approved-condominiums").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("tehsnarf/hud-fha-approved-condominiums").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 '{}' |
apify call tehsnarf/hud-fha-approved-condominiums --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tehsnarf/hud-fha-approved-condominiums"
        }
    }
}

```

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/PVu6KimDHjlvMVOB3/builds/novNUmr1xGKWjuHNr/openapi.json
