User Properties In-Depth

NOTE: This article is intended for developers implementing Appcues. We also have a high-level overview of how Appcues' targeting feature works that's less technical.

Required properties

The only requirement is to send a user ID as the first argument to Appcues.identify().

Recommended properties

  • Email address — for more easily targeting yourself or any other individual user in your app
  • Signup timestamp — for targeting new users (e.g. users whose signup time is in the last 24 hours) or existing (users that signed up over a month ago)
  • Trial time remaining — target users with specific messaging just before their trial expires
  • Amount(s) of content created — useful for targeting things like "users that haven't created any leads", etc.

Generally, sending more properties gives your team more flexibility to target, so it's good to implement that all at once. For a broader idea of properties people typically send, check out  our high-level overview.

Formatting data

Generally, you'll want to follow these three guidelines when preparing data to send to Appcues:

1. Keep property names simple and understandable.

The Appcues UI will try to reformat the property "key" into something readable, so a property like "days_since_signup" becomes "Days Since Signup" and "planName" becomes "Plan Name". Because of that, to make things easier on your non-technical colleagues, make key names simple and clear. Avoid names like, "property_1" or "base64UUID" unless that's a well-known label among your team.

2. Don't reformat types.

Send numbers as numbers, strings as strings, etc. Appcues uses type inference to match targeting criteria, so you don't need to think about types. This is really important when doing comparison, since the number 10 is greater than the number 2, but the opposite is true if those values are converted to strings.

In the same vein, if a value is undefined or null, either don't send it to Appcues, or send it as null. Do not send an empty string for any non-existent value.

Lastly, make sure that each user property has a consistent type. As an example, "signup_date" could either be sent as a timestamp (number) or as an ISO date (string). Whichever you choose, make sure to be consistent every time that value is sent to Appcues. Inconsistency could result in over- or under-targeting content to.

Just note, we use UTC UNIX timestamps.

3. Only send simple values (numbers, strings and booleans).

Appcues targeting can only operate on numbers, strings and booleans. You can send complex objects in your Appcues.identify() call, but they will be silently ignored.

If information in those objects are important, we recommend flatting the object or reducing the object to a single value before calling Appcues.identify(). For example, if you had a user property called "invoices" that was a collection of billing information, you could reduce that into the following useful properties:

var invoices = user.invoices || [];
var totalInvoices = invoices.length;
var lastInvoiceDate = (invoices[0] || {}).created_at;
Appcues.identify(, {
  totalInvoices: totalInvoices,
  lastInvoiceDate: lastInvoiceDate

Still need help? Contact Us Contact Us