> ## Documentation Index
> Fetch the complete documentation index at: https://develop.cotality.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Climate risk analytics

> Age of roof estimates and multi-peril climate risk scores for US residential properties, retrieved by CLIP. Three tools for full-suite or individual dataset access.

**Data capabilities:**

| Dataset          | Key metrics                                                                                                                                   | Use cases                                                                                              |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| **Age of roof**  | Estimated roof age (years), modeled construction year, confidence rank (statistical estimate — not a county record)                           | Insurance underwriting, hazard policy pricing, roof replacement planning                               |
| **Climate risk** | Peril-specific risk scores for wildfire, flood, hurricane/wind, hail, and earthquake — indexed by return period (50-year, 100-year, 200-year) | Multi-peril exposure modeling, portfolio risk concentration, compliance reporting, reinsurance pricing |

**Data scope:**

| Attribute            | Value                                                                                                                                                                                  |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Input**            | One or more CLIP identifiers (numeric string) — use [CLIP tools](/mcp/property-data/tools/clip-tools) to resolve an address to a CLIP first                                            |
| **Output**           | Response envelope — `success`, `data` (property array with AOR and/or climate risk payload), `count`, `messages`                                                                       |
| **Coverage**         | US residential properties                                                                                                                                                              |
| **Update frequency** | Age of roof: updated periodically from aerial/satellite imagery; climate risk: updated annually *(confirm exact schedule with data team)*                                              |
| **Exclusions**       | Commercial real estate is not covered. Age of Roof is a statistical model estimate — always check `yearBuiltModeledIndicator`; a value of `1` means the year is modeled, not recorded. |
| **Combine with**     | [Property characteristics](/mcp/property-data/tools/property-characteristics) for structural data; [Analytics](/mcp/market-trend-analytics/tools/analytics) for market context         |

***

## `pacra-property_analytics_by_clips_tool`

Retrieve comprehensive property analytics data — both age of roof and climate risk — for a list of CLIPs in a single call.

**When to use:**

* You need both roof condition and climate risk data for one or more properties
* Performing full property risk assessments that combine physical condition with climate exposure
* Running portfolio-level analyses where you want all available analytics in one request

**Examples:**

* *"Get full analytics for CLIPs 123456789 and 987654321"*
* *"Retrieve roof age and climate risk for CLIP 555555555"*

### Input schema

| Parameter | Type            | Required | Description                               |
| --------- | --------------- | -------- | ----------------------------------------- |
| `clips`   | `array[string]` | Yes      | A list of numeric CLIP identifier strings |

<Note>
  Each CLIP must be a non-empty string consisting only of numeric characters (e.g. `["123456789", "987654321"]`)
</Note>

### Example request

```json theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pacra-property_analytics_by_clips_tool",
    "arguments": {
      "clips": ["123456789"]
    }
  }
}
```

### Output schema

The response contains a standard envelope wrapping an array of `Property` objects that include both age of roof and climate risk data. See [Response envelope](#response-envelope) and the field references below.

***

## `pacra-property_analytics_age_of_roof_by_clips_tool`

Retrieve age of roof data only — roof age, construction year, confidence rank, and property address with geocode — for a list of CLIPs.

**When to use:**

* You only need roof condition data without climate risk scores
* Monitoring roof age across a portfolio for replacement planning
* Validating roof construction year during insurance underwriting

**Examples:**

* *"Get roof age for CLIP 123456789"*
* *"Check roof construction year and confidence for CLIPs 111111111 and 222222222"*

### Input schema

| Parameter | Type            | Required | Description                               |
| --------- | --------------- | -------- | ----------------------------------------- |
| `clips`   | `array[string]` | Yes      | A list of numeric CLIP identifier strings |

<Note>
  Each CLIP must be a non-empty string consisting only of numeric characters (e.g. `["123456789", "987654321"]`)
</Note>

### Example request

```json theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pacra-property_analytics_age_of_roof_by_clips_tool",
    "arguments": {
      "clips": ["123456789"]
    }
  }
}
```

### Output schema

The response contains a standard envelope wrapping an array of `PropertyWithAgeOfRoof` objects. The `propertyAnalytics` field contains only `ageOfRoof`. See [response envelope](#response-envelope) and [age of roof](#age-of-roof-types) below.

***

## `pacra-property_climate_risk_by_clips_tool`

Retrieve climate risk data only — multi-peril loss scores, RCP scenario comparisons, and time horizon projections — for a list of CLIPs.

Supported perils include flood, wildfire, hurricane, tornado, hail, wind, heat, and drought. Each peril provides current scores and forward-looking projections under RCP 4.5 and RCP 8.5 scenarios across multiple time horizons (current, mid-century, end-of-century).

**When to use:**

* You only need climate risk exposure without roof condition data
* Evaluating climate resilience for one or more properties
* Comparing future risk projections across RCP scenarios and time horizons

**Examples:**

* *"Get climate risk scores for CLIP 123456789"*
* *"Compare flood and wildfire risk for CLIPs 111111111 and 222222222"*

### Input schema

| Parameter | Type            | Required | Description                               |
| --------- | --------------- | -------- | ----------------------------------------- |
| `clips`   | `array[string]` | Yes      | A list of numeric CLIP identifier strings |

<Note>
  Each CLIP must be a non-empty string consisting only of numeric characters (e.g. `["123456789", "987654321"]`)
</Note>

### Example request

```json theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pacra-property_climate_risk_by_clips_tool",
    "arguments": {
      "clips": ["123456789"]
    }
  }
}
```

### Output schema

The response contains a standard envelope wrapping an array of `PropertyWithClimateRisk` objects. The `propertyAnalytics` field contains only `climateRiskAnalytics`. See [response envelope](#response-envelope) and [property climate risk analytics](#climate-risk-types) below.

***

## Response envelope

All three tools return an identical envelope:

| Field      | Type            | Description                                                      |
| ---------- | --------------- | ---------------------------------------------------------------- |
| `success`  | `boolean`       | Whether the request completed successfully                       |
| `data`     | `array`         | Array of property records (item type varies by tool — see below) |
| `count`    | `integer`       | Number of records in `data`                                      |
| `messages` | `array[string]` | Informational or warning messages                                |

All four fields are **always present** in every response.

***

## Data items

Each tool returns items in the `data` array with the following top-level fields. All fields are optional, nullable, and default to `null`.

| Field               | Type     | Description                                           |
| ------------------- | -------- | ----------------------------------------------------- |
| `clip`              | `string` | Cotality CLIP identifier for the property             |
| `propertyAnalytics` | object   | Analytics payload (contents vary by tool — see below) |

The `propertyAnalytics` object contains different fields depending on which tool you call:

| Tool                                                 | `propertyAnalytics` contains                                                                                                                  |
| ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `pacra-property_analytics_by_clips_tool`             | `ageOfRoof` ([AgeOfRoof](#ageofroof)) + `climateRiskAnalytics` (array\[[PropertyClimateRiskAnalytics](#propertyclimateriskanalytics-fields)]) |
| `pacra-property_analytics_age_of_roof_by_clips_tool` | `ageOfRoof` ([AgeOfRoof](#ageofroof)) only                                                                                                    |
| `pacra-property_climate_risk_by_clips_tool`          | `climateRiskAnalytics` (array\[[PropertyClimateRiskAnalytics](#propertyclimateriskanalytics-fields)]) only                                    |

Both `ageOfRoof` and `climateRiskAnalytics` are optional, nullable, and default to `null`.

***

## Age of roof types

### AgeOfRoof

The `ageOfRoof` object is a container for roof analytics data. All fields are optional, nullable, and default to `null`.

| Field     | Type             | Description                                |
| --------- | ---------------- | ------------------------------------------ |
| `roofAge` | `array[RoofAge]` | Array of roof age records for the property |

### RoofAge

Each `RoofAge` record contains roof condition estimates, construction year, and the associated address and geocode. All fields are optional, nullable, and default to `null`.

| Field                           | Type          | Description                                                                     |
| ------------------------------- | ------------- | ------------------------------------------------------------------------------- |
| `address`                       | `RoofAddress` | Address information for the property (see [RoofAddress](#roofaddress))          |
| `geocode`                       | `RoofGeoCode` | Geocode coordinates for the property (see [RoofGeoCode](#roofgeocode))          |
| `medianRoofConstructedAge`      | `integer`     | Median roof construction age across properties at this location                 |
| `medianRoofConstructedYear`     | `integer`     | Median roof construction year across properties at this location                |
| `roofConstructedAge`            | `integer`     | Estimated age of the roof in years                                              |
| `roofConstructedConfidenceRank` | `string`      | Confidence rank for the roof construction estimate (`HIGH`, `MEDIUM`, or `LOW`) |
| `roofConstructedYear`           | `integer`     | Estimated year the roof was constructed or last replaced                        |
| `totalNumberOfProperties`       | `integer`     | Total number of properties evaluated at this location                           |
| `yearBuilt`                     | `integer`     | Year the building was originally constructed                                    |
| `yearBuiltModeledIndicator`     | `integer`     | Indicator for whether the year built value is modeled (1) or recorded (0)       |

### RoofAddress

Address information associated with the roof analytics record. All fields are optional, nullable, and default to `null`.

| Field               | Type     | Description                                |
| ------------------- | -------- | ------------------------------------------ |
| `address1`          | `string` | Primary address line                       |
| `address2`          | `string` | Secondary address line                     |
| `city`              | `string` | City name                                  |
| `state`             | `string` | State abbreviation                         |
| `zipCode`           | `string` | 5-digit ZIP code                           |
| `streetName`        | `string` | Street name                                |
| `house1Number`      | `string` | House / street number                      |
| `predirectionCode`  | `string` | Street directional prefix (e.g. "N", "SW") |
| `postdirectionCode` | `string` | Street directional suffix                  |
| `suffixCode`        | `string` | Street suffix (e.g. "ST", "AVE")           |
| `prefixCode`        | `string` | Street name prefix                         |
| `zipPlus4Code`      | `string` | ZIP+4 code                                 |
| `unitType`          | `string` | Unit type (e.g. "APT", "STE")              |
| `unitNumber`        | `string` | Unit / apartment number                    |

### RoofGeoCode

Geocode coordinates for the roof analytics record. All fields are optional, nullable, and default to `null`.

| Field       | Type     | Description          |
| ----------- | -------- | -------------------- |
| `latitude`  | `number` | Latitude coordinate  |
| `longitude` | `number` | Longitude coordinate |

***

## Understanding `roofConstructedConfidenceRank`

The `RoofAge` object returns a `roofConstructedConfidenceRank` of `HIGH`, `MEDIUM`, or `LOW`. This value reflects the model's confidence in the estimated construction year — not the age itself. A `LOW` confidence estimate is not equivalent to missing data; it means the model produced an estimate but from weaker underlying signals.

***

## Climate risk types

### PropertyClimateRiskAnalytics fields

Each `PropertyClimateRiskAnalytics` record contains the climate risk model metadata, geocode, and per-peril risk data. All fields are optional, nullable, and default to `null`.

| Field                     | Type                          | Description                                                                                                  |
| ------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `craRecordIdentification` | `string`                      | Unique identifier for this climate risk analytics record                                                     |
| `craStructureGeocode`     | `PropertyCraStructureGeocode` | Geocode used for the climate risk analysis (see [PropertyCraStructureGeocode](#propertycrastructuregeocode)) |
| `modelRunDate`            | `string`                      | Date the climate risk model was executed                                                                     |
| `modelVersion`            | `string`                      | Version of the climate risk model used                                                                       |
| `perils`                  | `array[CraPeril]`             | Array of per-peril risk data (see [CraPeril](#craperil))                                                     |
| `riskTypeScoreGroup`      | `string`                      | Risk type score grouping for this record                                                                     |

### PropertyCraStructureGeocode

Geocode coordinates used for the climate risk analysis. All fields are optional, nullable, and default to `null`.

| Field       | Type               | Description          |
| ----------- | ------------------ | -------------------- |
| `latitude`  | `number or string` | Latitude coordinate  |
| `longitude` | `number or string` | Longitude coordinate |

### CraPeril

Each `CraPeril` record represents a single peril type (e.g. flood, wildfire, hurricane) and contains RCP scenario data for that peril. All fields are optional, nullable, and default to `null`.

| Field            | Type                 | Description                                                               |
| ---------------- | -------------------- | ------------------------------------------------------------------------- |
| `description`    | `string`             | Human-readable name of the peril (e.g. "Flood", "Wildfire")               |
| `identification` | `string`             | Machine-readable peril identifier                                         |
| `rcpScenarios`   | `array[RcpScenario]` | RCP scenario projections for this peril (see [RcpScenario](#rcpscenario)) |

### RcpScenario

Each `RcpScenario` record represents a Representative Concentration Pathway scenario (e.g. RCP 4.5 or RCP 8.5) and contains time horizon projections. All fields are optional, nullable, and default to `null`.

| Field                 | Type                    | Description                                                                          |
| --------------------- | ----------------------- | ------------------------------------------------------------------------------------ |
| `climateScenarioCode` | `string`                | RCP scenario identifier (e.g. `"4.5"`, `"8.5"`)                                      |
| `timeHorizons`        | `array[CraTimeHorizon]` | Time horizon projections under this scenario (see [CraTimeHorizon](#cratimehorizon)) |

### CraTimeHorizon

Each `CraTimeHorizon` record contains loss metrics for a specific time horizon under one RCP scenario. Metrics include average annual loss, Annual Exceedance Probability (AEP), Occurrence Exceedance Probability (OEP), and their Tail Value-at-Risk (TVaR) counterparts at 50-, 100-, 200-, and 500-year return periods. All fields are optional, nullable, and default to `null`.

| Field                                            | Type               | Description                                                         |
| ------------------------------------------------ | ------------------ | ------------------------------------------------------------------- |
| `timeHorizon`                                    | `integer`          | Projection year for this time horizon (e.g. `2030`, `2050`, `2100`) |
| `averageAnnualLossRatio`                         | `number or string` | Expected annual loss as a ratio of property value                   |
| `averageAnnualLossRiskScore`                     | `integer`          | Risk score derived from the average annual loss                     |
| `annualExceedanceProbability50YearLoss`          | `number or string` | AEP loss estimate for a 50-year return period                       |
| `annualExceedanceProbability100YearLoss`         | `number or string` | AEP loss estimate for a 100-year return period                      |
| `annualExceedanceProbability200YearLoss`         | `number or string` | AEP loss estimate for a 200-year return period                      |
| `annualExceedanceProbability500YearLoss`         | `number or string` | AEP loss estimate for a 500-year return period                      |
| `annualExceedanceProbability50YearLossTvar`      | `number or string` | AEP Tail Value-at-Risk for a 50-year return period                  |
| `annualExceedanceProbability100YearLossTvar`     | `number or string` | AEP Tail Value-at-Risk for a 100-year return period                 |
| `annualExceedanceProbability200YearLossTvar`     | `number or string` | AEP Tail Value-at-Risk for a 200-year return period                 |
| `annualExceedanceProbability500YearLossTvar`     | `number or string` | AEP Tail Value-at-Risk for a 500-year return period                 |
| `occurrenceExceedenceProbability50YearLoss`      | `number or string` | OEP loss estimate for a 50-year return period                       |
| `occurrenceExceedenceProbability100YearLoss`     | `number or string` | OEP loss estimate for a 100-year return period                      |
| `occurrenceExceedenceProbability200YearLoss`     | `number or string` | OEP loss estimate for a 200-year return period                      |
| `occurrenceExceedenceProbability500YearLoss`     | `number or string` | OEP loss estimate for a 500-year return period                      |
| `occurrenceExceedenceProbability50YearLossTvar`  | `number or string` | OEP Tail Value-at-Risk for a 50-year return period                  |
| `occurrenceExceedenceProbability100YearLossTvar` | `number or string` | OEP Tail Value-at-Risk for a 100-year return period                 |
| `occurrenceExceedenceProbability200YearLossTvar` | `number or string` | OEP Tail Value-at-Risk for a 200-year return period                 |
| `occurrenceExceedenceProbability500YearLossTvar` | `number or string` | OEP Tail Value-at-Risk for a 500-year return period                 |

***

## Sample response — full analytics

```json theme={null}
{
  "success": true,
  "count": 1,
  "data": [
    {
      "clip": "123456789",
      "propertyAnalytics": {
        "ageOfRoof": {
          "roofAge": [
            {
              "address": {
                "address1": "123 MAIN ST",
                "address2": null,
                "city": "LOS ANGELES",
                "state": "CA",
                "zipCode": "90001",
                "streetName": "MAIN",
                "house1Number": "123",
                "predirectionCode": null,
                "postdirectionCode": null,
                "suffixCode": "ST",
                "prefixCode": null,
                "zipPlus4Code": "1234",
                "unitType": null,
                "unitNumber": null
              },
              "geocode": {
                "latitude": 34.0522,
                "longitude": -118.2437
              },
              "medianRoofConstructedAge": 18,
              "medianRoofConstructedYear": 2008,
              "roofConstructedAge": 16,
              "roofConstructedConfidenceRank": "HIGH",
              "roofConstructedYear": 2010,
              "totalNumberOfProperties": 1,
              "yearBuilt": 1985,
              "yearBuiltModeledIndicator": 0
            }
          ]
        },
        "climateRiskAnalytics": [
          {
            "craRecordIdentification": "CRA-123456789",
            "craStructureGeocode": {
              "latitude": 34.0522,
              "longitude": -118.2437
            },
            "modelRunDate": "2025-01-15",
            "modelVersion": "3.0",
            "perils": [
              {
                "description": "Flood",
                "identification": "FLOOD",
                "rcpScenarios": [
                  {
                    "climateScenarioCode": "4.5",
                    "timeHorizons": [
                      {
                        "timeHorizon": 2030,
                        "averageAnnualLossRatio": 0.00045,
                        "averageAnnualLossRiskScore": 12,
                        "annualExceedanceProbability50YearLoss": 0.0023,
                        "annualExceedanceProbability100YearLoss": 0.0051,
                        "annualExceedanceProbability200YearLoss": 0.0089,
                        "annualExceedanceProbability500YearLoss": 0.0142,
                        "annualExceedanceProbability50YearLossTvar": 0.0038,
                        "annualExceedanceProbability100YearLossTvar": 0.0072,
                        "annualExceedanceProbability200YearLossTvar": 0.012,
                        "annualExceedanceProbability500YearLossTvar": 0.019,
                        "occurrenceExceedenceProbability50YearLoss": 0.0019,
                        "occurrenceExceedenceProbability100YearLoss": 0.0045,
                        "occurrenceExceedenceProbability200YearLoss": 0.0078,
                        "occurrenceExceedenceProbability500YearLoss": 0.0125,
                        "occurrenceExceedenceProbability50YearLossTvar": 0.0031,
                        "occurrenceExceedenceProbability100YearLossTvar": 0.0063,
                        "occurrenceExceedenceProbability200YearLossTvar": 0.0105,
                        "occurrenceExceedenceProbability500YearLossTvar": 0.017
                      }
                    ]
                  },
                  {
                    "climateScenarioCode": "8.5",
                    "timeHorizons": [
                      {
                        "timeHorizon": 2030,
                        "averageAnnualLossRatio": 0.00052,
                        "averageAnnualLossRiskScore": 14,
                        "annualExceedanceProbability50YearLoss": 0.0028,
                        "annualExceedanceProbability100YearLoss": 0.006,
                        "annualExceedanceProbability200YearLoss": 0.0103,
                        "annualExceedanceProbability500YearLoss": 0.0168,
                        "annualExceedanceProbability50YearLossTvar": 0.0045,
                        "annualExceedanceProbability100YearLossTvar": 0.0085,
                        "annualExceedanceProbability200YearLossTvar": 0.0141,
                        "annualExceedanceProbability500YearLossTvar": 0.0224,
                        "occurrenceExceedenceProbability50YearLoss": 0.0023,
                        "occurrenceExceedenceProbability100YearLoss": 0.0053,
                        "occurrenceExceedenceProbability200YearLoss": 0.0091,
                        "occurrenceExceedenceProbability500YearLoss": 0.0148,
                        "occurrenceExceedenceProbability50YearLossTvar": 0.0037,
                        "occurrenceExceedenceProbability100YearLossTvar": 0.0075,
                        "occurrenceExceedenceProbability200YearLossTvar": 0.0124,
                        "occurrenceExceedenceProbability500YearLossTvar": 0.0201
                      }
                    ]
                  }
                ]
              },
              {
                "description": "Wildfire",
                "identification": "WILDFIRE",
                "rcpScenarios": [
                  {
                    "climateScenarioCode": "4.5",
                    "timeHorizons": [
                      {
                        "timeHorizon": 2030,
                        "averageAnnualLossRatio": 0.0032,
                        "averageAnnualLossRiskScore": 68,
                        "annualExceedanceProbability50YearLoss": 0.015,
                        "annualExceedanceProbability100YearLoss": 0.034,
                        "annualExceedanceProbability200YearLoss": 0.058,
                        "annualExceedanceProbability500YearLoss": 0.095,
                        "annualExceedanceProbability50YearLossTvar": 0.025,
                        "annualExceedanceProbability100YearLossTvar": 0.048,
                        "annualExceedanceProbability200YearLossTvar": 0.081,
                        "annualExceedanceProbability500YearLossTvar": 0.13,
                        "occurrenceExceedenceProbability50YearLoss": 0.013,
                        "occurrenceExceedenceProbability100YearLoss": 0.03,
                        "occurrenceExceedenceProbability200YearLoss": 0.051,
                        "occurrenceExceedenceProbability500YearLoss": 0.084,
                        "occurrenceExceedenceProbability50YearLossTvar": 0.021,
                        "occurrenceExceedenceProbability100YearLossTvar": 0.042,
                        "occurrenceExceedenceProbability200YearLossTvar": 0.071,
                        "occurrenceExceedenceProbability500YearLossTvar": 0.115
                      }
                    ]
                  }
                ]
              }
            ],
            "riskTypeScoreGroup": "PROPERTY"
          }
        ]
      }
    }
  ],
  "messages": []
}
```
