Automated FL Tax Deed Auction Research: Hours of Work, Zero Clic
Automated FL Tax Deed Auction Research: Hours of Work, Zero Clicks
The Situation
Florida tax deed auctions list dozens to hundreds of properties per auction day across multiple counties. A serious bidder has to vet each parcel before the auction: acreage, zoning, flood risk, road access, assessed value, aerial view. The research lives across six different county property appraiser portals, FEMA flood maps, Google Maps satellite, Street View, and parcel boundary services like id.land. Each county has its own quirky SPA. Each data point lives in a different tab.
The Problem
Manual research on auction day runs four to six hours for a single county's list. Multiply by six counties and the math breaks: bidders either skip parcels, miss flood risk signals, or bid blind. The tedium is the real cost. An experienced investor should be filtering and analyzing, not copy-pasting parcel IDs into six different forms.
The target operator is sophisticated enough to self-host and wants full control over their data, API keys, and scraping infrastructure. No SaaS lock-in, no per-seat fees, no sending proprietary investment logic to a vendor.
The Solution
I built a self-hosted intelligence platform that turns hours of manual county-portal research into an overnight pipeline run. The operator triggers one run, walks away, and wakes up to a filterable shortlist of auction parcels ranked by AI verdict.
How the pipeline works (7 stages, event-driven):
1. Scrape listings from realtaxdeed.com behind a Surfshark VPN (the site blocks non-US IPs and non-browser user agents). Handles a multi-step login with up to 5 sequential notice pages, paginates through all auction items.
2. Scrape property data from each county's appraiser portal. Putnam County alone required splitting parcel IDs like 01-10-26-0250-0270-0081 into 6 separate form fields inside an SPA.
3. Resolve GPS coordinates via id.land, dismissing modals and navigating state/county/parcel dropdowns.
4. Capture screenshots: Google Maps satellite, Street View, id.land parcel boundary, FEMA flood zone.
5. Check FEMA flood zone using an undocumented ArcGIS &extent= URL parameter (replaced a brittle UI-search automation flow).
6. Run AI analysis via Claude Sonnet 4 with tool_use for structured output: numeric subscores (land quality, flood risk, road access, development, value), overall 0-100 score, flags, reasoning, and a buy/review/skip verdict.
7. Write results to Supabase, pushed live to a React dashboard via Realtime subscriptions.
Tech Stack: NestJS, Playwright, BullMQ, Redis, Supabase (PostgreSQL + Storage + Realtime), Claude Sonnet 4 API, React, Vite, Tailwind, Leaflet, Docker Compose, Caddy, Surfshark VPN via gluetun.
The Results
- Hours of manual cross-portal research replaced with a single pipeline trigger
- End-to-end pipeline working for Putnam County: 10/10 parcels scraped, 10/10 GPS resolved, 40 screenshots captured per run
- AI cost calibrated at approximately $0.012 per parcel for full vision analysis
- 6-county configuration system lets new counties drop in via config files plus a processor strategy
- Self-hosted architecture keeps all data, API keys, and scraping infrastructure under operator control
- Real-time dashboard shows pipeline runs, parcel details, queue health, AI verdicts, CSV export, interactive map
How It Works (operator view)
1. Operator hits "Trigger Pipeline" in the dashboard (or POSTs to the API)
2. System scrapes the auction listing page, creates a parcel record per item
3. Each parcel flows through all 7 stages automatically
4. Dashboard updates live as parcels complete each stage
5. When AI analysis finishes, operator sees a ranked, filterable list with verdicts
6. Export to CSV or drill into parcel detail with all screenshots side-by-side
The Situation
Florida tax deed auctions list dozens to hundreds of properties per auction day across multiple counties. A serious bidder has to vet each parcel before the auction: acreage, zoning, flood risk, road access, assessed value, aerial view. The research lives across six different county property appraiser portals, FEMA flood maps, Google Maps satellite, Street View, and parcel boundary services like id.land. Each county has its own quirky SPA. Each data point lives in a different tab.
The Problem
Manual research on auction day runs four to six hours for a single county's list. Multiply by six counties and the math breaks: bidders either skip parcels, miss flood risk signals, or bid blind. The tedium is the real cost. An experienced investor should be filtering and analyzing, not copy-pasting parcel IDs into six different forms.
The target operator is sophisticated enough to self-host and wants full control over their data, API keys, and scraping infrastructure. No SaaS lock-in, no per-seat fees, no sending proprietary investment logic to a vendor.
The Solution
I built a self-hosted intelligence platform that turns hours of manual county-portal research into an overnight pipeline run. The operator triggers one run, walks away, and wakes up to a filterable shortlist of auction parcels ranked by AI verdict.
How the pipeline works (7 stages, event-driven):
1. Scrape listings from realtaxdeed.com behind a Surfshark VPN (the site blocks non-US IPs and non-browser user agents). Handles a multi-step login with up to 5 sequential notice pages, paginates through all auction items.
2. Scrape property data from each county's appraiser portal. Putnam County alone required splitting parcel IDs like 01-10-26-0250-0270-0081 into 6 separate form fields inside an SPA.
3. Resolve GPS coordinates via id.land, dismissing modals and navigating state/county/parcel dropdowns.
4. Capture screenshots: Google Maps satellite, Street View, id.land parcel boundary, FEMA flood zone.
5. Check FEMA flood zone using an undocumented ArcGIS &extent= URL parameter (replaced a brittle UI-search automation flow).
6. Run AI analysis via Claude Sonnet 4 with tool_use for structured output: numeric subscores (land quality, flood risk, road access, development, value), overall 0-100 score, flags, reasoning, and a buy/review/skip verdict.
7. Write results to Supabase, pushed live to a React dashboard via Realtime subscriptions.
Tech Stack: NestJS, Playwright, BullMQ, Redis, Supabase (PostgreSQL + Storage + Realtime), Claude Sonnet 4 API, React, Vite, Tailwind, Leaflet, Docker Compose, Caddy, Surfshark VPN via gluetun.
The Results
- Hours of manual cross-portal research replaced with a single pipeline trigger
- End-to-end pipeline working for Putnam County: 10/10 parcels scraped, 10/10 GPS resolved, 40 screenshots captured per run
- AI cost calibrated at approximately $0.012 per parcel for full vision analysis
- 6-county configuration system lets new counties drop in via config files plus a processor strategy
- Self-hosted architecture keeps all data, API keys, and scraping infrastructure under operator control
- Real-time dashboard shows pipeline runs, parcel details, queue health, AI verdicts, CSV export, interactive map
How It Works (operator view)
1. Operator hits "Trigger Pipeline" in the dashboard (or POSTs to the API)
2. System scrapes the auction listing page, creates a parcel record per item
3. Each parcel flows through all 7 stages automatically
4. Dashboard updates live as parcels complete each stage
5. When AI analysis finishes, operator sees a ranked, filterable list with verdicts
6. Export to CSV or drill into parcel detail with all screenshots side-by-side