Skip to main content
Level 2
September 22, 2026
Question

Custom Action vs Update in Journeys

Assume that you would like to use journey data once again in AEP. I see that there are two ways to update AEP: 

  1. Sent data from journey: Custom Action → AEP Streaming API
  2. Update Node 

What are the differences in you use-cases? What you prefer? 

3 replies

Pulkit_Jain_
Adobe Employee
Adobe Employee
September 22, 2026

​@Dex 666 

This comes up a lot when people want journey execution to feed back into the Profile/Data Lake in AEP. 

Update Profile is native and writes only to the Profile Store (own dataset, slight delay, no branching).

Custom Action > Streaming API is a per-profile REST call that can also hit the Data Lake and lets you branch on the response, but doesn't scale well.

Update Profile is better unless you need Data Lake writes or response-based branching.

Translate
SatheeskannaK
Adobe Champion, Community Advisor, UG Leader
Adobe Champion, Community Advisor, UG Leader
September 23, 2026

​@Dex 666 Some background on why it depends on use-case needs.

Update Profile only touches the Profile Store, not the Data Lake. It updates existing fields, it can't create new ones, and it can't generate an event like a purchase. It needs its own dedicated profile-enabled dataset — if that dataset is shared with batch or streaming ingestion, later ingestion runs will just overwrite what you wrote. The update lands in AEP within a second or so, but there's no hard guarantee, so I wouldn't rely on it being available to the very next activity in the same run. The upside: no dev work, all point-and-click in the canvas.

Custom Action → Streaming API is the heavier option. You need an IMS OAuth project, an HTTP API source connection in AEP, and a custom action wired to that endpoint and schema. But because it's a real ingestion source, it writes to the Data Lake (and Profile Store, if the dataset's enabled for it), so it's the only way to create an actual new event — not just update a field. It's also one API call per profile, and it's subject to custom action capping (300,000 calls/minute by default, plus the general 5,000 calls/second limit), so at volume that's a real cost.

Bottom line:

  • if you just need to flag or correct a profile attribute for downstream use — exclusion audiences, personalization, entry criteria — Update Profile is simpler and cheaper.
  • Reach for Custom Action + Streaming API only when you need the Data Lake (reporting, Query Service) or need to write something Update Profile structurally can't. And if you're already calling out via custom action anyway, chain an Update Profile activity right after it rather than doing a second streaming call just to set a flag.
Translate
Thanks, Sathees
AmitVishwakarma
Community Advisor
Community Advisor
September 25, 2026

Hi ​@Dex 666 ,

These are not interchangeable write options. Use Update Profile when you need to change an existing profile field—such as a lifecycle status or journey flag—for profile-based personalization or segmentation. It updates the Profile Store, not a queryable Data Lake event/history record; it does not create an ExperienceEvent or a new XDM field. Use a dedicated Profile-enabled dataset, and do not share it with other batch or streaming ingestion. Also, do not assume the update will be visible immediately in the next journey step
https://experienceleague.adobe.com/en/docs/journey-optimizer/using/orchestrate-journeys/about-journey-building/update-profiles

Use Custom Action → AEP HTTP API source when you need to persist a journey event or audit record in a dataset for Data Lake/Query Service or downstream use. A custom action alone does not persist data in AEP: configure the authenticated HTTP API source/inlet, XDM payload, and target dataset. Enable Profile contribution only if the event also needs to contribute to Profile; an ExperienceEvent is not automatically the same as updating a current-state profile attribute.https://experienceleague.adobe.com/en/docs/journey-optimizer/using/orchestrate-journeys/journey-use-cases/custom-action-aep
https://experienceleague.adobe.com/en/docs/journey-optimizer/using/configure-journeys/data-source-journeys/about-data-sources

If you need both a queryable event and a current profile flag, use the custom action for the event and Update Profile for the profile field. Treat them as separate operations and configure timeout/error paths. Custom Action responses can support response-based journey logic when the endpoint returns useful data; Update Profile is not a general API-response branch.https://experienceleague.adobe.com/en/docs/journey-optimizer/using/configure-journeys/action-journeys/action-journeys-landing-page https://experienceleague.adobe.com/en/docs/journey-optimizer/using/orchestrate-journeys/about-journey-building/about-journey-activities

Translate
Amit Vishwakarma - Adobe Commerce Champion 2025 | 17x Adobe certified | 6x Adobe SME