Appcues
Datafly Signal delivers user events and profile-property updates to Appcues server-to-server using the Appcues user-activity HTTP API. Appcues uses this activity to target product-adoption flows, onboarding checklists, surveys, and in-app messages at the right users — driven from your first-party server-side data instead of a client-side script.
Prerequisites
Before configuring Appcues in Signal, you need:
- An Appcues account with the Appcues JS SDK already installed on your app (Appcues targets profiles by the same user ID you pass to
Appcues.identify()). - Your Appcues Account ID.
Find your Account ID
- Sign in to studio.appcues.com.
- Go to Settings > Installation.
- Your numeric Account ID appears in the install snippet (the numeric ID in the loader URL /
AppcuesSettings).
Signal sends activity using the same user identifier your app passes to Appcues.identify(userId). Make sure the user_id you send to Signal matches the ID you use in Appcues, otherwise events will attach to a different profile.
Configure in Signal
Configuration Fields
| Field | Required | Description |
|---|---|---|
account_id | Yes | Your Appcues account ID. Used in the activity API URL path. |
Management UI Setup
- Go to Integrations > Add Integration > Appcues.
- Choose the B2B / SaaS preset (page views, sign-up, login, feature usage, trial, subscription).
- Enter your
account_id. - Click Save.
To customise which events and traits are forwarded, edit the integration’s Field Mappings in the Management UI.
API Endpoint
POST https://api.appcues.com/v1/accounts/{account_id}/users/{user_id}/activityBoth the account ID and the end-user ID are part of the URL path. Signal templates account_id from your integration config and resolves user_id from each event (your identified user_id, falling back to anonymous_id). Requests are sent with Content-Type: application/json.
Identity Signals
Appcues keys every profile on a single user identifier — the one in the URL path. Signal maps it like this:
| Signal field | Appcues | Notes |
|---|---|---|
user_id | {user_id} URL path segment | The identified end-user ID. Must match the ID used in Appcues.identify(). |
anonymous_id | {user_id} URL path segment (fallback) | Used when no user_id is present so anonymous activity still records. |
Appcues does not use hashed PII for matching — it matches on the plain user ID in the path. Identify traits are sent as plain profile properties in profile_update:
| Trait | Appcues profile property |
|---|---|
email | email |
name | name |
first_name | first_name |
last_name | last_name |
company | company |
plan | plan |
role | role |
How to send user data
Call datafly.identify() when a user signs in or updates their account. Signal forwards the traits to the user’s Appcues profile so you can target flows by attributes (for example, show an onboarding checklist only to users on the trial plan).
datafly.identify("user-123", {
email: "jane.doe@example.com",
name: "Jane Doe",
plan: "trial",
role: "admin"
});Event Mapping
B2B / SaaS preset
| Signal event | Appcues event |
|---|---|
page | Page Viewed |
Signed Up | Signed Up |
Logged In | Logged In |
Feature Used | Feature Used |
Trial Started | Trial Started |
Subscription Started | Subscription Started |
Event properties are sent under the event’s attributes object. Any event not in the preset is dropped by default.
Appcues event names have a maximum length of 127 characters.
Example: Feature Used event
Datafly.js call:
datafly.track("Feature Used", {
feature_name: "export_csv",
category: "reporting"
});Appcues activity payload sent by Signal:
{
"events": [
{
"name": "Feature Used",
"timestamp": 1717660800,
"attributes": {
"feature_name": "export_csv",
"category": "reporting"
}
}
],
"profile_update": {
"email": "jane.doe@example.com",
"plan": "trial"
}
}This is sent to POST https://api.appcues.com/v1/accounts/12345/users/user-123/activity.
Testing Your Integration
Send a test event
Trigger a tracked event in your app (or use Signal’s event debugger to replay one) for a user who has an Appcues profile.
Confirm the profile updated
- In studio.appcues.com, go to Audience (or Users) and search for the user ID.
- Open the profile and check that the event appears in the activity feed and that any traits you sent are reflected as profile properties.
Target a flow
Build or edit a flow with an audience rule based on the event or a property you sent (for example, “has done Feature Used” or plan is trial) to confirm the data is usable for targeting.
Troubleshooting
| Problem | Solution |
|---|---|
| Events not appearing on the profile | Confirm the user_id Signal sends matches the ID used in Appcues.identify(). A mismatch creates or updates a different profile. |
404 responses | Check the account_id is correct and that your account has the v1 activity API enabled. |
| Event missing in flow targeting | Appcues flow rules use the exact event name — confirm the vendor_event_name in your mapping matches the rule. |
| Properties not showing | Properties are sent under attributes for events and profile_update for traits; confirm the property names match what your flow rules expect. |
Rate Limits
Appcues does not publish a specific rate limit for the activity API. Signal applies a conservative per-integration limit by default and batches events where possible. If you expect high event volume, confirm limits with Appcues support.