> For the complete documentation index, see [llms.txt](https://help.craftsmanplus.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.craftsmanplus.com/play/properties/dynamic-content.md).

# Dynamic Content

**Dynamic Content** lets a layer show or hide based on the real-world context of the person viewing your playable. Set a condition on a layer, and at runtime the layer only displays when the viewer's environment matches it.

For example, you could build a single project where:

* A "Good Morning" banner shows in the morning and a "Good Evening" banner shows at night.
* English copy shows for English speakers and Spanish copy shows for Spanish speakers.
* An App Store button shows on iOS and a Google Play button shows on Android.
* A New York storefront shows for viewers in the US and a London storefront shows for viewers in the UK.
* A winter coat is featured when it's cold outside and swimwear is featured when it's hot.

Dynamic Content is configured per layer from the properties panel, and everything is embedded directly inside the creative. No external data source is required.

***

### Condition Categories

Layers can be made dynamic using five condition categories:

* **Time** - hours of the day, days of the week, or months of the year
* **Language** - the language of the viewer's device
* **Device** - the viewer's operating system or platform
* **Location** - the viewer's region, country, state, or city
* **Weather** - the temperature or weather conditions at the viewer's location

A layer can use up to **two** condition categories at once. For the full list of options in each category, see [Conditions](/play/properties/dynamic-content/conditions.md).

{% hint style="warning" %}
***Location** and **Weather** conditions rely on third-party calls, which not all ad partners support. See* [*Exporting*](/play/properties/dynamic-content/exporting.md) *for details.*
{% endhint %}

***

### Dynamic Content vs. Catalogue

Dynamic Content is one of two systems in PLAY for building contextual creatives. The other is Catalogue, which stores content externally and loads it at runtime.

Dynamic Content is the right choice for simpler setups: a handful of variants, all assets packed inside the creative, no external calls needed for Time, Language, or Device conditions. Catalogue is built for scale, with unlimited conditions and content that updates without re-exporting.

For a side-by-side breakdown, see [Catalogue vs. Dynamic Content](/play/catalogue/what-is-catalogue/catalogue-vs.-dynamic-content.md).

The editor updates the viewport automatically as you work with dynamic layers, so you always see a realistic version of your creative instead of every variant stacked on top of each other.

***

### What Displays in the Viewport

* Layers **without** Dynamic Content always display.
* Layers **with** Dynamic Content display based on the conditions of the layer you most recently selected.

Selecting a dynamic layer brings it into view along with every other layer that shares its conditions, while layers with conflicting conditions in the same category are hidden.

***

### Switching Between Dynamic Layers

The viewport tracks a dynamic state per category, and selecting layers updates it one category at a time:

* Selecting a layer set to **Tuesday** replaces a previous **Monday** state, because they're in the same category.
* Selecting a layer set to **January** doesn't clear the Tuesday state, because Time of day/week and Month are tracked independently.

Selecting a non-dynamic layer changes nothing. The viewport keeps showing the last dynamic state, so you can freely work on always-visible layers without your dynamic setup flickering in and out.

Selecting **multiple** dynamic layers at once displays every layer matching all of the selected layers' conditions.

{% hint style="info" %}
*When you open the* ***Preview**, it starts in the same dynamic state you were viewing in the editor, so the transition is seamless. See* [*Previewing & Testing*](/play/properties/dynamic-content/previewing-and-testing.md)
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.craftsmanplus.com/play/properties/dynamic-content.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
