FlowRunner
PricingContact
Theme
Start Free

journy.io

Analytics & Data

Connect AI agents to journy.io, a B2B customer data platform. Agents sync users and accounts, track product events, attach metadata, and trigger in-app messages from a flow.

21 actions API key available
journy.io website ↗ Platform Documentation ↗ Capability data verified 2026-08-05
A scheduled sync starts, or an upstream system reports a change to a customer record
Validate API Key confirms the configured key is authorized for the writes about to happen
Get User Properties and Get Account Properties return the property definitions in this environment
The agent compares the inbound payload against those definitions and flags any null values
Upsert Account writes the organization, then Upsert User writes the people under it
The data owner sees which properties the sync would clear and which segments use them
Owner approves the properties that would be deleted before the write goes through

What This Integration Enables

A customer data platform earns its place by settling one question: what identifies a customer. journy.io answers it twice, because B2B has two subjects. A user is identified by a user ID and an email address, an account is identified by an account ID and a domain, at least one identifier is required in each case, and membership between them is explicit rather than inferred. That is why an agent can do useful work here that it cannot do against a generic event pipe: it can write a person, write the organization, and then state the relationship, instead of hoping a domain match holds. FlowRunner agents upsert and delete users and accounts, link and unlink users to accounts, track user and account events with metadata and a timestamp, attribute anonymous web activity by device ID to a known user, retrieve the JavaScript tracking snippet for a registered domain, read the permissions a key holds, list event definitions, user and account property definitions, and user and account segments, and work the in-app message surface by listing messages for a connected app, creating a message targeting a user or an account, retrieving a user's or an account's messages by All, Unread, or New, marking one received, and deleting one.

Three mechanics decide how a sync should be built. Property values may be strings, numbers, booleans, string arrays, and ISO 8601 datetimes, and for user and account properties a null value deletes that property rather than leaving it alone, which makes the difference between a partial payload and a destructive one entirely a matter of what your source system sends when a field is empty. API keys carry granular permissions, so Validate API Key is worth calling at the start of a flow to establish what the key can actually do before a write fails halfway through a batch. And the API is rate limited to 1800 requests per minute, returning limit and remaining headers on every response, which is generous enough that a full sync is practical and specific enough that a naive loop should still read the headers. On events, be clear: this connector has no triggers. Nothing in journy.io starts a FlowRunner flow. Flows here are started by a schedule or by whichever system in your stack actually changed, and the read operations exist so the agent can check state before it writes. The connector is built and verified against journy.io's official API.

Without FlowRunner

Product usage separated from account records Events land in one tool and the account context that explains them lives in another
Syncs that silently blank fields A partial payload overwrites properties nobody meant to touch and segments quietly change
Anonymous web activity never joined up Someone browses for a week, then signs up, and the two histories never meet

With FlowRunner

One customer picture with events attached Users, accounts, and the events they generate resolve against the same identifiers
Property deletions surfaced first A null in the payload is shown as a deletion, with the segments it affects named
Pre-signup activity attributed Device-level activity is linked to the user once they identify themselves

Use Case Scenarios

Signup to Account Membership in One Pass

A new user signs up in the product. The agent calls Upsert Account first with the account ID and domain so the organization exists, then calls Upsert User with the user ID, email, and the properties captured at signup, then calls Add Users To Account to state the membership explicitly rather than leaving it to a domain match. It calls Track Event to record the signup with its metadata and timestamp, and calls Link Web Activity To User with the device ID from the pre-signup session so the browsing that led to the signup attaches to the person who did it. The customer's history starts at the first page view rather than at the first login.

Usage Signals Reaching the Account Team

A success team needs to know when an account's behaviour changes. The agent calls Get Account Segments to read the segments defined in the environment and calls Get Account In-App Messages with the New filter to see what has already been said to that account, so the outreach does not repeat a message the customer just saw. It assembles the account's recent events and posts a summary to the account owner in Slack with a link to the record in HubSpot. Where the right next step is in the product rather than in an inbox, it calls Create In-App Message targeting that account, which is a message a real customer will see, so it goes out on an approved template rather than generated copy.

A Sync From the System of Record That Cannot Blank a Field

Company data lives in the CRM and needs to reach journy.io so segments reflect reality. The agent calls Get Account Properties to read the defined property set, pulls the account records from the CRM, and builds the Upsert Account payload. Before writing, it removes every key whose source value is empty, because sending null would delete that property rather than leave it unchanged. It writes the accounts, then calls Get Account Segments to confirm segment membership moved the way the change was expected to move it. A sync that runs nightly for a year is only safe if it cannot quietly erase the fields it does not own.

Human-in-Loop Highlight

The dangerous write in journy.io does not look like a write at all. For user and account properties, a null value deletes that property, which means an upsert carrying an empty field is a deletion wearing the costume of an update. That would be a minor data hygiene problem in a plain database, but this is a customer data platform, and properties are what segments are built from. Delete a property across a few thousand users and segment membership moves underneath you, and segment membership is what decides who gets messaged, who gets an in-app prompt, and who a success team is told to call. Nobody gets an error. The sync reports success, the segments recompute, and the first symptom is a campaign that reached the wrong half of the customer base. So the agent inspects before it writes. It calls Get User Properties and Get Account Properties to learn the defined property set, compares the inbound payload against it, and where the payload would send null for a property that appears in the definitions, it stops. It calls Get User Segments and Get Account Segments to name which segments are built on those properties, and posts to the data owner: "Sync from [source] would write [n] user records. [n] of them carry null for properties [list], which deletes those properties rather than leaving them unchanged. Segments referencing those properties: [names]. Estimated records affected per property: [counts]. Write as-is, strip the nulls and write, or cancel?" The owner chooses, and the approved sync runs unattended from then on with the agreed null handling baked in. Tracking events, linking device activity, and upserting complete records need no approval, because they add rather than remove. A payload that silently deletes the fields your segments depend on is human-in-the-loop work, and the same discipline covers Create In-App Message, because that one reaches the customer directly.

Agent processes routinely
Detects exception requiring judgment
Clear match Continues automatically
Ambiguous Routes to human via preferred channel
Human decides
Agent resumes with decision

Agent Capabilities

21 actions

Users

2
  • Upsert User Creates or updates a user by user ID and/or email, with custom properties. At least one identifier is required. A null property value deletes that property rather than leaving it unchanged, so payload construction matters as much as the values themselves.
  • Delete User Permanently deletes a user. This cannot be undone.

Accounts

2
  • Upsert Account Creates or updates an account, meaning an organization, by account ID and/or domain, with custom properties. At least one identifier is required, and null property values delete properties here too.
  • Delete Account Permanently deletes an account. This cannot be undone.

Account Members

2
  • Add Users To Account Links one or more users to an account. Used to state membership explicitly rather than relying on a domain match to infer it.
  • Remove Users From Account Unlinks one or more users from an account. Used when someone leaves a customer organization.

Events

2
  • Track Event Tracks a user and/or account event with optional metadata and a timestamp. Used to bring product and workflow events into the same place as the account context that explains them.
  • Link Web Activity To User Attributes anonymous web activity, identified by device ID, to a known user. Used at the moment of signup so the browsing that preceded it joins the person's history.

Tracking

1
  • Get Tracking Snippet Retrieves the JavaScript tracking snippet for a registered website domain. Used in provisioning flows that stand up tracking for a new site or a new environment.

Metadata

6
  • Validate API Key Returns the permissions granted to the configured API key. Worth calling early in a flow, because keys carry granular permissions and a batch that fails halfway is worse than one that never started.
  • Get Events Lists the event definitions in the environment. Used to confirm an event name exists before a flow starts writing to it.
  • Get User Properties Lists the user property definitions. This is the call that tells an agent which keys in an inbound payload would be treated as deletions if sent as null.
  • Get Account Properties Lists the account property definitions, for the same purpose at the account level.
  • Get User Segments Lists user segments. Used to name which audiences a property change would move people between.
  • Get Account Segments Lists account segments. Used to verify that a sync moved segment membership the way it was expected to.

In-App Messages

6
  • List In-App Messages Lists messages for a connected app, paginated. Used to see what has already been sent before adding to it.
  • Create In-App Message Creates a message targeting a user or an account. This reaches a real customer inside the product, so it belongs on approved copy rather than on text generated at run time.
  • Get User In-App Messages Retrieves a user's messages, filtered by All, Unread, or New.
  • Get Account In-App Messages Retrieves an account's messages, filtered by All, Unread, or New. Used to avoid repeating a message an account has just been shown.
  • Mark In-App Message As Received Marks a message as received. Used to keep delivery state accurate when the receipt is observed somewhere other than the app.
  • Delete In-App Message Permanently deletes a message. This cannot be undone.

Frequently Asked Questions

What can FlowRunner do with journy.io?

FlowRunner agents can run Upsert User, Delete User, and Upsert Account in journy.io, plus 18 more actions.

Does connecting journy.io to FlowRunner require OAuth?

No. journy.io connects to FlowRunner with an API key, no OAuth flow required.

Can journy.io trigger a FlowRunner workflow automatically?

journy.io doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

Start building with journy.io

$100 in credits. No card required. Connect in minutes.