UAD 3.6 Form Structure
Complete reference for the Uniform Appraisal Dataset (UAD) 3.6 form structure.Overview
UAD 3.6 is the standardized data format for real estate appraisals. DeepV-ADK provides comprehensive support for UAD 3.6 data validation and processing.Form Types
1004 - Single-Family Residential
The standard form for single-family home appraisals. Structure: ``json
{
"formType": "1004",
"version": "3.6",
"subject": {
"propertyAddress": {
"street": "123 Main St",
"city": "Anytown",
"state": "CA",
"zip": "12345"
},
"borrower": {
"name": "John Doe"
},
"legalDescription": "Lot 1, Block 2, Example Subdivision"
},
"contract": {
"salePrice": 500000,
"date": "2025-11-01",
"propertyRights": "Fee Simple"
},
"neighborhood": {
"locationRating": "Good",
"builtUp": "Over 75%",
"growth": "Stable",
"propertyValues": "Stable",
"demandSupply": "In Balance"
}
}
`
1073 - Condominium
For condominium unit appraisals.
Key Sections:
- Unit description
- Project information
- HOA details
- Common elements
1025 - Small Residential Income
For 2-4 unit properties.
Key Sections:
- Income analysis
- Expense analysis
- Operating statement
- Capitalization
Field Categories
Property Information
`json
{
"propertyInfo": {
"occupancy": "Owner Occupied",
"propertyType": "Single Family",
"design": "Ranch",
"yearBuilt": 1995,
"effectiveAge": 10,
"totalRooms": 7,
"bedrooms": 3,
"bathrooms": 2.5,
"grossLivingArea": 2000,
"basementArea": 1000,
"garageType": "Attached",
"garageSpaces": 2
}
}
`
Site Information
`json
{
"site": {
"dimensions": "100x150",
"area": 15000,
"shape": "Rectangular",
"view": "Residential",
"utilities": {
"electricity": "Public",
"gas": "Public",
"water": "Public",
"sanitary": "Public"
}
}
}
`
Improvements
`json
{
"improvements": {
"foundation": "Concrete Slab",
"exteriorWalls": "Vinyl Siding",
"roofSurface": "Asphalt Shingle",
"guttersDownspouts": "Aluminum",
"windowType": "Double Hung/Vinyl",
"stormSash": "None",
"screens": "Yes"
}
}
`
Interior
`json
{
"interior": {
"floors": "Hardwood/Carpet",
"walls": "Drywall",
"trim": "Wood",
"bathFloor": "Ceramic Tile",
"bathWainscot": "Ceramic Tile",
"doorsType": "Wood Panel",
"heating": "Forced Air",
"cooling": "Central Air"
}
}
`
Comparable Sales
`json
{
"comparables": [
{
"number": 1,
"address": "456 Oak St",
"proximityToSubject": "0.5 miles",
"salePrice": 495000,
"salePricePerGLA": 247.50,
"dateOfSale": "2025-10-15",
"dataSource": "MLS",
"verification": "Public Records",
"siteArea": 14000,
"gla": 2000,
"rooms": 7,
"bedrooms": 3,
"bathrooms": 2.5,
"adjustments": {
"total": 5000,
"net": 5000,
"gross": 5000
}
}
]
}
`
Validation Rules
Required Fields
All UAD 3.6 forms must include:
`typescript
const requiredFields = [
'formType',
'version',
'subject.propertyAddress',
'subject.borrower',
'contract.salePrice',
'propertyInfo.yearBuilt',
'propertyInfo.grossLivingArea',
'comparables' // Minimum 3 comparables
];
`
Field Constraints
`typescript
const constraints = {
yearBuilt: {
min: 1800,
max: new Date().getFullYear() + 2
},
grossLivingArea: {
min: 100,
max: 20000
},
comparables: {
min: 3,
max: 6,
maxAge: 365 // days
},
salePrice: {
min: 0,
max: 100000000
}
};
`
Data Types
`typescript
const fieldTypes = {
'yearBuilt': 'integer',
'grossLivingArea': 'integer',
'salePrice': 'decimal',
'dateOfSale': 'date',
'propertyAddress.street': 'string',
'propertyAddress.zip': 'string(5|9)'
};
`
Form Sections
Section 1: Subject Property
Property identification
Legal description
Assignment details
Borrower information
Section 2: Contract Information
Sale price and date
Property rights
Financing terms
Section 3: Neighborhood
Location characteristics
Market conditions
Property values trend
Section 4: Site
Dimensions and area
Zoning compliance
Utilities and improvements
Section 5: Improvements
Foundation and structure
Exterior features
Interior features
Systems and equipment
Section 6: Sales Comparison Approach
Comparable sales analysis
Adjustments grid
Value reconciliation
Section 7: Income Approach
Rental analysis (if applicable)
Capitalization rate
Estimated value
Section 8: Reconciliation
Approach reconciliation
Final value estimate
Market value conclusion
API Integration
Submitting UAD Data
`typescript
const uadData = {
formType: '1004',
version: '3.6',
// ... UAD form data
};
const result = await client.validateUAD({
data: uadData,
strictMode: true
});
if (result.valid) {
console.log('UAD form is valid');
} else {
console.error('Validation errors:', result.errors);
}
`
Parsing UAD XML
`typescript
import { parseUAD } from '@deepv/adk-sdk';
const xmlData =
;
const parsed = parseUAD(xmlData);
`
Generating UAD Forms
`typescript
const form = client.createUADForm({
type: '1004',
version: '3.6',
data: {
subject: subjectData,
contract: contractData,
comparables: comparablesData
}
});
const xml = form.toXML();
const json = form.toJSON();
`
Common Patterns
Adjustments Calculation
`typescript
function calculateAdjustments(subject: Property, comparable: Property) {
const adjustments = {
siteArea: 0,
gla: 0,
bedrooms: 0,
bathrooms: 0
};
// Site area adjustment: $5 per sq ft difference
adjustments.siteArea = (subject.siteArea - comparable.siteArea) * 5;
// GLA adjustment: $100 per sq ft difference
adjustments.gla = (subject.gla - comparable.gla) * 100;
// Bedroom adjustment: $5,000 per bedroom
adjustments.bedrooms = (subject.bedrooms - comparable.bedrooms) * 5000;
// Bathroom adjustment: $3,000 per bathroom
adjustments.bathrooms = (subject.bathrooms - comparable.bathrooms) * 3000;
const total = Object.values(adjustments).reduce((a, b) => a + b, 0);
return {
adjustments,
total,
adjustedPrice: comparable.salePrice + total
};
}
`
Comparable Selection
`typescript
function selectComparables(subject: Property, candidates: Property[]) {
return candidates
.filter(c => {
// Must be within 1 mile
if (c.distance > 1) return false;
// Must be within 12 months
if (daysSince(c.saleDate) > 365) return false;
// Must be similar size (within 30%)
const sizeRatio = c.gla / subject.gla;
if (sizeRatio < 0.7 || sizeRatio > 1.3) return false;
return true;
})
.sort((a, b) => {
// Sort by similarity score
return similarityScore(subject, b) - similarityScore(subject, a);
})
.slice(0, 6); // Take top 6
}
``
Next Steps
Found an issue? Help us improve this page.