Oklahoma Insurance Tool

Replacement Cost
Value Calculator

2025 Oklahoma construction data & insurance claim records

Independent Insurance Broker
(918) 816-9927
```
01 Property Basics
02 Construction Type
03 Finish Quality
Standard / Builder Grade
Basic fixtures, vinyl flooring, stock cabinets
Mid-Range
Granite counters, hardwood floors, upgraded fixtures
Premium / Semi-Custom
Custom millwork, high-end appliances, tile baths
Luxury / Custom
Bespoke finishes, smart home, designer everything
04 Roof Details
⚠️ Oklahoma Roof Alert: 85% of OK homeowner claims are roof-related. Roofs 15+ years old are typically settled at Actual Cash Value (ACV) — not full replacement cost — by most Oklahoma carriers. Independent brokers can often find RCV-inclusive policies.
05 Additional Features
```
-Micah Belyeu On Feb 27, 2026, at 8:40 PM, Micah Belyeu wrote: 
Oklahoma Insurance Tool

Replacement Cost
Value Calculator

2025 Oklahoma construction data & insurance claim records

Independent Insurance Broker
(918) 816-9927
```
01 Property Basics
02 Construction Type
03 Finish Quality
Standard / Builder Grade
Basic fixtures, vinyl flooring, stock cabinets
Mid-Range
Granite counters, hardwood floors, upgraded fixtures
Premium / Semi-Custom
Custom millwork, high-end appliances, tile baths
Luxury / Custom
Bespoke finishes, smart home, designer everything
04 Roof Details
⚠️ Oklahoma Roof Alert: 85% of OK homeowner claims are roof-related. Roofs 15+ years old are typically settled at Actual Cash Value (ACV) — not full replacement cost — by most Oklahoma carriers. Independent brokers can often find RCV-inclusive policies.
05 Additional Features
```
-Micah Belyeu On Feb 27, 2026, at 8:26 PM, Micah Belyeu wrote:  Oklahoma RCV Calculator: Home Replacement Cost Estimator 2025 claude.ai -Micah Belyeu On Feb 27, 2026, at 8:21 PM, Micah Belyeu wrote: import { useState, useEffect } from “react”; // ── DATA (sourced from 2025 insurance & construction records) ────────────────── const BASE_COST_PER_SQFT = 158; // Home-Cost.com 2025 Oklahoma avg (incl. contractor fees) const REGION_FACTORS = { okc: { label: “Oklahoma City Metro”, factor: 1.12 }, tulsa: { label: “Tulsa Metro”, factor: 1.10 }, lawton: { label: “Lawton / Ft. Sill”, factor: 1.00 }, norman: { label: “Norman / Moore”, factor: 1.08 }, edmond: { label: “Edmond / Yukon”, factor: 1.13 }, enid: { label: “Enid / Stillwater”, factor: 0.97 }, rural: { label: “Rural / Small Town”, factor: 0.91 }, }; const QUALITY_LEVELS = { standard: { label: “Standard / Builder Grade”, multiplier: 0.88, desc: “Basic fixtures, vinyl flooring, stock cabinets” }, mid: { label: “Mid-Range”, multiplier: 1.00, desc: “Granite counters, hardwood floors, upgraded fixtures” }, premium: { label: “Premium / Semi-Custom”, multiplier: 1.28, desc: “Custom millwork, high-end appliances, tile baths” }, luxury: { label: “Luxury / Custom”, multiplier: 1.65, desc: “Bespoke finishes, smart home, designer everything” }, }; const CONSTRUCTION_TYPES = { wood: { label: “Wood Frame”, factor: 1.00 }, brick: { label: “Brick Veneer”, factor: 1.09 }, full: { label: “Full Masonry”, factor: 1.19 }, sip: { label: “SIP / ICF”, factor: 1.22 }, }; const ROOF_TYPES = { asphalt: { label: “Asphalt Shingles”, costPerSqft: 5.91 }, architectural: { label: “Architectural / Designer”, costPerSqft: 8.00 }, metal: { label: “Metal Roofing”, costPerSqft: 12.50 }, tile: { label: “Tile / Slate”, costPerSqft: 20.00 }, }; const ROOF_AGE_DEPRECIATION = { “0-5”: { label: “0 – 5 yrs (New/Like-New)”, ageAdder: 0, depreciationNote: “Full RCV likely” }, “6-10”: { label: “6 – 10 yrs”, ageAdder: 0, depreciationNote: “Full RCV typically available” }, “11-15”: { label: “11 – 15 yrs”, ageAdder: 0.02, depreciationNote: “Some insurers may switch to ACV” }, “16-20”: { label: “16 – 20 yrs”, ageAdder: 0.04, depreciationNote: “Many OK insurers switch to ACV” }, “20+”: { label: “20+ yrs”, ageAdder: 0.08, depreciationNote: “Most OK insurers require ACV coverage” }, }; const EXTRAS = [ { id: “garage_single”, label: “Attached Garage (1-Car)”, cost: 18000 }, { id: “garage_double”, label: “Attached Garage (2-Car)”, cost: 34000 }, { id: “basement”, label: “Full Basement / Storm Shelter”, cost: 28000 }, { id: “safe_room”, label: “FEMA Safe Room”, cost: 6500 }, { id: “fireplace”, label: “Fireplace”, cost: 8500 }, { id: “pool”, label: “In-Ground Pool”, cost: 42000 }, { id: “deck_basic”, label: “Wood Deck / Patio”, cost: 12000 }, { id: “deck_composite”, label: “Composite Deck”, cost: 18000 }, { id: “hvac_extra”, label: “Zoned HVAC System”, cost: 9000 }, { id: “solar”, label: “Solar Panel System”, cost: 21000 }, ]; const fmt = (n) => “$” + Math.round(n).toLocaleString(“en-US”); // ── MAIN COMPONENT ───────────────────────────────────────────────────────────── export default function OklahomaRCVCalculator() { const [sqft, setSqft] = useState(””); const [region, setRegion] = useState(“okc”); const [quality, setQuality] = useState(“mid”); const [construction, setConstruction] = useState(“wood”); const [roofType, setRoofType] = useState(“asphalt”); const [roofAge, setRoofAge] = useState(“0-5”); const [yearBuilt, setYearBuilt] = useState(””); const [selectedExtras, setSelectedExtras] = useState([]); const [result, setResult] = useState(null); const [animate, setAnimate] = useState(false); const toggleExtra = (id) => setSelectedExtras((prev) => prev.includes(id) ? prev.filter((e) => e !== id) : […prev, id] ); const calculate = () => { const sf = parseFloat(sqft); if (!sf || sf < 100 || sf > 20000) return; ``` const regionF = REGION_FACTORS[region].factor; const qualityM = QUALITY_LEVELS[quality].multiplier; const constrF = CONSTRUCTION_TYPES[construction].factor; const ageAdder = ROOF_AGE_DEPRECIATION[roofAge].ageAdder; // Estimate average roof sqft as 1.15× floor area for pitch const roofSqft = sf * 1.15; const roofCost = roofSqft * ROOF_TYPES[roofType].costPerSqft; const structureCost = sf * BASE_COST_PER_SQFT * regionF * qualityM * constrF; const extrasCost = selectedExtras.reduce((sum, id) => { const ex = EXTRAS.find((e) => e.id === id); return sum + (ex ? ex.cost * regionF : 0); }, 0); const baseRCV = structureCost + roofCost + extrasCost; // Age depreciation bump on premium (older homes cost more to bring up to code) const ageAdjusted = baseRCV * (1 + ageAdder); // Debris removal (typically 5–10% of rebuild, FEMA/insurer standard) const debrisRemoval = ageAdjusted * 0.07; // Permit / code upgrade allowance (OK building codes evolving) const permitCode = ageAdjusted * 0.04; const totalRCV = ageAdjusted + debrisRemoval + permitCode; // Recommended coverage = 100% RCV; extended RCV buffer = +25% const recommended = totalRCV; const extended = totalRCV * 1.25; // Wind/hail deductible estimate (2% of dwelling is common in OK) const windHailDeductible = recommended * 0.02; setResult({ structureCost, roofCost, extrasCost, debrisRemoval, permitCode, totalRCV, recommended, extended, windHailDeductible, sqft: sf, ageNote: ROOF_AGE_DEPRECIATION[roofAge].depreciationNote, }); setAnimate(true); setTimeout(() => setAnimate(false), 600); ``` }; const pct = (part, total) => ((part / total) * 100).toFixed(1) + “%”; return (
{/* ── HEADER ── */}
Oklahoma Insurance

Replacement Cost
Value Calculator

Built on 2025 Oklahoma construction data & insurance claim records

```
{/* ── FORM ── */}
{/* Basic Info */}

01 Property Basics

setSqft(e.target.value)} min={100} max={20000} /> setYearBuilt(e.target.value)} min={1900} max={2025} />
({ value: k, label: v.label, }))} /> onChange(e.target.value)}> {options.map((o) => ( ))} ); } function CardGroup({ options, selected, onSelect }) { return (
{options.map((o) => ( ))}
); } function QualityRow({ id, label, desc, selected, onSelect }) { return (
{label}
{desc}
); } function ExtraChip({ id, label, cost, selected, onToggle }) { return ( ); } function BreakdownBar({ label, value, total, color }) { const width = Math.max(2, (value / total) * 100); return (
{label}
{fmt(value)}
); } function CovCard({ label, value, note, highlight }) { return (
{highlight &&
✓ RECOMMENDED
}
{label}
{value}
{note}
); } // ── STYLES ───────────────────────────────────────────────────────────────────── const styles = { page: { fontFamily: “‘Georgia’, ‘Times New Roman’, serif”, background: “#1a1108”, minHeight: “100vh”, color: “#f5ede0”, }, header: { background: “linear-gradient(135deg, #8b2500 0%, #c45c1a 50%, #8b4513 100%)”, padding: “48px 32px 56px”, position: “relative”, overflow: “hidden”, }, headerInner: { position: “relative”, zIndex: 2, maxWidth: 720, margin: “0 auto” }, headerOrnament: { position: “absolute”, bottom: -40, right: -40, width: 220, height: 220, borderRadius: “50%”, background: “rgba(255,255,255,0.04)”, zIndex: 1, }, badge: { display: “inline-block”, background: “rgba(255,255,255,0.15)”, border: “1px solid rgba(255,255,255,0.3)”, borderRadius: 4, padding: “4px 12px”, fontSize: 11, letterSpacing: “0.12em”, textTransform: “uppercase”, marginBottom: 16, fontFamily: “‘Trebuchet MS’, sans-serif”, }, title: { fontSize: “clamp(32px, 5vw, 52px)”, fontWeight: 700, margin: “0 0 8px”, lineHeight: 1.1, letterSpacing: “-0.01em”, }, titleAccent: { color: “#ffd4a0” }, subtitle: { fontSize: 14, opacity: 0.8, margin: 0, fontFamily: “‘Trebuchet MS’, sans-serif”, fontStyle: “italic”, }, main: { maxWidth: 760, margin: “0 auto”, padding: “32px 20px 60px”, }, form: {}, section: { background: “#261a0e”, border: “1px solid #3d2a15”, borderRadius: 10, padding: “24px 24px 20px”, marginBottom: 18, }, sectionTitle: { fontSize: 14, fontFamily: “‘Trebuchet MS’, sans-serif”, textTransform: “uppercase”, letterSpacing: “0.1em”, color: “#e8a87c”, margin: “0 0 18px”, display: “flex”, alignItems: “center”, gap: 10, }, num: { display: “inline-block”, background: “#c45c1a”, color: “#fff”, borderRadius: 4, padding: “1px 8px”, fontSize: 12, fontWeight: 700, }, grid2: { display: “grid”, gridTemplateColumns: “1fr 1fr”, gap: 14 }, label: { display: “block”, fontSize: 12, fontFamily: “‘Trebuchet MS’, sans-serif”, textTransform: “uppercase”, letterSpacing: “0.08em”, color: “#c49060”, marginBottom: 6, }, input: { width: “100%”, background: “#1a1108”, border: “1px solid #4a3520”, borderRadius: 6, color: “#f5ede0”, padding: “10px 12px”, fontSize: 15, fontFamily: “‘Georgia’, serif”, boxSizing: “border-box”, outline: “none”, }, select: { width: “100%”, background: “#1a1108”, border: “1px solid #4a3520”, borderRadius: 6, color: “#f5ede0”, padding: “10px 12px”, fontSize: 14, fontFamily: “‘Trebuchet MS’, sans-serif”, boxSizing: “border-box”, cursor: “pointer”, outline: “none”, }, cardGroup: { display: “flex”, flexWrap: “wrap”, gap: 10 }, card: { background: “#1a1108”, border: “1px solid #4a3520”, borderRadius: 7, color: “#d4b08a”, padding: “10px 16px”, cursor: “pointer”, fontSize: 13, fontFamily: “‘Trebuchet MS’, sans-serif”, display: “flex”, flexDirection: “column”, gap: 4, alignItems: “flex-start”, transition: “all 0.15s”, }, cardActive: { background: “#5c2a0a”, border: “1px solid #c45c1a”, color: “#ffd4a0”, }, cardBadge: { fontSize: 10, background: “#c45c1a”, color: “#fff”, borderRadius: 3, padding: “1px 6px”, letterSpacing: “0.06em”, textTransform: “uppercase”, }, qualityRow: { display: “flex”, alignItems: “center”, gap: 14, padding: “12px 14px”, borderRadius: 7, border: “1px solid transparent”, cursor: “pointer”, marginBottom: 6, transition: “all 0.12s”, }, qualityRowActive: { background: “#3d1e08”, border: “1px solid #c45c1a”, }, qualityDot: (active) => ({ width: 14, height: 14, borderRadius: “50%”, border: “2px solid “ + (active ? “#c45c1a” : “#4a3520”), background: active ? “#c45c1a” : “transparent”, flexShrink: 0, transition: “all 0.12s”, }), qualityLabel: { fontSize: 14, color: “#f5ede0”, fontWeight: 600 }, qualityDesc: { fontSize: 12, color: “#8a6540”, fontFamily: “‘Trebuchet MS’, sans-serif”, marginTop: 2 }, roofNote: { background: “#2a1400”, border: “1px solid #6b3210”, borderLeft: “4px solid #c45c1a”, borderRadius: 6, padding: “10px 14px”, fontSize: 12, fontFamily: “‘Trebuchet MS’, sans-serif”, color: “#e8a87c”, lineHeight: 1.5, marginTop: 12, }, extrasGrid: { display: “grid”, gridTemplateColumns: “repeat(auto-fill, minmax(210px, 1fr))”, gap: 8 }, chip: { background: “#1a1108”, border: “1px solid #4a3520”, borderRadius: 7, color: “#c49060”, padding: “10px 12px”, cursor: “pointer”, fontSize: 12, fontFamily: “‘Trebuchet MS’, sans-serif”, display: “flex”, justifyContent: “space-between”, alignItems: “center”, gap: 8, transition: “all 0.12s”, textAlign: “left”, }, chipActive: { background: “#4a1e06”, border: “1px solid #c45c1a”, color: “#ffd4a0”, }, chipCost: { fontSize: 11, opacity: 0.75, whiteSpace: “nowrap” }, calcBtn: { width: “100%”, padding: “18px”, background: “linear-gradient(135deg, #8b2500, #c45c1a)”, color: “#fff”, border: “none”, borderRadius: 8, fontSize: 16, fontFamily: “‘Trebuchet MS’, sans-serif”, fontWeight: 700, letterSpacing: “0.04em”, cursor: “pointer”, marginTop: 8, transition: “opacity 0.15s”, }, results: { marginTop: 28, transition: “transform 0.3s ease”, }, pop: { transform: “scale(1.005)” }, rcvBanner: { background: “linear-gradient(135deg, #8b2500 0%, #c45c1a 60%, #8b4513 100%)”, borderRadius: 12, padding: “32px 28px”, textAlign: “center”, marginBottom: 20, }, rcvLabel: { fontSize: 12, fontFamily: “‘Trebuchet MS’, sans-serif”, textTransform: “uppercase”, letterSpacing: “0.14em”, opacity: 0.8, marginBottom: 8, }, rcvValue: { fontSize: “clamp(36px, 8vw, 56px)”, fontWeight: 700, letterSpacing: “-0.02em”, marginBottom: 6, }, rcvSub: { fontSize: 13, opacity: 0.75, fontFamily: “‘Trebuchet MS’, sans-serif” }, breakdownTitle: { fontSize: 11, fontFamily: “‘Trebuchet MS’, sans-serif”, textTransform: “uppercase”, letterSpacing: “0.14em”, color: “#c49060”, marginBottom: 12, paddingLeft: 4, }, barRow: { display: “flex”, alignItems: “center”, gap: 12, marginBottom: 10, }, barLabel: { width: 190, fontSize: 12, fontFamily: “‘Trebuchet MS’, sans-serif”, color: “#d4b08a”, flexShrink: 0, }, barTrack: { flex: 1, height: 10, background: “#261a0e”, borderRadius: 5, overflow: “hidden”, }, barFill: { height: “100%”, borderRadius: 5, transition: “width 0.8s cubic-bezier(.25,.46,.45,.94)”, }, barValue: { width: 90, fontSize: 12, fontFamily: “‘Trebuchet MS’, sans-serif”, color: “#f5ede0”, textAlign: “right”, flexShrink: 0, }, covTitle: { fontSize: 11, fontFamily: “‘Trebuchet MS’, sans-serif”, textTransform: “uppercase”, letterSpacing: “0.14em”, color: “#c49060”, margin: “24px 0 12px”, paddingLeft: 4, }, covGrid: { display: “grid”, gridTemplateColumns: “1fr 1fr”, gap: 14, marginBottom: 20 }, covCard: { background: “#261a0e”, border: “1px solid #3d2a15”, borderRadius: 10, padding: “18px 16px”, }, covCardHL: { background: “#3d1e08”, border: “2px solid #c45c1a”, }, covBadge: { fontSize: 10, fontFamily: “‘Trebuchet MS’, sans-serif”, letterSpacing: “0.1em”, color: “#c45c1a”, fontWeight: 700, marginBottom: 6, }, covCardLabel: { fontSize: 11, fontFamily: “‘Trebuchet MS’, sans-serif”, color: “#c49060”, marginBottom: 6, textTransform: “uppercase”, letterSpacing: “0.06em”, }, covCardValue: { fontSize: 22, fontWeight: 700, letterSpacing: “-0.01em”, marginBottom: 4, }, covCardNote: { fontSize: 11, fontFamily: “‘Trebuchet MS’, sans-serif”, color: “#8a6540”, fontStyle: “italic”, }, okNotes: { background: “#1e1208”, border: “1px solid #3d2a15”, borderRadius: 10, padding: “18px 20px”, marginBottom: 16, }, okNotesTitle: { fontSize: 13, fontFamily: “‘Trebuchet MS’, sans-serif”, fontWeight: 700, color: “#e8a87c”, marginBottom: 12, textTransform: “uppercase”, letterSpacing: “0.06em”, }, okNoteItem: { fontSize: 12, fontFamily: “‘Trebuchet MS’, sans-serif”, color: “#b08060”, lineHeight: 1.6, marginBottom: 6, paddingLeft: 12, borderLeft: “2px solid #4a2a10”, }, disclaimer: { fontSize: 11, fontFamily: “‘Trebuchet MS’, sans-serif”, color: “#6a4a2a”, fontStyle: “italic”, lineHeight: 1.6, borderTop: “1px solid #2a1a08”, paddingTop: 14, marginTop: 8, }, footer: { textAlign: “center”, padding: “20px”, fontSize: 11, fontFamily: “‘Trebuchet MS’, sans-serif”, color: “#4a3020”, borderTop: “1px solid #2a1a08”, }, };