# Tax Sale & Foreclosure Monitor — 170 Counties, No Login (`outstanding_vegetable/tax-sale-monitor-southeast`) Actor

Watch 216 RealAuction tax deed, tax lien and foreclosure portals in 170 counties (FL, OH, CO, AZ, MD, NJ, NY, NE) and get only NEW or changed listings: parcel, address, appraised value, opening bid, sale date. Daily schedule. No login. MCP-ready. $20 per 1,000 alerts.

- **URL**: https://apify.com/outstanding\_vegetable/tax-sale-monitor-southeast.md
- **Developed by:** [Peter Skotte](https://apify.com/outstanding_vegetable) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 listings

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

## Tax Sale Monitor — RealAuction counties in 8 states, new listings daily

Get a **daily feed of only the new or changed tax deed, tax lien and foreclosure auction listings** from
every county that sells on the RealAuction platform: 46 Florida counties (Miami-Dade, Broward, Palm Beach,
Hillsborough, Orange, Duval, Pinellas, Lee, Polk and more), 88 Ohio sheriff portals (Franklin, Cuyahoga,
Hamilton, Summit, Montgomery, Lucas ...), Colorado public trustees (Denver, El Paso, Larimer, Weld, Mesa, Adams),
the Arizona treasurer deed and tax lien portals (Maricopa, Pima, Pinal, Yavapai, Mohave ...) and the RealTaxLien
certificate sales in Maryland, New Jersey, New York and Nebraska. **170 counties, 216 portals.**

Every record carries the sale date and time, case number, parcel number with a link to the county appraiser,
street address, assessed/appraised value, opening bid (or final judgment amount for foreclosures, face amount
for liens) and a Google Maps link. The monitor remembers every listing it has already reported, so a scheduled
run emits just the delta (`new` or `updated`), posts a summary to your webhook, and costs you only for what
actually changed.

Built for tax deed and tax lien investors, foreclosure buyers, wholesalers and title researchers who want every
county's list the day it is posted, without logging in to 216 bidder portals.

Texas counties are covered by the companion **Texas Tax Sale Monitor** actor.

### How it works

1. For each county in `counties` (plus every county of each state in `states`) the actor reads the RealAuction
   auction calendar for the current month and the next two, and the "Preview Items for Sale" list on the
   RealTaxLien portals.
2. Every scheduled sale day whose type is in `saleTypes` is loaded item by item (the same list a bidder sees
   before the auction opens).
3. Listings are filtered by `minBid` / `maxBid` and compared with the monitor's saved state
   (`county + sale type + case/certificate + parcel`).
4. A record is emitted when the listing is unseen (`changeType: "new"`) or when its **sale date, opening bid or
   status** changed since it was last reported (`changeType: "updated"`).
5. The state is saved and a run summary is POSTed to `webhookUrl` if set.

State lives in a named key-value store `taxsale-se-monitor-<hash of monitorId>` in your Apify account, capped
at 50,000 listings (oldest are dropped). Delete the store to reset a monitor.

### Sale types

| `saleTypes` value | What it is | Where |
|---|---|---|
| `tax-deed` | Tax deed / treasurer deed sales: the property itself is sold for unpaid taxes; the opening bid is the tax debt plus costs | Florida clerks, Arizona treasurers |
| `foreclosure` | Court-ordered sales: mortgage foreclosures and treasurer tax foreclosures; the record carries the final judgment amount (Florida) or the appraised value and 2/3 opening bid (Ohio) | Florida clerks, Ohio sheriffs, Colorado public trustees |
| `tax-lien` | Tax certificate / lien sales: the lien (not the property) is auctioned; the record carries the face amount and the parcel | Arizona, Colorado, Maryland, New Jersey, New York, Nebraska treasurers |

A county with no sale scheduled in the next three months simply returns zero listings until its next list is
posted. Tax lien portals are empty outside their annual sale window unless the treasurer publishes a
county-held (over-the-counter) certificate list; the run log says which.

### County coverage

`counties` accepts the keys below, or names such as `"Miami-Dade, FL"`, `"Palm Beach County FL"`, `"FL Hillsborough"`
or a bare `"cuyahoga"` when the name is unique. `states` accepts `["FL", "OH"]` and adds every county of those states.
Unknown or ambiguous names are skipped with a warning.

#### Arizona (9 counties)

Tax deed (treasurer deed) sales are irregular, a few times a year. The tax lien portals fill for the annual February certificate sale and show county-held (over-the-counter) certificates the rest of the year where the treasurer publishes them.

| `counties` key | County | Portals | Sale types |
|---|---|---|---|
| `az-apache` | Apache | apache.arizonataxsale.com, apache.realtaxdeed.com | tax-deed, tax-lien |
| `az-coconino` | Coconino | coconino.arizonataxsale.com, coconino.realtaxdeed.com | tax-deed, tax-lien |
| `az-maricopa` | Maricopa | maricopa.arizonataxsale.com | tax-lien |
| `az-mohave` | Mohave | mohave.arizonataxsale.com, mohave.realtaxdeed.com | tax-deed, tax-lien |
| `az-navajo` | Navajo | navajo.arizonataxsale.com | tax-lien |
| `az-pima` | Pima | pima.arizonataxsale.com | tax-lien |
| `az-pinal` | Pinal | pinal.arizonataxsale.com | tax-lien |
| `az-santacruz` | Santa Cruz | santacruz.arizonataxsale.com | tax-lien |
| `az-yavapai` | Yavapai | yavapai.arizonataxsale.com | tax-lien |

#### Colorado (16 counties)

Public trustee foreclosure sales run weekly (usually Wednesdays); the tax lien portals fill only for the annual October-November certificate sale.

| `counties` key | County | Portals | Sale types |
|---|---|---|---|
| `co-adams` | Adams | adams.coloradotaxsale.com, adams.realforeclose.com | foreclosure, tax-lien |
| `co-arapahoe` | Arapahoe | arapahoe.coloradotaxsale.com | tax-lien |
| `co-archuleta` | Archuleta | archuleta.coloradotaxsale.com | tax-lien |
| `co-denver` | Denver | denver.coloradotaxsale.com, denver.realforeclose.com | foreclosure, tax-lien |
| `co-eagle` | Eagle | eagle.coloradotaxsale.com, eagle.realforeclose.com | foreclosure, tax-lien |
| `co-elpaso` | El Paso | elpaso.coloradotaxsale.com, elpasoco.realforeclose.com | foreclosure, tax-lien |
| `co-garfield` | Garfield | garfield.coloradotaxsale.com | tax-lien |
| `co-grand` | Grand | grand.coloradotaxsale.com | tax-lien |
| `co-laplata` | La Plata | laplata.coloradotaxsale.com | tax-lien |
| `co-larimer` | Larimer | larimer.coloradotaxsale.com, larimer.realforeclose.com | foreclosure, tax-lien |
| `co-mesa` | Mesa | mesa.coloradotaxsale.com, mesa.realforeclose.com | foreclosure, tax-lien |
| `co-park` | Park | park.coloradotaxsale.com | tax-lien |
| `co-pitkin` | Pitkin | pitkin.coloradotaxsale.com | tax-lien |
| `co-routt` | Routt | routt.coloradotaxsale.com | tax-lien |
| `co-summit` | Summit | summit.coloradotaxsale.com, summit.realforeclose.com | foreclosure, tax-lien |
| `co-weld` | Weld | weld.coloradotaxsale.com, weld.realforeclose.com | foreclosure, tax-lien |

#### Florida (46 counties)

Tax deed sales run monthly to weekly per county (Miami-Dade and Broward hold several per month); foreclosure sales run most weekdays in the large counties. Lists appear on the calendar 2-6 weeks ahead.

| `counties` key | County | Portals | Sale types |
|---|---|---|---|
| `fl-alachua` | Alachua | alachua.realforeclose.com, alachua.realtaxdeed.com | foreclosure, tax-deed |
| `fl-baker` | Baker | baker.realforeclose.com, baker.realtaxdeed.com | foreclosure, tax-deed |
| `fl-bay` | Bay | bay.realforeclose.com, bay.realtaxdeed.com | foreclosure, tax-deed |
| `fl-brevard` | Brevard | brevard.realforeclose.com | foreclosure |
| `fl-broward` | Broward | broward.realforeclose.com, broward.realtaxdeed.com | foreclosure, tax-deed |
| `fl-calhoun` | Calhoun | calhoun.realforeclose.com | foreclosure |
| `fl-charlotte` | Charlotte | charlotte.realforeclose.com | foreclosure |
| `fl-citrus` | Citrus | citrus.realtaxdeed.com | tax-deed |
| `fl-clay` | Clay | clay.realforeclose.com, clay.realtaxdeed.com | foreclosure, tax-deed |
| `fl-duval` | Duval | duval.realforeclose.com, duval.realtaxdeed.com | foreclosure, tax-deed |
| `fl-escambia` | Escambia | escambia.realforeclose.com, escambia.realtaxdeed.com | foreclosure, tax-deed |
| `fl-flagler` | Flagler | flagler.realforeclose.com, flagler.realtaxdeed.com | foreclosure, tax-deed |
| `fl-gilchrist` | Gilchrist | gilchrist.realforeclose.com, gilchrist.realtaxdeed.com | foreclosure, tax-deed |
| `fl-gulf` | Gulf | gulf.realforeclose.com, gulf.realtaxdeed.com | foreclosure, tax-deed |
| `fl-hendry` | Hendry | hendry.realtaxdeed.com | tax-deed |
| `fl-hernando` | Hernando | hernando.realtaxdeed.com | tax-deed |
| `fl-highlands` | Highlands | highlands.realtaxdeed.com | tax-deed |
| `fl-hillsborough` | Hillsborough | hillsborough.realforeclose.com, hillsborough.realtaxdeed.com | foreclosure, tax-deed |
| `fl-indianriver` | Indian River | indianriver.realforeclose.com, indianriver.realtaxdeed.com | foreclosure, tax-deed |
| `fl-jackson` | Jackson | jackson.realforeclose.com, jackson.realtaxdeed.com | foreclosure, tax-deed |
| `fl-lake` | Lake | lake.realforeclose.com, lake.realtaxdeed.com | foreclosure, tax-deed |
| `fl-lee` | Lee | lee.realforeclose.com, lee.realtaxdeed.com | foreclosure, tax-deed |
| `fl-leon` | Leon | leon.realforeclose.com, leon.realtaxdeed.com | foreclosure, tax-deed |
| `fl-manatee` | Manatee | manatee.realforeclose.com | foreclosure |
| `fl-marion` | Marion | marion.realforeclose.com, marion.realtaxdeed.com | foreclosure, tax-deed |
| `fl-martin` | Martin | martin.realforeclose.com, martin.realtaxdeed.com | foreclosure, tax-deed |
| `fl-miamidade` | Miami-Dade | miami-dade.realforeclose.com, miami-dade.realtaxdeed.com | foreclosure, tax-deed |
| `fl-monroe` | Monroe | monroe.realtaxdeed.com | tax-deed |
| `fl-nassau` | Nassau | nassau.realforeclose.com, nassau.realtaxdeed.com | foreclosure, tax-deed |
| `fl-okeechobee` | Okeechobee | okeechobee.realforeclose.com, okeechobee.realtaxdeed.com | foreclosure, tax-deed |
| `fl-orange` | Orange | orange.realforeclose.com, orange.realtaxdeed.com | foreclosure, tax-deed |
| `fl-osceola` | Osceola | osceola.realforeclose.com, osceola.realtaxdeed.com | foreclosure, tax-deed |
| `fl-palmbeach` | Palm Beach | palmbeach.realforeclose.com, palmbeach.realtaxdeed.com | foreclosure, tax-deed |
| `fl-pasco` | Pasco | pasco.realforeclose.com, pasco.realtaxdeed.com | foreclosure, tax-deed |
| `fl-pinellas` | Pinellas | pinellas.realforeclose.com, pinellas.realtaxdeed.com | foreclosure, tax-deed |
| `fl-polk` | Polk | polk.realforeclose.com, polk.realtaxdeed.com | foreclosure, tax-deed |
| `fl-putnam` | Putnam | putnam.realforeclose.com, putnam.realtaxdeed.com | foreclosure, tax-deed |
| `fl-santarosa` | Santa Rosa | santarosa.realforeclose.com, santarosa.realtaxdeed.com | foreclosure, tax-deed |
| `fl-sarasota` | Sarasota | sarasota.realforeclose.com, sarasota.realtaxdeed.com | foreclosure, tax-deed |
| `fl-seminole` | Seminole | seminole.realforeclose.com, seminole.realtaxdeed.com | foreclosure, tax-deed |
| `fl-stjohns` | St. Johns | saintjohns.realforeclose.com, stjohns.realtaxdeed.com | foreclosure, tax-deed |
| `fl-stlucie` | St. Lucie | stlucie.realforeclose.com | foreclosure |
| `fl-suwannee` | Suwannee | suwannee.realforeclose.com, suwannee.realtaxdeed.com | foreclosure, tax-deed |
| `fl-volusia` | Volusia | volusia.realforeclose.com, volusia.realtaxdeed.com | foreclosure, tax-deed |
| `fl-walton` | Walton | walton.realforeclose.com | foreclosure |
| `fl-washington` | Washington | washington.realforeclose.com, washington.realtaxdeed.com | foreclosure, tax-deed |

#### Maryland (3 counties)

Annual tax lien certificate sale (May-June for most jurisdictions); the list appears a few weeks ahead.

| `counties` key | County | Portals | Sale types |
|---|---|---|---|
| `md-annearundel` | Anne Arundel | annearundel.marylandtaxsale.com | tax-lien |
| `md-baltimorecity` | Baltimore City | baltimorecity.marylandtaxsale.com | tax-lien |
| `md-frederick` | Frederick | frederick.marylandtaxsale.com | tax-lien |

#### Nebraska (1 counties)

Annual tax lien sale in March; list published a few weeks ahead.

| `counties` key | County | Portals | Sale types |
|---|---|---|---|
| `ne-douglas` | Douglas | douglas.nebraskataxsale.com | tax-lien |

#### New Jersey (6 counties)

Municipal tax lien sales, annual per municipality (dates vary); the list appears 3-4 weeks ahead.

| `counties` key | County | Portals | Sale types |
|---|---|---|---|
| `nj-camden` | Camden | camden.newjerseytaxsale.com | tax-lien |
| `nj-elizabeth` | Elizabeth | elizabeth.newjerseytaxsale.com | tax-lien |
| `nj-hardyston` | Hardyston | hardyston.newjerseytaxsale.com | tax-lien |
| `nj-newark` | Newark | newark.newjerseytaxsale.com | tax-lien |
| `nj-paterson` | Paterson | paterson.newjerseytaxsale.com | tax-lien |
| `nj-trenton` | Trenton | trenton.newjerseytaxsale.com | tax-lien |

#### New York (1 counties)

Annual tax lien sale; list published a few weeks ahead.

| `counties` key | County | Portals | Sale types |
|---|---|---|---|
| `ny-nassau` | Nassau | nassau.newyorktaxsale.com | tax-lien |

#### Ohio (88 counties)

Sheriff foreclosure sales (mortgage and treasurer tax foreclosures) run weekly, typically Fridays, with items posted 3-5 weeks ahead.

| `counties` key | County | Portals | Sale types |
|---|---|---|---|
| `oh-adams` | Adams | adams.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-allen` | Allen | allen.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-ashland` | Ashland | ashland.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-ashtabula` | Ashtabula | ashtabula.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-athens` | Athens | athens.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-auglaize` | Auglaize | auglaize.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-belmont` | Belmont | belmont.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-brown` | Brown | brown.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-butler` | Butler | butler.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-carroll` | Carroll | carroll.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-champaign` | Champaign | champaign.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-clark` | Clark | clark.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-clermont` | Clermont | clermont.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-clinton` | Clinton | clinton.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-columbiana` | Columbiana | columbiana.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-coshocton` | Coshocton | coshocton.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-crawford` | Crawford | crawford.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-cuyahoga` | Cuyahoga | cuyahoga.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-darke` | Darke | darke.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-defiance` | Defiance | defiance.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-delaware` | Delaware | delaware.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-erie` | Erie | erie.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-fairfield` | Fairfield | fairfield.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-fayette` | Fayette | fayette.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-franklin` | Franklin | franklin.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-fulton` | Fulton | fulton.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-gallia` | Gallia | gallia.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-geauga` | Geauga | geauga.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-greene` | Greene | greene.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-guernsey` | Guernsey | guernsey.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-hamilton` | Hamilton | hamilton.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-hancock` | Hancock | hancock.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-hardin` | Hardin | hardin.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-harrison` | Harrison | harrison.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-henry` | Henry | henry.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-highland` | Highland | highland.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-hocking` | Hocking | hocking.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-holmes` | Holmes | holmes.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-huron` | Huron | huron.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-jackson` | Jackson | jackson.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-jefferson` | Jefferson | jefferson.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-knox` | Knox | knox.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-lake` | Lake | lake.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-lawrence` | Lawrence | lawrence.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-licking` | Licking | licking.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-logan` | Logan | logan.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-lorain` | Lorain | lorain.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-lucas` | Lucas | lucas.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-madison` | Madison | madison.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-mahoning` | Mahoning | mahoning.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-marion` | Marion | marion.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-medina` | Medina | medina.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-meigs` | Meigs | meigs.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-mercer` | Mercer | mercer.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-miami` | Miami | miami.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-monroe` | Monroe | monroe.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-montgomery` | Montgomery | montgomery.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-morgan` | Morgan | morgan.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-morrow` | Morrow | morrow.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-muskingum` | Muskingum | muskingum.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-noble` | Noble | noble.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-ottawa` | Ottawa | ottawa.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-paulding` | Paulding | paulding.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-perry` | Perry | perry.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-pickaway` | Pickaway | pickaway.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-pike` | Pike | pike.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-portage` | Portage | portage.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-preble` | Preble | preble.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-putnam` | Putnam | putnam.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-richland` | Richland | richland.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-ross` | Ross | ross.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-sandusky` | Sandusky | sandusky.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-scioto` | Scioto | scioto.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-seneca` | Seneca | seneca.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-shelby` | Shelby | shelby.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-stark` | Stark | stark.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-summit` | Summit | summit.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-trumbull` | Trumbull | trumbull.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-tuscarawas` | Tuscarawas | tuscarawas.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-union` | Union | union.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-vanwert` | Van Wert | vanwert.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-vinton` | Vinton | vinton.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-warren` | Warren | warren.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-washington` | Washington | washington.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-wayne` | Wayne | wayne.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-williams` | Williams | williams.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-wood` | Wood | wood.sheriffsaleauction.ohio.gov | foreclosure |
| `oh-wyandot` | Wyandot | wyandot.sheriffsaleauction.ohio.gov | foreclosure |

Where a county runs two hostnames on one shared backend (Miami-Dade), the duplicate portal is detected by its
identical calendar and read once.

### Input

| Field | Default | Notes |
|---|---|---|
| `counties` | `["fl-miamidade","fl-broward"]` | County keys or names from the tables above |
| `states` | `[]` | State codes; every supported county in each state is added |
| `saleTypes` | `["tax-deed","tax-lien","foreclosure"]` | Empty = all |
| `minBid`, `maxBid` | unset | Filter on the opening bid (face amount for liens) in USD. Listings with no published bid (Florida foreclosures publish a final judgment amount instead) are excluded when either is set |
| `maxNewPerCounty` | `10` | Cap per county per run. Anything beyond stays unseen and comes out next run |
| `maxItems` | `10` | Overall cap per run, shared round-robin across counties and sale types so every county and type is represented |
| `firstRunMode` | `emitAll` | `emitAll` reports every current listing on the first run; `baseline` records them silently |
| `webhookUrl` | `""` | Optional POST target for the run summary |
| `monitorId` | `default` | One state store per ID; run several watchlists side by side |
| `proxyConfiguration` | none | The portals answer the Apify platform directly; no proxy needed |

### Recommended setup for a daily feed

1. Create a task with your counties (or `states`) and bid range, and set `monitorId` (for example
   `south-florida-deeds`).
2. **First run: set `firstRunMode` to `baseline`.** This records every listing currently posted, emits nothing,
   and stops day one from being a 2,000-row backlog. Skip this if you *want* the full current list.
3. Set `maxItems` and `maxNewPerCounty` to 1000+ so a busy posting day is never truncated.
4. **Schedule the task daily at 07:00 America/New\_York.** Clerks and sheriffs post during the business day; a
   morning run catches everything from the previous day.
5. Point `webhookUrl` at Slack, Zapier, Make, or your own endpoint.

The default settings (`{}`) run in `emitAll` mode for Miami-Dade and Broward so you see real output on the first try.

#### Example: Florida tax deeds under $25k, all counties

```json
{
  "states": ["FL"],
  "saleTypes": ["tax-deed"],
  "maxBid": 25000,
  "maxNewPerCounty": 500,
  "maxItems": 5000,
  "firstRunMode": "baseline",
  "webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
  "monitorId": "fl-deeds-under-25k"
}
```

#### Example: Ohio and Colorado foreclosures in the big metros

```json
{
  "counties": ["oh-franklin", "oh-cuyahoga", "oh-hamilton", "oh-summit", "co-denver", "co-elpaso", "co-arapahoe"],
  "saleTypes": ["foreclosure"],
  "maxNewPerCounty": 500,
  "maxItems": 2000,
  "monitorId": "oh-co-foreclosures"
}
```

### Output

One record per new or updated listing:

```json
{
  "state": "FL",
  "county": "Broward",
  "countyKey": "fl-broward",
  "portal": "broward.realtaxdeed.com",
  "saleType": "tax-deed",
  "saleDate": "2026-10-26",
  "saleTime": "10:00 AM ET",
  "caseNumber": "53649",
  "certificateNumber": "2023/380",
  "itemNumber": null,
  "parcelNumber": "484114-01-2120",
  "taxYear": null,
  "address": "4001 NW 78 TER #N & S",
  "city": "CORAL SPRINGS",
  "zip": "33065",
  "legalDescription": null,
  "assessedValue": null,
  "openingBid": 50865.05,
  "finalJudgmentAmount": null,
  "depositRequirement": null,
  "plaintiffMaxBid": null,
  "status": "Scheduled",
  "sourceUrl": "https://broward.realtaxdeed.com/index.cfm?zaction=AUCTION&Zmethod=PREVIEW&AUCTIONDATE=10/26/2026",
  "detailUrl": "https://broward.realtaxdeed.com/index.cfm?zaction=auction&zmethod=details&AID=1517921",
  "parcelUrl": "https://web.bcpa.net/BcpaClient/#/Record-Search?folio=484114012120",
  "mapUrl": "https://www.google.com/maps/search/?api=1&query=4001%20NW%2078%20TER%20%23N%20%26%20S%2C%20CORAL%20SPRINGS%2C%20FL%2C%2033065",
  "changeType": "new",
  "firstSeenAt": "2026-09-29T00:15:44.555Z",
  "monitorId": "default"
}
```

Field notes:

- `openingBid` is the tax deed opening bid, the Ohio sheriff opening bid (two-thirds of the appraisal) or the
  lien face amount. Florida foreclosures publish `finalJudgmentAmount` and `plaintiffMaxBid` (usually hidden
  until the sale) instead.
- `assessedValue` is the county's assessed value (Florida) or the sheriff's appraised value (Ohio).
- `status` is `Scheduled` on the auction portals until the sale, the sheriff's case status in Ohio (`ACTIVE`),
  and `Active` / `Unavailable` for lien certificates.
- `legalDescription` is always `null`: RealAuction shows the legal description only on the per-item details
  page behind a bidder login. Use `parcelUrl` (county appraiser) for it.
- `itemNumber`, `taxYear` and `certificateNumber` are filled for tax lien certificates; `saleDate` is `null` for
  lien lists because the portals do not print the sale date on the list page.
- Fields a portal does not publish are `null` (Broward foreclosures carry no parcel number; some listings show
  only a city and ZIP).

### Webhook payload

POSTed once per run as `application/json`, also saved as the `SUMMARY` record in the run's key-value store:

```json
{
  "monitorId": "fl-deeds-under-25k",
  "runAt": "2026-09-29T11:00:03.118Z",
  "newCount": 4,
  "updatedCount": 1,
  "counties": {
    "fl-broward": { "scanned": 306, "emitted": 3, "portals": [{ "host": "broward.realforeclose.com", "items": 251 }, { "host": "broward.realtaxdeed.com", "items": 55 }] },
    "fl-miamidade": { "scanned": 302, "emitted": 2, "portals": [{ "host": "miami-dade.realforeclose.com", "items": 302 }] }
  },
  "seenTotal": 812,
  "baseline": false,
  "listings": [ { "...first 50 records, same shape as the dataset..." } ]
}
```

### Pricing

Pay per event: a small start fee plus a per-listing fee **only for records emitted**. A daily monitor that finds
nothing new costs just the start fee.

### Notes

- A listing counts as `updated` when its sale date, opening bid or status changes (for example an Ohio case
  moving from `ACTIVE` to a cancelled state, or a lien certificate turning `Unavailable`).
- Auction portals are read from the calendar for the current month and the next two, so a list posted early for
  a later month is picked up as soon as it appears.
- Counties are scanned four at a time; a full `states: ["FL"]` sweep of 45 counties takes a few minutes.
- Sources are public county portals; the actor paces requests and needs no login or API key.

# Actor input Schema

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

Counties to monitor as <state>-<county> keys, e.g. fl-miamidade, fl-broward, oh-franklin, co-denver, az-pima, md-baltimorecity. Names like "Miami-Dade, FL", "Palm Beach County FL" or a bare "hillsborough" (when unique) are accepted. See the README for the full list of 170 supported counties.

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

Two-letter state codes to monitor every supported county in that state, e.g. \["FL"] or \["OH", "CO"]. Added to the counties list. Supported: FL, OH, CO, AZ, MD, NJ, NY, NE.

## `saleTypes` (type: `array`):

Which auctions to include: tax-deed (Florida / Arizona tax deed sales), tax-lien (tax certificate sales on the RealTaxLien portals: Arizona, Colorado, Maryland, New Jersey, New York, Nebraska), foreclosure (court-ordered mortgage and tax foreclosure sales: Florida clerks, Ohio sheriffs, Colorado public trustees). Empty = all three.

## `minBid` (type: `integer`):

Only listings whose opening bid (face amount for tax liens) is at least this amount. Listings without a published bid are excluded when this is set.

## `maxBid` (type: `integer`):

Only listings whose opening bid (face amount for tax liens) is at most this amount. Listings without a published bid are excluded when this is set.

## `maxNewPerCounty` (type: `integer`):

Cap on new or updated listings emitted for each county in one run. Anything beyond the cap stays unseen and comes out on the next run.

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

Overall cap on records emitted in one run, shared round-robin across counties. Raise it to 1000+ for a production schedule.

## `firstRunMode` (type: `string`):

emitAll reports every current listing on the very first run of a monitorId; baseline records them silently so only listings posted after that run are reported.

## `webhookUrl` (type: `string`):

Optional. A JSON summary with the new/updated listings (up to 50) is POSTed here at the end of every run.

## `monitorId` (type: `string`):

Name of this watchlist. Each ID keeps its own memory of seen listings (key-value store taxsale-se-monitor-<hash>), so you can run several monitors with different counties or bid ranges side by side.

## `proxyConfiguration` (type: `object`):

Optional. The RealAuction portals answer the Apify platform directly (verified); enable proxies only if a portal starts blocking.

## Actor input object example

```json
{
  "counties": [
    "fl-miamidade",
    "fl-broward"
  ],
  "states": [],
  "saleTypes": [
    "tax-deed",
    "tax-lien",
    "foreclosure"
  ],
  "maxNewPerCounty": 10,
  "maxItems": 10,
  "firstRunMode": "emitAll",
  "webhookUrl": "",
  "monitorId": "default"
}
```

# Actor output Schema

## `records` (type: `string`):

Dataset of new or updated tax deed, tax lien and foreclosure auction listings found in this run (JSON).

# 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": [
        "fl-miamidade",
        "fl-broward"
    ],
    "saleTypes": [
        "tax-deed",
        "tax-lien",
        "foreclosure"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("outstanding_vegetable/tax-sale-monitor-southeast").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": [
        "fl-miamidade",
        "fl-broward",
    ],
    "saleTypes": [
        "tax-deed",
        "tax-lien",
        "foreclosure",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("outstanding_vegetable/tax-sale-monitor-southeast").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": [
    "fl-miamidade",
    "fl-broward"
  ],
  "saleTypes": [
    "tax-deed",
    "tax-lien",
    "foreclosure"
  ]
}' |
apify call outstanding_vegetable/tax-sale-monitor-southeast --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,outstanding_vegetable/tax-sale-monitor-southeast"
        }
    }
}
```

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/AXkOGDnvH0q10UQcE/builds/qTOyYDQS5wbTB1EAk/openapi.json
