---
title: "Property Changed"
description: "Monitor node property changes with flexible conditions for old and new values, triggering actions based on precise state transitions. (Gitana 4.0)"
product: "Gitana"
version: "4.0"
url: "/documentation/gitana/4.0/engine/behaviors/conditions/property-changed"
---

# Property Changed

The `propertyChanged` condition tests whether a property on a node changed its value in a prescribed way. You can use this condition to test if a node property changed at all, from a specific value or to a specific value (or both).

## JSON Schema

```
{
    "title": "Property Changed",
    "properties": {
        "property": {
            "type": "string",
            "title": "Property Name",
            "required": true
        },
        "oldValue": {
            "type": "string",
            "title": "Old Value"
        },
        "newValue": {
            "type": "string",
            "title": "New Value"
        }
    }
}
```

This condition offers several different behaviors:

- if `oldValue` and `newValue` are empty, the condition will trigger whenever a property changes on a node. The property may change from any value to any other value.
- if `oldValue` is provided but `newValue` is empty, the condition will trigger whenever the property changes AND the `oldValue` matches. The property may change to any new value.
- if `oldValue` is empty but `newValue` is provided, the condition will trigger whenever the property changes AND the `newValue` matches. The property may change from any new value.
- if both `oldValue` and `newValue` are provided, then an exact match between the old property value and the new property value will be checked and the condition will only trigger on that exact match.

## Example #1

Suppose you wanted to test for cases where a `state` property changes. You could set up the condition like this:

```
{
    "type": "propertyChanged",
    "config": {
        "property": "state"
    }
}
```

You might use something like this to fire off a web hook whenever the state of a node changes.

## Example #2

Suppose you wanted to test for cases where a `state` property changes from `published` to anything else. You could set up the condition like this:

```
{
    "type": "propertyChanged",
    "config": {
        "property": "state",
        "oldValue": "published"
    }
}
```

You might use something like this to fire off a web hook to invalidate presentation tier cache whenever a node moves from published to any other state, such as archived, WIP, or draft.

## Example #3

Suppose you wanted to test for cases where a `state` property changes to `published` from anything else. You could set up the condition like this:

```
{
    "type": "propertyChanged",
    "config": {
        "property": "state",
        "newValue": "published"
    }
}
```

You might use something like this to fire off a web hook to notify the presentation tier that a new article is being made available.

## Example #4

Suppose you wanted to test for cases where a `state` property changes from `published` to `archived`. You could set up the condition like this:

```
{
    "type": "propertyChanged",
    "config": {
        "property": "state",
        "oldValue": "published",
        "newValue": "archived"
    }
}
```

You might use something like this to fire off a web hook to copy an article down to a third-party DB when a node transitions from published to archived specifically.
