Device Facts let you personalize Device Settings, Custom Profiles and Managed App Configurations with device-specific data — automatically. Instead of maintaining separate configurations for each device, you can use dynamic variables that resolve to the correct value at deployment time, saving time and reducing the risk of manual error.
Overview
Addigy supports a set of template variables that pull from Device Facts and Custom Facts collected from each managed device. You can use these variables anywhere a static value would normally go — in an MDM payload field, a SCEP profile, or a Managed App Configuration key/value pair.
For example, instead of hardcoding a device's serial number or Wi-Fi MAC address into a profile, you reference the fact once using a variable. When Addigy deploys the profile or configuration, the variable is replaced with the actual value from that specific device.
Variables are supported in the following contexts:
- Device Settings & Custom Profiles — including SCEP, Mail, and other payloads that require per-device values.
- Managed App Configurations — key/value pairs deployed alongside Apple Apps via GoLive or policy.
Note: Variable substitution occurs at the time of deployment from Addigy. The raw variable syntax will be visible in the profile or configuration until it is pushed to a device.
Prerequisites
- The device must have the Device Fact or Custom Fact you intend to use already collected. Facts are gathered during device audits.
- You must know the identifier of the fact you want to use. See the section below for how to find it.
Supported Variables
Addigy supports the following variable types for use in Device Settings, Custom Profiles and Managed App Configurations:
| Variable | Description |
|---|---|
{{.OrgID}} |
The unique Organization ID for your Addigy environment. |
{{.AgentID}} |
The unique Agent ID for the individual device. |
{{.Fact "fact_identifier"}} |
The value of any Device Fact or Custom Fact, referenced by its identifier. |
Available Device Facts
The facts available for use as variables depend on the device platform.
macOS
Mac devices have access to the full set of Addigy Device Facts. For a complete list of available identifiers, please review the following: Default Device Facts and their Identifiers.
iOS and iPadOS
For iOS and iPadOS devices managed via MDM, the following Device Facts are available for use with the {{.Fact "identifier"}} variable syntax:
- active_managed_users
- agentid
- authenticated_root_volume_enabled
- awaiting_configuration
- battery_percentage
- bluetooth_mac
- bootstrap_token_allowed_for_authentication
- bootstrap_token_required_for_kernel_extension_approval
- bootstrap_token_required_for_software_update
- build_version
- carrier_settings_version
- cellular_technology
- current_carrier_network
- current_mcc
- current_mnc
- data_roaming_enabled
- days_since_last_cloud_backup
- device_model_name
- device_name
- eas_device_identifier
- ethernet_ma_cs
- filevault_key_escrowed
- free_disk_percentage
- free_disk_space_gb
- hardware_encryption_caps
- hardware_model
- has_mdm
- has_wireless
- iccid
- imei
- is_activation_lock_enabled
- is_cloud_backup_enabled
- is_device_locator_service_enabled
- is_do_not_disturb_in_effect
- is_mdm_lost_mode_enabled
- is_roaming
- is_supervised
- is_user_enrollment
- languages
- last_cloud_backup_date
- last_online
- locales
- localhost_name
- mac_uuid
- manufactured_date
- maximum_resident_users
- meid
- modem_firmware_version
- online
- os_version
- passcode_compliant
- passcode_compliant_with_profiles
- passcode_lock_grace_period
- passcode_lock_grace_period_enforced
- passcode_present
- personal_hotspot_enabled
- phone_number
- policy_id
- policy_ids
- product_name
- registration_date
- serial_number
- sim_carrier_network
- subscriber_carrier_network
- subscriber_mcc
- subscriber_mnc
- system_integrity_protection_enabled
- system_version
- total_disk_space_gb
- udid
- voice_roaming_enabled
- wifi_mac_address
How to Find a Fact Identifier
The variable syntax requires the fact's identifier, not its display name. For Device Facts, the full list of available identifiers is in the reference section above. For Custom Facts, use one of the following methods to look up the identifier.
Custom Facts — via Dashboard Events
- Navigate to Dashboard > Events.
- Search for the name of your Custom Fact.
- In the results, locate the entry for your fact. The identifier appears under Receiver Identifier.
Custom Facts — via Policy Deployment Status
- Navigate to Policies and select the policy where the Custom Fact is deployed.
- Select Status > Deployment Status > Custom Facts.
- Click on the Custom Fact, then click the arrow next to a device with a Success status.
- The output displayed will include the fact's identifier.
Note: Custom Fact identifiers are UUIDs, not human-readable names. Make sure you use the identifier retrieved from Dashboard Events or Policy Deployment Status, not the display name of the fact.
How to Use Variables in a Managed App Configuration
Use Device Fact variables in Managed App Configurations when an app requires per-device values — such as a device's serial number, username, or organization ID — to be set at the time of deployment.
When adding key/value pairs to a Managed App Configuration (via GoLive or Policy), enter the variable syntax directly in the Value field. Below are examples of common use cases:
| Key | Type | Value |
|---|---|---|
orgID |
String | {{.OrgID}} |
serialNumber |
String | {{.Fact "serial_number"}} |
deviceName |
String | {{.Fact "device_name"}} |
For a full walkthrough of creating and deploying Managed App Configurations, see Managed App Configurations.
How to Use Variables in Device Settings or Custom Profiles
Use Device Fact variables in Device Settings or Custom Profiles when a payload requires device-specific data — such as a SCEP challenge, a Mail account, or a certificate subject field — to be unique per device.
Using Variables in a Device Setting
For supported payload types, you can enter variable syntax directly into the relevant fields when creating a Device Setting in the Addigy Catalog. Navigate to Catalog > Device Settings > New, select the desired setting type (such as SCEP), and enter the Device Fact variables in the necessary fields. Addigy will substitute the values at deployment time.
Using Variables in a Custom Profile
If you are building your profile in a tool like Apple Configurator, iMazing Profile Editor, or Profile Creator, enter the variable syntax directly into the relevant field. Below are examples of how variables appear in a raw .mobileconfig file:
<key>OrganizationID</key>
<string>{{.OrgID}}</string>
<key>AgentID</key>
<string>{{.AgentID}}</string>
<key>DeviceName</key>
<string>{{.Fact "device_name"}}</string>
<key>CustomFact</key>
<string>{{.Fact "3786ea94-a5fc-4404-b486-123456789"}}</string>Example: Custom SCEP Payload with Device Facts
The example below shows a complete SCEP .mobileconfig that uses three Device Fact variables: {{.OrgID}} for the organization, {{.Fact "wifi_mac_address"}} for the device's Wi-Fi MAC address, and {{.Fact "device_name"}} for the device name.
Before deploying, replace the placeholder values in the following lines:
-
Line 11:
challengegoeshere— Your SCEP challenge (pre-shared secret). -
Line 15:
2048— Key size in bits. Update only if your CA requires a different size. -
Line 17:
Example CA— A display name to identify this CA certificate. -
Line 29:
Example SCEP Profile— The Common Name (CN) for the certificate. -
Line 42:
scep.server.goes.here— Your SCEP server URL.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadContent</key>
<dict>
<key>Challenge</key>
<string>challengegoeshere</string>
<key>Key Type</key>
<string>RSA</string>
<key>Keysize</key>
<integer>2048</integer>
<key>Name</key>
<string>Example CA</string>
<key>Subject</key>
<array>
<array>
<array>
<string>O</string>
<string>{{.OrgID}}</string>
</array>
</array>
<array>
<array>
<string>CN</string>
<string>Example SCEP Profile</string>
</array>
</array>
</array>
<key>SubjectAltName</key>
<dict>
<key>ntPrincipalName</key>
<string>{{.Fact "wifi_mac_address"}}</string>
<key>rfc822Name</key>
<string>{{.Fact "device_name"}}</string>
</dict>
<key>URL</key>
<string>scep.server.goes.here</string>
</dict>
<key>PayloadDisplayName</key>
<string>SCEP</string>
<key>PayloadType</key>
<string>com.apple.security.scep</string>
<key>PayloadUUID</key>
<string>531A991D-2C92-456B-971E-D9D1A6818A46</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</array>
<key>PayloadDisplayName</key>
<string>SCEP Payload</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>E4F4124F-20F8-48AF-92A6-340680F3799C</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>Once you've made the necessary edits, save the file with a .mobileconfig extension. Then create a new Custom Profile in your Catalog using the file, and assign it to a policy to deploy it to your devices.
Frequently Asked Questions
Can I use Device Fact variables in any app configuration or MDM payload?
You can use variables in any Managed App Configuration key/value pair and in any Device Setting/Custom Profile field that accepts a string value. The variable must be entered exactly as shown — Addigy will substitute the value at the time of deployment.
What happens if the fact hasn't been collected from a device yet?
If the fact hasn't been collected at the time of deployment, the variable will resolve to an empty value. Make sure the device has completed at least one audit and that the relevant fact is present before deploying a profile or configuration that depends on it.
Can I use Custom Fact variables the same way as Device Facts?
Yes, using the same {{.Fact "identifier"}} syntax. The difference is that Custom Fact identifiers are UUIDs rather than human-readable strings. Use the methods described in the "How to Find a Fact Identifier" section above to retrieve the correct UUID before adding it to your profile or configuration.