Attributes
Attributes give your team a shared vocabulary for customer decisions: plan, renewal date, last purchase or spend over the last 30 days. Each belongs to a schema and has a defined value type. The key decision is where its value comes from.
| Kind | Use it when | How the value changes |
|---|---|---|
| Stored field | Your product, import or integration knows the fact, such as a plan or renewal date | A record write supplies it; a missing-value policy can fill it at creation |
| Evaluated attribute | You need a related record or a calculation from the data currently available | Generated logic runs when the field is expanded |
| Computed attribute | You need a recurring measure of event history, such as 30-day purchase count | A background calculation publishes a value on a schedule; expansion reads that published result |
For a renewal campaign, store the renewal date, use an evaluated relationship to find the subscription, and use a computed attribute for recent product activity. These are different controls with different freshness expectations.
Add a field to a schema
Open Settings → Schemas, choose a contact or object schema, then open Attributes → Create attribute. For business event schemas, open Settings → Events and the event's Properties tab.
Choose a type, a Name people will recognize, a Key for templates and integrations, and a Description. Explain units and business meaning in the description: “Monthly subscription amount in EUR, excluding tax” is more useful than “Amount.” maxinja uses this context when generating audiences and logic.
The key is fixed after creation, as is the field's underlying type. It must be unique within the schema and cannot reuse a built-in field. Use a stable name such as renewalDate; changing the display name later does not change references to that key.
Pick the right type
| Type | Suitable for | Controls that affect the value |
|---|---|---|
| Text | Names, categories, descriptions | Single or multi-line; fixed options for a dropdown or radio group; code format and language for multi-line content |
| Email or Phone | A contact detail held in a custom field | Format validation and normalization |
| URL | Web pages, files or images | Target type; optional file or image preview |
| Number | Counts, quantities, ratios | Integer only, percentage, or minimum and maximum bounds |
| Decimal | Exact amounts such as money | Optional currency |
| Checkbox | True or false | Checkbox or dropdown presentation |
| Timestamp, Date, Time | A moment, calendar date or time of day | Choose the precision your decision needs |
| Multi-select | Several text values | Optional fixed choices; multi-select dropdown or checkboxes |
| Address or Geolocation | Structured location information | The field's expected address or location shape |
| JSON | Nested properties, arrays or other structured data | A JSON schema defines allowed values and required properties |
| Evaluated on demand | Related records or a calculated answer | A generated definition chooses a record target and cardinality, or a JSON result |
A custom email field does not replace the contact's built-in email identity or sending address. A JSON field does not create a relationship just because it contains an ID. Model those connections explicitly.
Validation applies to writes from the app, API, forms and imports. Read the error for the field that failed, then correct the source or the schema. A field with a fixed option list accepts its configured values, not any similarly worded label.
Decide what happens when a value is missing
The stored-field form asks When a record is created without a value:
| Choice | What happens on creation |
|---|---|
| Leave it empty | Save the record without a value |
| Use a default value | Supply the fixed value you choose |
| Require it | Reject the record and report the missing attribute |
| AI autofill | Generate a value from the rest of that record |
AI autofill offers Infer from the record and Follow a prompt. A prompt should specify the intended output and what to do with weak evidence. The resulting value must still pass the field's type validation.
These policies apply when a record is created. They do not fill old records retroactively and do not run on an update that omits or clears the field. An explicitly supplied value takes precedence. An explicit empty value is still checked against whether the field accepts emptiness.
AI autofill is paid generation for each new record and missing AI field that needs it. It is not an ongoing enrichment subscription. An import that matches existing contacts does not regenerate their missing fields. Use a fixed default for a fixed answer, and test a small import before scaling paid enrichment.
Fields maxclicks works out for you
Choose Evaluated on demand when you need a reusable relationship or answer on demand. For example: “Find the Subscription whose external ID equals this customer's subscription ID.” Review the generated target, whether it returns one record or many, and its readable definition. See evaluated attributes.
Choose a computed attribute for a recurring measurement of event history. It has its own creation and publication flow below.
Computed attributes
Open Settings → Events → Computed attributes, or the Computed attributes tab of a business event schema or collected event. Choose Create attribute, then specify Whose profile?: the contact or object schema that will receive the result. Event schemas themselves are not a destination for these profile values.
Describe the source, measure, time window and refresh schedule. For example:
For Customer profiles, count PurchaseCompleted events explicitly linked to that customer in the last 30 days. Include only events whose status is completed. Update every hour.
The current calculation supports one business event schema or one collected-event definition as its source, with:
- Count, sum of a numeric property, or the latest property value by occurrence time.
- Typed filters on available properties, including comparisons, presence checks and AND/OR groups.
- An optional grouping property, which produces a JSON array of grouped values.
- A rolling window from 60 seconds to 30 days and an update cadence from one hour to 30 days. If unspecified, generation proposes a 30-day window with hourly updates.
The source must identify the contact or object it describes. A custom property containing an email address or an order ID is not a substitute for the explicit subject link. The calculation does not invent a join through unrelated records. For a more complex relationship, use an evaluated attribute or prepare the required fact in your source system.
Review before creating
The dialog walks through Describe → Review → Create. Check the description, inferred type, destination profile and update cadence. Additional details exposes the field's stable API key and description; this key is the attribute name used by content, not an authentication token.
For business event schemas, Preview values samples up to five existing profiles. It shows the window's end and No matching value when no qualifying events exist. A preview does not save the attribute or publish a background result. A collected-event source can be reviewed after its first calculation; it does not have this sample preview.
Refine an incorrect definition and generate it again before saving. Typing an instruction alone does not apply it. Count produces an integer, sum produces a decimal, and latest follows the source property's type. An incompatible change to the result type requires a new attribute.
Current calculation limits allow up to 10 definitions per workspace and up to 20 grouping values. A preview can also reject a sample that is too large. Narrow the window or grouping when the error asks for it; a preview is a bounded validation step, not an export of the entire audience.
Understand publication and freshness
The Published value panel shows Data through, Last completed and Published results. “Data through” is the end of the measured event window; it is the timestamp to compare with your campaign's decision, rather than the time you opened the record.
| Status | What to do |
|---|---|
| Waiting for first calculation | Wait for a published result before relying on the field |
| Calculating | A refresh is in progress; the previous published result may still be available |
| Updated | A published result is within its expected refresh interval |
| Delayed | The result is older than its cadence plus a short grace period; inspect the source and refresh status |
| Updates paused | Enable updates when you want scheduled calculations to continue |
| Needs attention | Read the reported source or calculation error and correct it |
Refresh now queues a calculation. It does not synchronously replace the value. Check the published timestamp after the calculation completes.
No matching history produces an empty value, not zero. No published generation also produces no usable value. A stale calculation can retain its last published value, so “has a value” does not mean “is current.” Write audience and content fallback rules deliberately, especially when absence means “we have not observed this customer” rather than “this customer did nothing.”
Broadcast revisions and workflow root runs hold a selected generation for consistent reads; a newer publication does not automatically replace their in-progress context. See expansion freshness before using a current profile preview to explain an older run.
These are read-only calculated fields: imports and API record writes cannot set them. They must be selected through attribute expansion for email and workflow data. A Trait Threshold workflow trigger can react to published values crossing a configured condition; review that trigger's baseline and transition rules before activating it.
What you can change later, and what you cannot
Open an attribute to change its display name, description and supported settings. Its key and underlying type stay fixed. Tightening a stored field's allowed values changes what future writes accept; it does not repair your source data.
For computed attributes, update the definition or cadence, then inspect the next published result. Computed fields must allow empty values and cannot also use a missing-value default or AI autofill.
Dependencies can block deletion. The error identifies the attribute, audience or other definition still using the field; replace those references before retrying. Integration-owned fields are locked, while your own fields added to the same schema remain yours to manage.
Use a field's value
Use the record and field paths shown in the editor's Data tab. A broadcast's contact key comes from its contact schema; templates and workflows can declare their own data keys. Stored writable fields arrive with the record. Evaluated and computed attributes require expansion.
The public Attributes API describes field definitions. The Records API reads and writes supported stored record data; a plain record response does not include evaluated relationships or published computed values. See Liquid for email field paths and fallbacks.