Userflow
Sync user profiles, groups, and product events to Userflow for personalized onboarding flows, checklists, and in-app experiences. Zeotap keeps your Userflow user data in sync with your warehouse so you can target the right users with the right onboarding content.
Prerequisites
- A Userflow account with API access
- A Userflow API key from Settings > Integrations > API
- User IDs in Userflow must match the IDs used with
userflow.js identify()to avoid duplicate records
Authentication
Userflow uses API key authentication with a Bearer token.
- Log in to your Userflow dashboard
- Navigate to Settings > Integrations > API
- Copy your API key (starts with
uf_at_) - Paste the API key into the API Key field in Zeotap
Configuration
This destination has no additional configuration fields beyond the target settings.
Target Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Object Type | Select | Yes | The type of data to sync: Users, Groups, or Events |
Supported Operations
Sync Modes
| Mode | Supported |
|---|---|
| Insert | Yes |
| Upsert | Yes |
| Update | — |
| Mirror | — |
The Userflow API uses upsert semantics for users and groups. A POST to /users/{user_id} creates the user if new, or updates attributes if the user already exists. Insert mode is used for appending events. Events are always appended and cannot be updated or deleted.
Audience Sync Modes
| Mode | Supported |
|---|---|
| Add | — |
| Remove | — |
| Mirror | — |
Userflow does not have a list or segment membership API. Audience syncs are not supported.
Features
- Field Mapping: Yes (map source columns to user/group attributes or event fields)
- Schema Introspection: No
Required Mapping Fields
| Field | Description | Applies To |
|---|---|---|
user_id | Unique user identifier. Must match the ID used with userflow.js identify(). | Users, Events |
group_id | Unique group identifier in Userflow. | Groups |
event_name | Name of the event to track. Event names are case-sensitive. | Events |
Default Destination Fields
Users
| Field | Type |
|---|---|
user_id | string |
name | string |
email | string |
signed_up_at | timestamp |
plan | string |
locale | string |
role | string |
Groups
| Field | Type |
|---|---|
group_id | string |
name | string |
plan | string |
created_at | timestamp |
Events
| Field | Type |
|---|---|
user_id | string |
event_name | string |
attributes | json |
How It Works
User Syncs
- Zeotap maps your source columns to Userflow user attributes
- Each user is sent individually via
POST /users/{user_id}to the Userflow REST API - The request body contains an
attributesobject with all mapped fields (exceptuser_id) - Userflow creates the user if it does not exist, or updates the specified attributes if it does (upsert semantics)
- Omitted attributes are preserved — use
nullto explicitly clear an attribute value
Group Syncs
- Zeotap maps your source columns to Userflow group attributes
- Each group is sent individually via
POST /groups/{group_id}to the Userflow REST API - The request body contains an
attributesobject with all mapped fields (exceptgroup_id) - Userflow creates the group if it does not exist, or updates the specified attributes if it does
Event Syncs
- Zeotap maps your source columns to Userflow event fields
- Each event is sent individually via
POST /eventsto the Userflow REST API - The request body includes
user_id,name(event name), andattributes(additional event data) - Events trigger flows and checklists configured in the Userflow dashboard that match the event name
Rate Limits
Userflow enforces rate limits per API key. Exact limits vary by plan and are not publicly documented. Zeotap automatically handles rate limiting:
- HTTP 429 responses trigger automatic retries with exponential backoff
- Each user, group, or event is sent as an individual API request (no bulk endpoint)
- Large syncs may take longer due to per-request rate limiting
Best Practices
- Ensure
user_idvalues match the IDs used inuserflow.js identify()calls to avoid creating duplicate user records - Use Upsert mode for initial data loads and ongoing syncs to create new users and update existing ones
- Use Insert mode for event syncs to append product events to Userflow
- Map
signed_up_atfor users so Userflow can properly calculate time-based targeting conditions - Set the
localeattribute to enable localized onboarding flows - Use descriptive, consistent event names that match your Userflow flow triggers (event names are case-sensitive)
- Keep the
attributesfield for events as a flat JSON object for best compatibility with Userflow conditions
Troubleshooting
Authentication failed: invalid API key
Verify your API key is correct and starts with uf_at_. API keys are found in Settings > Integrations > API in the Userflow dashboard. Ensure you are using a full API key, not a restricted key.
Users not appearing in Userflow
User IDs must match those used with userflow.js identify(). If the IDs do not match, Userflow creates separate user records. Check that the user_id field in your source data matches the identifiers your application passes to the Userflow JavaScript SDK.
Duplicate user records
Duplicate records occur when different user_id values are used for the same person across Zeotap and userflow.js. Standardize on a single user identifier format across all systems.
Events not triggering flows
Event names in Userflow are case-sensitive. Verify the event_name value exactly matches the event name configured in your Userflow flow trigger. Also confirm the flow is published and active.
Rate limit errors (429)
Zeotap retries automatically with exponential backoff on 429 responses. If rate limit errors persist, reduce sync frequency or contact Userflow support to discuss your plan’s API rate limits.
Attributes not updating
The Userflow API preserves omitted attributes — it does not delete them. To clear an attribute, explicitly map it to null. If attributes appear stale, verify the source data contains the expected values and the field mapping is correct.
Group membership not syncing
The Userflow REST API for groups manages group attributes only. To associate users with groups, include group_id and group_attributes when syncing users, or manage memberships through the userflow.js SDK. Zeotap’s group object type syncs group-level attributes, not user-group membership.