real-estate-comping
Perform AI-powered property valuation and comparable sales analysis for real estate wholesaling. Use when the user needs to comp a property, determine ARV, analyze comparable sales, or perform propert
SKILL.md.claude/skills/real-estate-comping/SKILL.md
GitHubReal Estate Comping Skill
Perform appraiser-grade property valuations using the Two-Bucket method for disclosure states or the Triangulation method for non-disclosure states. This skill is strictly about comparable sales analysis and ARV determination — it does not estimate rehab costs, renovation budgets, or scope of work. If the user needs rehab cost estimation, direct them to the appropriate skill for that.
Workflow Overview
- Identify property location → Determine state from address
- Route to correct methodology → Disclosure or Non-Disclosure framework
- Execute 9-step analysis → Follow the appropriate prompt framework
- Generate deliverables → PDF summary report + Excel breakdown + comps table
State Detection & Routing
Determine state type from property address:
- Non-Disclosure States (sold prices not publicly recorded): TX, UT, WY, NM, ID, MT, ND, AK, KS, MS, LA, MO
- Disclosure States: All other US states
Routing:
- Non-disclosure state → Read
references/non-disclosure-prompt.md - Disclosure state → Read
references/disclosure-prompt.md
Quick Reference
| Framework | States | Key Method | Price Source |
|---|---|---|---|
| Disclosure | Most US states | Two-Bucket (Unrenovated vs Renovated PPSF) | MLS sold prices |
| Non-Disclosure | TX, UT, WY, NM, ID, MT, ND, AK, KS, MS, LA, MO | Triangulation (LLP + DOM, Deed of Trust, Tax Ratio) | Derived estimates |
Core Comping Rules (Both Frameworks)
These rules apply regardless of disclosure status:
Comp Selection Filters
- Age: ≤90 days preferred, 6 months max
- Subdivision: Same micro-pocket, do not cross major roads
- GLA: ±100 sqft ideal, ±250 sqft outer bound
- Property type: Match elevation style (ranch↔ranch, 2-story↔2-story)
- Build year: ±10 years
Feature Adjustments (by price tier)
See references/adjustment-cheatsheet.md for complete adjustment values.
Quick reference:
| Feature | <$500k Tier | >$500k Tier |
|---|---|---|
| Bedroom | +$10k | +$25k |
| Bathroom | ±$10k | ±$10k |
| Garage | +$10-25k | +$10-25k |
| Traffic (backing) | -$10k | -10-15% |
| Traffic (fronting) | -$20k | -20% |
Basement/ADU Rules
- Basements: Not counted as GLA; value at ~50% of above-grade PPSF if finished
- ADUs: 50% value if not separately deeded; 100% if separately titled
Required Deliverables
Every comp analysis MUST produce these two outputs:
1. Excel Breakdown Workbook
Comprehensive multi-sheet workbook with:
- Executive Summary sheet: Quick-view of key findings
- Subject Property sheet: All property details
- Comparable Sales sheet: Full comps table with bucket analysis
- Adjustments Detail sheet: Line-by-line adjustment breakdown
- Market Analysis sheet: Market metrics and trends
- ARV Calculation sheet: Step-by-step ARV math
- Sources & Notes sheet: Data sources, parameters, recommendations
Generate using: scripts/generate_excel_report.py
2. In-Context Analysis
The detailed analysis text with tables shown directly in the conversation, including:
- Step-by-Step ARV Breakdown (Base PPSF → Adjustments → Final ARV)
- Comps Summary Table (Address, Sale Date, Price, GLA, Beds/Baths, Year, Condition, Adjustments, Final Adjusted Value)
- Market Overview (Median price, PPSF, DOM, sale-to-list ratio, market phase)
- Sources & Assumptions (Data sources, time window, radius constraints)
- Recommendations & Caveats (Verification steps, risk factors, disclaimer)
Output Generation Instructions
Data Structure for Report Generation
Prepare analysis data as JSON with this structure:
{
"subject_property": {
"address": "123 Main St",
"city": "Austin",
"state": "TX",
"zip": "78701",
"county": "Travis",
"subdivision": "Downtown",
"property_type": "Single Family",
"gla": 1850,
"lot_size": 6500,
"beds": 3,
"baths": 2,
"year_built": 1985,
"condition": "Dated"
},
"comps": [
{
"address": "456 Oak Ave",
"sale_date": "2025-12-15",
"sale_price": 485000,
"gla": 1780,
"ppsf": 272.47,
"beds": 3,
"baths": 2,
"year_built": 1982,
"condition": "Renovated",
"distance": 0.3,
"total_adjustments": -5000,
"adjusted_value": 480000
}
],
"bucket_analysis": {
"unrenovated": { "count": 2, "median_ppsf": 235.20, "avg_ppsf": 235.20 },
"renovated": { "count": 2, "median_ppsf": 257.33, "avg_ppsf": 257.33 },
"market_premium_pct": 9.4
},
"market_overview": {
"market_phase": "Balanced",
"median_price": 455000,
"median_ppsf": 248.50,
"avg_dom": 28,
"sale_to_list_ratio": 0.98,
"active_count": 45,
"pending_count": 22,
"notes": ["Market observations..."]
},
"arv_calculation": {
"base_ppsf": 235.20,
"market_premium_pct": 9.4,
"renovated_ppsf": 257.33,
"subject_gla": 1850,
"base_arv": 476061,
"feature_adjustments": -5000,
"final_arv": 471000,
"confidence_level": "Moderate",
"confidence_band_pct": 5.0,
"arv_low": 447450,
"arv_high": 494550
},
"adjustments_applied": [
{
"comp_number": 1,
"comp_address": "456 Oak Ave",
"adjustment_type": "GLA",
"reason": "Subject 70 sqft larger",
"amount": -5000
}
],
"sources": ["MLS", "County Records", "Zillow"],
"search_parameters": {
"time_window": "90 days",
"radius": "0.5 miles",
"gla_range": "1600-2100 sqft"
},
"recommendations": ["Verification steps..."],
"caveats": ["Disclaimers..."]
}
Generate Reports
- Save the analysis data to a JSON file
- Run the Excel generator:
python scripts/generate_excel_report.py output_report.xlsx data.json
Execution Instructions
- Gather property address from user
- Identify state and determine disclosure status
- Load appropriate framework:
- Disclosure:
references/disclosure-prompt.md - Non-Disclosure:
references/non-disclosure-prompt.md
- Disclosure:
- Add property context (if provided): current condition, seller notes, known issues
- Optional boundary drawing: For block-by-block markets, use Zillow boundary tool
- Execute analysis following the 9-step framework
- Verify results: Cross-reference with market knowledge
- Prepare data structure: Compile all analysis into JSON format
- Generate deliverables:
- Run
generate_excel_report.pyfor Excel breakdown
- Run
- Deliver all outputs to user: Excel and in-context analysis
Special Considerations
Non-Disclosure State Caveats
- Wider confidence bands (±5-7% vs ±2-5%)
- Must derive sold prices using triangulation methods
- Recommend "Option Period Verification" once under contract
Market Sentiment Adjustments
- Hot market (fast pendings, >50% over list): +5-7%
- Balanced market: +3-5%
- Cool market (60+ DOM, price cuts): 0-2% or negative
Two-Bucket Spread Sanity Check
The spread between unrenovated and renovated bucket PPSF is a market-derived metric (not a rehab cost estimate). It reflects what buyers in that market are willing to pay for updated finishes.
- Typical spread: 10-30%
- <5% or >30%: Re-examine comp validity — comps may be miscategorized or the market may have unusual dynamics