Skip to main content
All Articles
Dynamics 365

Retrieving Marketing Form Values in Power Automate

Why a submitted form value suddenly changed, and how to reliably retrieve the technical or human-readable value from Field Submission records in Power Automate.

Retrieving Marketing Form Values in Power Automate

Recently, I was asked for help with a Power Automate flow connected to a Customer Insights – Journeys marketing form.

The use case itself was very common: one of the submitted values was used afterwards to decide what should happen next. This could be routing a request to the right business unit, assigning a Lead to a specific team or simply triggering different follow-up logic depending on what someone selected in the form.

The existing flow used msdynmkt_submittedvalues from the Form Submission record to retrieve that information. Then one of the values suddenly looked different. Instead of the technical value the flow had previously processed, the submitted values contained the human-readable label shown in the form.

Nothing had been changed in the flow itself, so the question was: why did this happen?

While looking into it, I came across a change Microsoft documented for unmapped fields. For these fields, the Field localized value previously contained the same technical value as the regular Field value.

That change itself is only a small detail, but it is a good reminder of how form submissions are structured and how I prefer to retrieve individual values when I want to process them afterwards in Power Automate.

Form Submission and Field Submission

Whenever someone submits a marketing form, Customer Insights – Journeys creates a Form Submission record representing the complete submission.

At the same time, individual Field Submission records are created for the submitted fields.

Conceptually, it looks like this:

Form Submission

├── Field Submission: First Name
├── Field Submission: Last Name
├── Field Submission: Email
├── Field Submission: Area of Interest
└── Field Submission: Message

The Form Submission record with all submitted values, including Area of Interest stored as Area B (2)

This relationship is the important part.

If my following Power Automate logic only needs the value of Area of Interest, I don’t need to work with the complete submission. I can retrieve exactly the Field Submission belonging to the current Form Submission and the logical field name I am interested in.

This applies to mapped as well as unmapped fields. And the same relationship can be used directly inside Customer Insights – Journeys, without any Power Automate involved. Megan V. Walker has shown how to evaluate a specific form field right in a journey using an attribute branch condition, including the filter that is needed so the branch really evaluates the field you expect.

Advanced Journey Logic: Evaluating Specific Form Fields in Customer Insights

Unmapped fields are a particularly useful example. Sometimes I want to ask for information that is relevant for the following process but does not necessarily need to become another permanent column on Contact or Lead. Microsoft stores those values as part of the form submission as well.

Retrieving one value in Power Automate

Let’s use a simple example.

Assume the form contains a field with the logical name:

area_of_interest

The marketing form in the designer, with the Area of Interest option set and its logical field name area_of_interest

The option set values behind the labels, where Area A carries the technical value 1

The value should determine what happens next. Depending on the selected option, we might route the request to a different team.

In Power Automate, I can use List rows on the Marketing Field Submission table and filter for two things:

  1. The current Form Submission
  2. The logical name of the field

For example:

_msdynmkt_marketingformsubmissionid_value eq @{triggerOutputs()?['body/msdynmkt_marketingformsubmissionid']}
and msdynmkt_name eq 'area_of_interest'

The List rows action on the Form fields table, filtered by the current Form Submission and the logical field name, with Row count set to 1

One note on the trigger: filter it down to the one form you actually care about. Filtering on the submission status alone is not enough. Without a condition on the form itself, the flow runs for every form submission in the environment, not just the one you built it for. Adding _msdynmkt_marketingformid_value eq <form id> to the trigger’s Filter rows keeps it scoped to a single form.

As I only expect one matching field, I can limit the query to one row.

For most scenarios, these are the properties I am interested in:

msdynmkt_name
msdynmkt_fieldvalue
msdynmkt_localizedfieldvalue

The difference between the last two becomes particularly important for Choice fields.

For example:

Field value:            2
Field localized value: Area B

The Field Submission record for area_of_interest, showing msdynmkt_name and msdynmkt_fieldvalue

Microsoft defines Field value as the technical value and Field localized value as the human-readable representation for option sets, multiselect fields, two-option fields and lookups.

So if my following logic depends on the technical value, I can use:

first(outputs('List_rows_-_Get_form_field')?['body/value'])?['msdynmkt_fieldvalue']

The technical value expression in the Power Automate expression editor

If I need the readable label instead:

first(outputs('List_rows_-_Get_form_field')?['body/value'])?['msdynmkt_localizedfieldvalue']

The localized value expression in the Power Automate expression editor

The important part for me is that the flow now explicitly retrieves the representation it needs instead of depending on the summarized value of the complete Form Submission.

From form value to business logic

Once the value is available, everything afterwards is just normal Power Automate logic.

A simple example could be a Switch:

Marketing Form Submission

Retrieve "Area of Interest"

Get Field Value

        Switch
    ↙      ↓      ↘
  Area A Area B Area C
    ↓      ↓      ↓
  Team A Team B Team C

The Switch On parameter, reading the technical value out of the Field Submission

The Switch with one case per option and a Default branch, each routing to a different team

A single Switch case matching on the technical value, entered as a quoted string so the comparison types line up

The same approach could of course be used for many other scenarios: assigning a Lead, starting an approval, updating another Dataverse record, creating a task or triggering another automation.

There are also much broader use cases once you start working with Field Submissions.

Amey Holden, for example, has shown how the complete set of Field Submission records can be transformed into readable text and structured JSON. This can then be used for exports, timeline information or other downstream automation. If you need to work with the entire submission rather than one particular field, her approach is definitely worth a look.

Form Submission & Event Registration Summaries in Customer Insights – Journeys

For this post, however, I want to keep the pattern intentionally small:

retrieve one submitted field and continue the process with it.

Making the pattern reusable

Because the retrieval logic is always very similar, I like putting it into its own Scope:

Get Form Field Value

├── List rows – Get Field Submission
├── Compose – Technical value
└── Compose – Localized value

The finished flow: a Form Submissions trigger, the collapsed Get Form Field Value scope and the Switch that follows it

For another field, the main thing I need to change is the logical field name.

I therefore keep the complete Scope JSON in a GitHub repository alongside this post, so that the actions can be copied directly into Power Automate rather than recreated from several screenshots. It ships without any connection reference, and the field logical name is a placeholder you replace with your own.

Customer Insights – Power Automate Scopes

Speaking of copying scopes, my friend Lucas Hahne created the Power Automate Extension – Scopes to Copy, which makes these kinds of reusable Power Automate snippets much easier to work with.

Power Automate Extension – Scopes to Copy

My take

The change around localized values was what brought me back to this topic, but the underlying pattern is much more general.

Whenever one answer from a Customer Insights – Journeys form should influence what happens next, I prefer working with the related Field Submission directly.

The relationship is quite simple:

Form Submission = the complete submission

Field Submission = one individual answer

Retrieve the field you need, choose whether you need its technical or localized value and continue with normal Power Automate logic afterwards.

For many scenarios, that really is all there is to it:

Get the field → get the value → continue the process.

More resources

Dynamics 365 Customer Insights Journeys Power Automate Marketing Forms

Thoughts or feedback?

Happy to exchange ideas with the community — questions, additions, or your own experience with these topics.

Get in Touch