Form tracking: Dynamics 365 Marketing
This guide explains how to set up tracking for Dynamics 365 forms.
Tracking all forms
Integrating Dreamdata with Microsoft Dynamics 365 Marketing Forms enables efficient tracking of user interactions.
You can track all the Marketing Forms on your website using the snippet below. The downside of this approach is that all your form submissions would be labeled with the same name, form-submitted
. If you would like to track one or multiple forms and assign distinct names, e.g. demo-booked
Please proceed to the following example.
MsCrmMkt.MsCrmFormLoader.on("afterFormSubmit", function (event) {
var email = event.formPlaceholder.querySelector("form input[type=email]").value;
analytics.identify(null, { email: email });
analytics.track("form-submitted");
});
We recommend subscribing to afterFormSubmit
event because it's what is recommended in the official documentation:
Triggers on form submit after the form submission is sent to the server. It triggers only when the submission is successful. It triggers before the redirect or showing the confirmation message.
Alternatively, it's possible to change afterFormSubmit
to formSubmit
and track just before the form is submitted to the server.
Tracking Forms using distinct event names (recommended)
Finding the Form Field ID
- Open your marketing form and switch to Edit mode.
- Open the HTML tab.
- Find the ID of the field you want to populate by searching for the field name. You will find the id assigned to an attribute called data-form-block-id, e.g:
- data-form-block-id="g3ace55a-a22f-ed11-bba1-000d3ab1d77c" (this is an example id, each of your forms will have a different one)
- Note your form's form-id as it will be used in your tracking script.
- You will have to repeat this process for every single form that you want to track
To efficiently track one, or multiple forms using the distinct event names, use a mapping object to associate form IDs with event names:
MsCrmMkt.MsCrmFormLoader.on("afterFormSubmit", function(event) {
// Create a Mapping Object:
var idsToName = {
"form-id-1": "event-name-1",
"form-id-2": "event-name-2",
// Add additional form IDs and event names as needed
};
var email = event.formPlaceholder.querySelector("form input[type=email]").value;
var formId = event.getFormPageId();
analytics.identify(null, {
email: email
});
// "form-submitted" is used as a fallback name, in case a mapping between a form id and friendly name doesn't exist
analytics.track(idsToName[formId] || "form-submitted");
});