"""scrapers — Phase 3B DealFinder source adapters. Cada scraper devuelve list[dict] con campos compatibles con deals_db.insert_deal: source, deal_type, address, city, state, zip, county, listing_price, starting_bid, estimated_arv, beds, baths, sqft, year_built, lot_sqft, photos_urls, listing_description, case_number, auction_date Plus el scraper anota: - record_scraper_run() al inicio - insert_deal() per result - record_firecrawl_usage() si consumio credits - finish_scraper_run() al final con metricas Stack: - Playwright local primero (gratis) — para sitios sin anti-bot pesado - Firecrawl fallback — solo cuando Playwright se bloquea - Cada scraper documenta cual usa en su docstring """