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

  1. Sign in to studio.appcues.com.
  2. Go to Settings > Installation.
  3. 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

FieldRequiredDescription
account_idYesYour Appcues account ID. Used in the activity API URL path.

Management UI Setup

  1. Go to Integrations > Add Integration > Appcues.
  2. Choose the B2B / SaaS preset (page views, sign-up, login, feature usage, trial, subscription).
  3. Enter your account_id.
  4. 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}/activity

Both 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 fieldAppcuesNotes
user_id{user_id} URL path segmentThe 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:

TraitAppcues profile property
emailemail
namename
first_namefirst_name
last_namelast_name
companycompany
planplan
rolerole

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 eventAppcues event
pagePage Viewed
Signed UpSigned Up
Logged InLogged In
Feature UsedFeature Used
Trial StartedTrial Started
Subscription StartedSubscription 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

  1. In studio.appcues.com, go to Audience (or Users) and search for the user ID.
  2. 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

ProblemSolution
Events not appearing on the profileConfirm the user_id Signal sends matches the ID used in Appcues.identify(). A mismatch creates or updates a different profile.
404 responsesCheck the account_id is correct and that your account has the v1 activity API enabled.
Event missing in flow targetingAppcues flow rules use the exact event name — confirm the vendor_event_name in your mapping matches the rule.
Properties not showingProperties 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.