Targeting
What is targeting?
Frigade’s targeting logic allows you to personalize the experience for each user, weave multiple onboarding experiences seamlessly together, and define step completion criteria.
Frigade can also sync with your existing analytics platform to leverage user properties and events you’re already tracking. This allows you to target users based on their behavior in your product.
Flow targeting
At the highest level, every Flow you create will have optional targeting logic. You can view this targeting logic on the Flow Overview page and modify it by tapping “Targeting” button. The Flow Targeting logic is used to determine who should see the Flow.
Here are a some common ways we see developers using Flow targeting:
- Only show a Flow to new accounts by comparing account creation date
- Show a Flow to users with a certain job function or other user property
- Show a Flow to users who have taken a specific action in the product (e.g. an upsell once they use something 10 times)
- Show a Flow to users who have completed a another Flow (e.g. a “next steps” Flow after a user completes an initial onboarding Flow)
You can refer to the Users SDK and API docs for more info on how to create and leverage User Properties and User Events in targeting.
Step targeting
Beyond Flow targeting, you can also leverage targeting logic within Flows. For instance, you can:
- Show or hide a step in a Flow (using visibilityCriteria) based on targeting
- Prevent a step in a Flow from starting until a condition becomes true (using startCriteria)
- Auto-complete a step in a Flow when your targeting logic becomes true (using completionCriteria)
Boolean logic
Supported operators are: &&
, ||
, ==
, !=
, >
, <
, >=
, <=
Available props
All data you’ve made available to Frigade can be used in your targeting logic.
User props
The following properties are supported on users:
- User properties:
user.property('<property>')
- User properties partial match (not case-sensitive):
user.propertyContains('<property>', '<searchString>')
(returnstrue
orfalse
) - User flow state:
user.flow('<flowId>')
(e.g.COMPLETED_FLOW
,STARTED_FLOW
,NOT_STARTED_FLOW
) - User flow step state:
user.flowStep('<flowId>', '<stepId>')
(e.g.COMPLETED_STEP
) - User event count:
user.event('<eventId>').count
Organization props
The following properties are supported on organizations:
- Organization properties:
organization.property('<property>')
- Organization event count:
organization.event('<eventId>').count
Examples
Relative dates
You can use relative dates in your targeting logic similar to how this is handled in plain Javascript. For example, you can target users who are older than at least 30 days:
user.property('accountCreatedDate') < new Date() - 86400000 * 30
Property matching
Trigger a flow to a user who has connected their bank account:
user.property('bankAccountConnected') == true
Check if a property is present
Trigger a flow to a user who has a job title:
user.property('jobTitle') != null
Absolute dates
Trigger a flow only for users signed up after a certain date:
user.property('accountCreatedDate') > '2023-03-01 00:00:00'
Flow state
Trigger a flow to a user who has completed a different initial onboarding flow and has connected a bank account
user.flow('flow_i6kH7DjcbE6tiaQd') == 'COMPLETED_FLOW' && user.property('bankAccountConnected') == true`
Trigger a flow when a step in another flow is completed
user.flowStep('flow_i6kH7DjcbE6tiaQd', 'my-step-id') == 'COMPLETED_STEP'
Event counts
If the event properties do not matter and you simply wish to see if a user has triggered an event, you can use the following expression:
user.event('pageView').count > 0
Automatically trigger when an organization sends a specific event:
organization.event('connectedBankAccount').count > 0