Broward County FL Property Records MCP – Owners, Sales & Taxes avatar

Broward County FL Property Records MCP – Owners, Sales & Taxes

Pricing

from $2.00 / 1,000 mcp tool calls

Go to Apify Store
Broward County FL Property Records MCP – Owners, Sales & Taxes

Broward County FL Property Records MCP – Owners, Sales & Taxes

MCP server for Broward County, Florida property records from the Property Appraiser (BCPA): search by owner, address or folio; pull parcel details with values, exemptions and sales history; find sales comps; search commercial, land, subdivision and tangible accounts; estimate property taxes.

Pricing

from $2.00 / 1,000 mcp tool calls

Rating

0.0

(0)

Developer

R.L.

R.L.

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

0

Monthly active users

2 hours ago

Last modified

Share

Give your AI agent instant access to Broward County, Florida property records. This Model Context Protocol (MCP) server turns the Broward County Property Appraiser (BCPA) database into clean, ready-to-use tools for property search, owner lookup, parcel details, sales comps, and property-tax estimates β€” no scraping, HTML parsing, or bot-handling on your side.

Ask Claude, Cursor, or any MCP-compatible agent things like "who owns 1800 N Andrews Ave?", "pull the full record for folio 494234AJ0750", or "list qualified residential sales in Fort Lauderdale over $500k last June" β€” and get back normalized JSON with owners, addresses, assessed/market values, exemptions, and full sales history.

Running on the Apify platform, it comes with a hosted HTTPS endpoint, standby mode, US proxy rotation, scheduling, and monitoring out of the box.

What does this Broward County property MCP server do?

It's a remote MCP server that exposes the entire Broward County Property Appraiser record search β€” every vertical the public site offers β€” as agent tools over Streamable HTTP. Under the hood it calls BCPA's ASP.NET JSON API directly (fast HTTP, no browser), normalizes the raw responses, and collapses indexed sales-history fields into tidy arrays, so your agent gets structured data instead of scraped HTML.

Why use a Broward County property records MCP server?

  • Real-estate lead generation β€” owner names, mailing addresses, and values across all of Broward County.
  • Comparable sales & market analysis β€” filter recorded sales by property type, date range, price, and beds/baths.
  • Skip tracing & due diligence β€” mailing addresses, legal descriptions, homestead/exemption status.
  • Property-tax estimation β€” annual tax from a taxable value and municipality millage rate.
  • Drop-in agent tooling β€” no scraper to build or maintain; just point your LLM at the endpoint.

Which MCP tools does this server expose?

ToolWhat it does
search_propertiesSearch by owner name, address, or folio (optional city filter, pagination).
get_parcel_detailsFull record for a folio: owners, site & mailing address, legal description, zoning, use code, assessed/market/land/building values, exemptions, and sales history.
suggest_addressesAutocomplete owner/address strings to build a precise query.
search_salesRecorded sales comps by type, date range, price, beds/baths, qualified-only.
search_commercialCommercial properties by use code + city.
search_landLand parcels by use code + city.
search_subdivisionFind subdivision names, or list all parcels within a subdivision.
search_timeshareList time-share properties.
search_tangibleTangible Personal Property (business) accounts by name or address.
estimate_taxesEstimate annual property tax from a taxable value using the current millage rate.
list_commercial_cities / list_commercial_use_codesReference lists for the commercial/land searches.

A static millage-codes resource (bcpa://reference/millage-codes) maps each Broward municipality to its Tax Estimator code.

How do I connect it to my AI agent?

The server speaks Streamable HTTP at:

https://<YOUR_USERNAME>--broward-fl-real-estate-mcp.apify.actor/mcp

Authenticate with your Apify API token as a Bearer header. Find both in the Apify Console:

  • Endpoint β†’ the Actor's API / Standby tab.
  • Token β†’ Settings β†’ API & Integrations.
Authorization: Bearer <YOUR_APIFY_TOKEN>

Pick your client below (replace <YOUR_USERNAME> and <YOUR_APIFY_TOKEN>):

Claude Code

claude mcp add broward-real-estate \
--transport http \
https://<YOUR_USERNAME>--broward-fl-real-estate-mcp.apify.actor/mcp \
--header "Authorization: Bearer <YOUR_APIFY_TOKEN>"

Claude Desktop

Edit claude_desktop_config.json (Settings β†’ Developer β†’ Edit Config). Claude Desktop bridges to remote servers via mcp-remote:

{
"mcpServers": {
"broward-real-estate": {
"command": "npx",
"args": [
"mcp-remote",
"https://<YOUR_USERNAME>--broward-fl-real-estate-mcp.apify.actor/mcp",
"--header",
"Authorization: Bearer <YOUR_APIFY_TOKEN>"
]
}
}
}

Cursor

Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (per project):

{
"mcpServers": {
"broward-real-estate": {
"url": "https://<YOUR_USERNAME>--broward-fl-real-estate-mcp.apify.actor/mcp",
"headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
}
}
}

VS Code (GitHub Copilot)

Add to .vscode/mcp.json:

{
"servers": {
"broward-real-estate": {
"type": "http",
"url": "https://<YOUR_USERNAME>--broward-fl-real-estate-mcp.apify.actor/mcp",
"headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
}
}
}

Windsurf / other MCP clients

Most clients accept a serverUrl (or url) plus a headers object β€” use the endpoint and Authorization header above. For stdio-only clients, wrap it with npx mcp-remote <url> --header "Authorization: Bearer <YOUR_APIFY_TOKEN>" as shown for Claude Desktop.

Python (programmatic)

import asyncio
from fastmcp import Client
URL = "https://<YOUR_USERNAME>--broward-fl-real-estate-mcp.apify.actor/mcp"
async def main():
async with Client(URL, auth="<YOUR_APIFY_TOKEN>") as client:
hits = await client.call_tool("search_properties", {"query": "1800 N ANDREWS AVE"})
folio = hits.structured_content["results"][0]["folioNumber"]
parcel = await client.call_tool("get_parcel_details", {"folio": folio})
print(parcel.structured_content)
asyncio.run(main())

What does a Broward parcel record contain?

search_* tools return { "total": N, "results": [...] }. Feed a folioNumber into get_parcel_details for the full record β€” owners, site and mailing address, use code, legal description, zoning, millage code, year built, units, beds/baths, building square footage, the value block, every exemption, the land-calculation rows, a picture path, and a sales history where each sale carries a documentUrl deep link to the recorded deed in Broward Official Records:

{
"found": true,
"folioNumber": "494234AJ0750",
"owners": ["AVILES,WILSON", "WILSON AVILES REV TR"],
"siteAddress": { "line1": "1800 N ANDREWS AVENUE # 8A", "city": "FORT LAUDERDALE", "zip": "33311" },
"useCode": "04 - Condominium",
"legal": "DRAKE TOWER CONDO UNIT 8A ...",
"values": { "just": "$315,620", "land": "$31,560", "building": "$284,060" },
"exemptions": { "homesteadPercent": "100%", "he1Amount": "$25,000" },
"sales": [
{ "saleDate": "04/09/2019", "stampAmount": "$100", "deedType": "Warranty Deed",
"bookAndPageOrCin": "115730117", "saleVerification": "Non-Sale Title Change" }
]
}

Which Broward municipalities are covered?

Every municipality in Broward County. The tax estimator maps each one to its BCPA millage code, and the same list is served as the bcpa://reference/millage-codes resource β€” pass a city from this table to estimate_taxes and the code is looked up for you:

MunicipalityCodeMunicipalityCodeMunicipalityCode
Coconut Creek3212Lauderdale Lakes2012Parkland3012
Cooper City1013Lauderhill1912Pembroke Park0613
Coral Springs2812Lazy Lake1812Pembroke Pines2613
Dania Beach0413Lighthouse Point1411Plantation2212
Davie2412Margate1212Pompano Beach1511
Deerfield Beach1112Miramar2713Sea Ranch Lakes1611
Fort Lauderdale0312North Lauderdale2912Southwest Ranches3413
Hallandale Beach2513Oakland Park1712Sunrise2112
Hillsboro Beach1311Tamarac3112Weston3312
Hollywood0513West Park3513Wilton Manors0912
Lauderdale-by-the-Sea0211Unincorporated0012

Property and sales searches are not limited to this list β€” it is the millage lookup for estimate_taxes. Commercial and land searches take BCPA's own city ids, which list_commercial_cities returns.

What do these Broward property terms mean?

  • Folio number β€” BCPA's 12-character parcel ID (e.g. 494234AJ0750). It is the key every search_* tool returns as folioNumber and that get_parcel_details takes.
  • Just value β€” the Property Appraiser's estimate of market value as of January 1. values.just in the output; values.justPriorYear is last year's for comparison.
  • Assessed (SOH) value β€” the value after Florida's Save Our Homes cap, which limits annual assessment growth on homesteaded property. Returned as values.assessedSOH, and it is usually lower than just value.
  • Homestead exemption β€” Florida's primary-residence exemption, reported as exemptions.homesteadFlag, homesteadPercent, and the he1Amount / he2Amount bands.
  • Portability β€” homestead savings carried from a previous Florida home, in exemptions.portabilityValue.
  • Millage rate β€” tax per $1,000 of taxable value. estimate_taxes returns the rate, its year, and taxableValue * rate / 1000.
  • Qualified sale β€” an arm's-length transaction BCPA considers usable as a comparable. search_sales filters to these by default (qualified_only: true); turn it off to see quitclaims, family transfers and other non-market changes of title.
  • Tangible Personal Property (TPP) β€” business equipment, furniture and fixtures, assessed separately from real estate. search_tangible covers these accounts.

How much does this MCP server cost?

This Actor uses Pay Per Event: a flat $0.01 per tool call (tool-call event), plus Apify platform compute. A typical search β†’ open a record flow is two tool calls (about $0.02) plus minimal compute. There are no per-page scraping costs. Search tools are paginated with page / page_size; BCPA caps any single response at 500 rows, which the server fetches once and slices locally, so paging through a result set does not re-hit the source.

How do I run it locally for development?

pip install -r requirements.txt
# This machine may not reach BCPA directly; route via a US-exit proxy for local dev:
export DEV_PROXY_URL='http://user:pass@host:port'
APIFY_META_ORIGIN=STANDBY python -m my_actor

The server listens at http://localhost:3000/mcp. On the Apify platform, DEV_PROXY_URL is unset and the Actor calls BCPA directly, falling back to an Apify US datacenter proxy if a datacenter IP is blocked. See tests/ for a browser-vs-MCP differential test suite that validates output against the live BCPA site.

FAQ

Do I need a BCPA account or API key? No. BCPA publishes these records without a login. You need an Apify account for the endpoint URL and API token β€” a free one is enough to start.

What area does it cover? Broward County, Florida only, including all 31 municipalities in the table above plus unincorporated Broward. For Florida corporate filings rather than property, see the companion Florida Business Registry MCP Server.

Can I look up who owns an address? Yes β€” search_properties takes an owner name, a street address, or a folio, and returns folioNumber plus owner and address for each hit. Use suggest_addresses first if you only have a partial string.

Does it return sales history and the actual deeds? Yes. get_parcel_details returns every recorded sale with date, stamp amount, deed type, book/page or CIN, and BCPA's sale verification β€” and each sale includes a documentUrl deep link to the recorded document in Broward Official Records.

How do I find comparable sales? search_sales filters recorded sales by property type, sub-type, date range, price range, minimum beds and baths, and location, sorted by date or price. It returns only qualified (arm's-length) sales unless you set qualified_only: false.

How is cost bounded? A flat $0.01 per tool call, so a session costs exactly the number of searches and lookups your agent makes. Result-set size does not change the price, and paging through a cached result set does not re-hit BCPA.

Which MCP clients work with it? Any Streamable HTTP client β€” Claude Code, Claude Desktop (via mcp-remote), Cursor, VS Code Copilot, Windsurf β€” or FastMCP from Python. Configuration for each is above.

Are the values official? They are BCPA's tax-roll figures, read from the same source the public site serves. They are for tax-roll purposes and are not final until certified. Use the data in accordance with BCPA's terms and Florida public-records law.

Found a bug or need a custom data feed? Open an issue on the Actor's Issues tab.

Resources

Did you find this useful?

Rate this actor on Apify! Your feedback helps other users find it and helps us keep improving it.