- Part of Anywhere: Activation.
- 1000 Activations per month available with Enterprise and Advanced plans.
- Additional Activations available with Anywhere: Activation. Learn more.
- Requires an Admin or Architect role to configure.
Streams send real-time behavioral data to a webhook endpoint. They can be configured to match on a single event or complex multi-event patterns. Use Streams to:
- Push customized event data to a CDP, messaging app, or AI model.
- Get timely notifications of sentiment signals based on key user actions or characteristics.
- Unlock new revenue by alerting teams when high-value customers signal interest.
Do you need a complete representation of your Fullstory data synced hourly to your data warehouse? Check out Anywhere: Warehouse.
Article overview:
- An introduction to Streams
- Setting up Streams
- Important notes
- FAQ
- Activation > Streams on the developer guide (technical resource)
An introduction to Streams
Streams provide a way to get behavioral data out of Fullstory and into other systems. Unlike REST APIs which pull data from the source to the destination system, Streams push data from the source to the destination system using webhooks. This method has several benefits:
- Streams are event-driven. They trigger precisely when a predefined event occurs or a multi-event pattern is triggered within a given timeframe. This is much preferred to having to poll the REST API for data and helps make sure your data is available precisely when you need it. For example, you can immediately update your marketing segmentation when a customer performs a high-interest behavior.
- Streams are efficient. They push data to your destination as soon as it becomes available. In contrast, REST APIs require you to consistently poll to try to pull new data, even if there’s nothing to pull. Research from Zapier suggests that APIs often waste up to 98.5% of their polls looking for data that doesn’t exist. Streams via webhooks eliminate this operational inefficiency.
- Streams are flexible, allowing you to incorporate behavioral data into many different operational workflows. We’re excited to learn how you use them! To share a use case or request a new streams that we don’t currently offer, send us a note here.
Setting up Streams
Streams let you build personalized workflows that trigger when users perform a specific single event or a complex series of multiple events within a given time period. Examples include sending alerts for potentially fraudulent behavior or providing immediate technical support outreach when a customer has a frustrating experience. You can build these Streams in the Fullstory UI without client-side logic.
Create a Stream
Follow the steps below to create your first Stream.
- Go to Settings > Anywhere > Activation.
- Click Create Stream.
- Give your Stream a Name and a Description.
Continue setting up your Stream with the steps below.
Destination
Define the settings for your Destination, i.e. set up your webhook:
- Destination type: Choose HTTP Endpoint.
- Request Method: Choose POST, PUT, or PATCH.
- API Endpoint URL: the URL for your webhook.
-
Connection: Click Create connection to create a new connection and choose from one of the following Authentication types:
-
Oauth 2 client credentials
The Access token URL, Client ID, and Client secret fields are mandatory. The Scopes field is optional and accepts comma-separated values. -
Basic auth
The Username and Password fields are both required. -
Bearer token
Provide an API Token. -
API key
Name the URL parameter or header Key, then provide its Value. Select whether to Add to... the stream's Headers or Query parameters. -
HMAC auth
Provide the HTTP Signature header key and Secret used for your HMAC calculation. Optionally provide Additional header configuration key-value pairs that will be passed for all streams that use this connection.
The HMAC signature is calculated on the HTTP payload bytes using the HMAC-SHA256 algorithm. The resulting checksum is hex encoded and is used as the header value. Here an example how to calculate the HMAC signature in Javascript:crypto.createHmac('sha256', hmacSecret) .update(incomingPayload) .digest('hex');
-
Oauth 2 client credentials
- Custom headers: Add custom headers as key/value pairs that may be necessary for your implementation.
Definition
For your Stream's Definition, configure the single event or multi-event pattern that will trigger the Stream.
- In this order: (Not configurable) Streams must match on an ordered series of events.
- Within...: For multi-event streams, determine the maximum time window for the two events to occur.
-
Select an event: Select one or more events. Much of what you know about user and event filters in OmniSearch will translate to Streams.
- Dependent criteria: Consider refining your event by adding dependent criteria.
- Add Step: Click the + button next to an event to Add Step for an additional event.
- Exclude: Set up an exclusion filter to filter out users that perform specific events.
- How often should the definition match? For single-event definitions, choose between Once per session and On every event. Multi-event pattern definitions only utilize Once per session.
Field Mapping
Optionally, set up your own custom field mapping as either Fields or JSON.
-
Fields / JSON: You can choose to configure your fields using the UI or define a custom JSON schema.
Additional JSON formatting considerations
By choosing the JSON option, you can fully customize the JSON schema of the stream payload and also take advantage of basic declarative functions to transform the data.
See below for an example and see Streams > Advanced JSON Mapping in the developer guide for detailed guidance.
{ "browser_info_array": [ "list", ["var", "event.0.ua_browser"], ["var", "event.0.ua_browser_version"] ], "event_time": ["var", "event.0.event_time"], "event_time_unix_ts": ["toUnixTimestamp", ["var", "event.0.event_time"]], "promo_applied_info": { "promo_accepted": ["var", "event.0.custom_properties.accepted"], "promo_discount": ["var", "event.0.custom_properties.discount"], "promo_code": ["var", "event.0.custom_properties.promo_code"], "promo_total_price": ["var", "event.0.custom_properties.total_price"] }, "session_id_for_server_api": [ "concat", ["var", "event.0.device_id"], "%3A", ["var", "event.0.session_id"] ] } - Destination template: Streams comes pre-configured for several destinations, including Adobe and SAP Emarsys.
- For each Matching event, choose the Rule # (for multi-event definitions) and corresponding Event property. Optionally, change the Destination field name.
Send Test
Streams come up with built-in testing support so you can make sure your connection is working. This is especially helpful when setting up a multi-event pattern trigger.
- Request: Edit the provided sample data to be sent.
- Request Details: view Headers and the request Body
-
Server Response: If successful, you'll see a
200 OKresponse.
Review and Save
- Review the final properties.
- Click Save.
Important notes
- You can trigger Streams from any user-defined event. Create new events or see what exists in your account today under Data Management > Events > Filter by “user defined”.
- Use the ‘or’ button with the event or dependent criteria to widen event matching.
- Unless you are hosting your own endpoint, most destination systems will ask you to create a dedicated webhook URL to capture a stream of events. Perform this step in the destination system first, then copy/paste the unique URL into the Fullstory UI.
- See Activation > Streams in the developer guide for additional technical guidance
FAQ
How many Streams can I have at the same time?
Fullstory currently supports up to 25 consecutive streams. You can send all streams to the same endpoint or 25 different endpoints.
Didn't Streams used to be called Webhooks?
The functionality for Streams has appeared under a few different names, including: "Streaming Webhooks", "Behavioral Webhooks", "Destinations Webhooks", and at one point, just "Webhooks". The name "Streams" was adopted with the launch of Anywhere: Activation.
Do you support system interaction webhooks for notifications of when things change within Fullstory?
Yes. See System Interaction Webhooks.
Is there a way to trigger a send the webhook stream at the end of a session?
While there's not a direct way to tell Fullstory to wait to the end of a session to send a webhook stream that matches a trigger, you can approximate this behavior by having Fullstory "wait" for an excluded event that will never happen. For example:
Once the first matching event is triggered, this will cause Fullstory to wait until the specified time has passed for an event that will never happen. At the end of the specified time, Fullstory will send the appropriate session data as part of the webhook stream.