RealtyPad — distressed auction / wholesale (assign-to-flipper)¶
Learned from the 2026-08-05 San Antonio Auction.com trial. Prefer evidence; never invent tax or repairs.
Hard rules¶
- Never invent numbers. Portal Cotality / AVM = estimate (store as sale comp
status=estimate), not closed comps. ask_price= starting bid or live current bid (say which in notes). Re-fetch detail before bidding — bids move.- Reserve not met + large bid increments means opening bid is not a clearing price.
- Annual tax ≠ delinquent / lien payoff. Leave both null until BCAD / tax collector / title packet verified.
wholesale_v1spread = ARV − ask − repairs − liens_owed (null liens → 0). It still ignores assignment fee, flipper profit, and reserve reality — always run the offer stack in an agent comment.- Aggressiveness: aggressive — pursue only clear asymmetric residual after the stack (≳ $25–40k).
- Distress override on
ranked: keepresearchinguntil tax/title/repairs are credible, even if economics +match_deal_buyersalready fit. Only then apply the buyer-fit gate →ranked(canonical gate otherwise: underwrite). - Distressed-sale listings, not only auctions. On-market listings flagged short sale, pre-foreclosure / foreclosure, REO / bank-owned or probate (portal "Special listing conditions" grid →
properties.attributes, or the write-up) get the same override. Automation surfaces them asqa_flags.distress_conditions. Record anaction_neededhandoff naming each condition and what a person must verify: short sale → lender approval of the price (the ask is not final) and timeline; pre-foreclosure / foreclosure → status, sale date, amount owed, liens; REO → bank terms and title; probate → court authority to sell, heirs, title. Say so in the brief — never present the ask as a firm price.
Pipeline¶
Distress Progress:
- [ ] 1. Scope metro + channel (Auction.com first; HUD if thin)
- [ ] 2. Buyer prep: wholesale/fix_flip + roi_type=total_roi (cash_on_cash breaks wholesale match)
- [ ] 3. ensure_geo_markets for city/county chain
- [ ] 4. Apify pull → add_manual_leads (wholesale / auction_com|hud; shared defaults)
- [ ] 5. Triage cut (stale SALE_PENDING, non-resi, sale-day-tomorrow w/ no docs)
- [ ] 6. Research survivors: live bid, Cotality ARV, HOA, special notes, tax/liens
- [ ] 7. Offer brief comment + rescore
- [ ] 8. match_deal_buyers (snapshots on; link_matches sets scenario_run_id / auto-freezes live if none); status **researching** until tax/title/repairs credible, then buyer-fit → `ranked`
Allowlisted connectors¶
Platform connectors for Auction.com / HUD / open-data distress — recipes in get_agent_manual(workflow=data-sources):
| Job | Detail page |
|---|---|
| Auction.com | auction-com.md |
| HUD / REO | hud.md |
| Open-data distress | probate-foreclosure.md |
Always set maxTotalChargeUsd (or maxListings). Do not call apify/rag-web-browser or any Store Actor outside the allowlist.
Normalize:
| Field | Value |
|---|---|
income_strategy |
wholesale |
lead_source_code |
auction_com or hud |
ask_price |
startingBid (or live current bid after detail refresh) |
auction_date |
Sale / auction day when known |
liens_owed |
Only when verified/estimated from tax collector / packet — never invent |
financing_profile |
cash_offer |
| notes | auction window, assetType, occupancy, reserve, Apify run id |
Triage cuts (SA trial)¶
Drop or watch:
SALE_PENDING/SALE_PENDING_CLEARED/ stale auction dates (years old)- Foreclosure trustee with null starting bid and no economics
- Non-residential / land (unless buyer book wants it)
- Opening bid already near Cotality est. (no spread)
Keep for research: active AUCTION_IN_PROGRESS with ask ≪ Cotality and residential SFR/PUD.
Research pack¶
- Re-open
source_url— refresh current bid, reserve status, bid increment, HOA, special notes (structural, solar, occupied). - ARV: Cotality from listing →
arv+add_deal_comp(kind=sale, status=estimate). Prefer 3+ closed sale comps when available; mark secondary web comps as unverified. needs_rehab=truewhen AS-IS / structural / unknown condition; leaverepair_estimatenull rather than inventing CapEx.- Tax: BCAD (
esearch.bcad.org) + Bexar Tax Assessor for annual and amounts owed. If blocked, note the gap in a research comment (and/or leave tax fields null) — do not invent; do not usekind=taxobservations for diary. - Liens: set
liens_owedwhen tax collector / title packet is known; else note the lien gap in a comment (oraction_neededhandoff) until verified. Auction.com “liens may survive”; quitclaim risk.
Offer stack (comment template)¶
ARV (comp/AVM, labeled)
− repairs (null → haircut in narrative only)
− flipper profit (~15–20% ARV or fixed)
− assignment fee
− known liens / buyer premium / HOA delinquencies
= max bid / max assignable offer
Compare to live ask/current bid, not the $1 opening when reserve is unmet.
Buyer matching quirks¶
- Flipper/wholesale buyers need
roi_type=total_roi(or no ROI gate).cash_on_cash/hold_irr/cap_ratefail wholesale (no monthly CF / NOI). - Matcher treats wholesale
cash_needed= ask (end-buyer funds). Lowcash_on_handnear-misses high-ask auctions even when assignment fee is small — recruit higher-cash flippers or note the gap. - Empty buyer book: if distress facts still block UW → stay
researching/blocked; if economics clear andscanned=0→watch(do not soft-passed).
Product gaps (ops notes)¶
liens_owedfeedswholesale_v1spread (ARV − ask − repairs − liens). Null liens default to 0.auction_dateis first-class; uselist_deals(sort=auction_date)for sale-day queues.- Offer stack still subtracts flipper profit / assignment fee by hand in the agent comment (not schema fields).
- BCAD esearch may fail SSL from some fetch paths — use browser or tax office when needed.
After the pass¶
Brief: ingest counts, Apify run id/spend, survivors researched, match vs near-miss, what broke (tax access, live bid drift, cash gates). HUD fallback only if Auction.com returned < ~5 usable actives.