Proposal · 2 October 2026
We checked each attribute against what MoEngage received, not against what the tags are set to send. Three have never once arrived, one is empty in 46 of 47 events, and 17 tags send a value MoEngage already collects for free.
Events
24
19 change
Attributes today
105
89 after
Measurably wrong
13
3 never arrive at all
Never yet observed
42
Their event has not fired since we began measuring
from_project_name{{RegEx Table - project_name}} from_project_name{{RegEx Table - project_name}} Keep ok
to_project_name{{Custom JS - clicked_project_name}} to_project_name{{Custom JS - clicked_project_name}} Keep ok
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep ok
cta_name{{Click Text}} cta_name{{Click Text}} Keep ok
source{{URL - utm_source}} Drop NEVER ARRIVES Wired to {{URL - utm_source}}, which is a TRAFFIC source where the schema means where on the page. Undefined on a direct visit, so MoEngage drops the key entirely and it has never once arrived. utm_source is also already collected free.
cta_location{{CJS - cta_location}} Add new Same reason as lead_form_opened: cta_name alone cannot say which Request private Tour was clicked.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep ok
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep ok
page_url{{Page URL}} Drop ok Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep ok
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
page_url{{Page URL}} Drop no data yet Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
No element to point at: the website pushes it to the dataLayer when the thing happens.
form_id{{Form ID}} form_id{{CJS - form_id}} Rewire sometimes empty (46/47) {{Form ID}} is a built-in that populates on FORM events; this trigger is Element Visibility, so it reads nothing. Measured empty in 46 of 47. The site's own code computes formId internally and never puts it on the DOM, but it is derivable: project_enquiry_modal inside the open enquiry dialog, contact_us_body inside section#enquire.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep sometimes empty (14/47) Works. Empty in 14 of 47 and every one of those is off a project page, which is correct.
source{{URL - utm_source}} Drop NEVER ARRIVES Wired to {{URL - utm_source}}, which is a TRAFFIC source where the schema means where on the page. Undefined on a direct visit, so MoEngage drops the key entirely and it has never once arrived. utm_source is also already collected free.
Drop held back, never sent Held back since day one and not buildable as defined. page_type is not the form's own type, and the site has one form type per page kind, which form_id now carries.
cta_name{{Click Text}} Add new Enquire, Brochure, Private Tour or Request private Tour. The question the event could not answer.
cta_location{{CJS - cta_location}} Add new secondary_nav, project_details, lets_connect or contact_page_body, from the nearest ui- section class. This is what separates the sub-nav Enquire from the header Enquire, which cta_name cannot.
Today: Element Visibility on form.ui-form, 50% on screen, once per element
After: Click on the four CTA selectors, plus Element Visibility retained ONLY for the inline form on /contact-us/
Three fixes in one change. The CTA identity exists only at click time: all four CTAs open ONE shared modal whose markup carries no id, no data-*, and an EMPTY <h2> title, so no variable reading the form can recover which button opened it. A click trigger also makes the event mean someone CHOSE to open a form rather than a form scrolled past, which is what produced 16 fires in one sitting.
The enquiry form is portalled into the page only while the modal is open, so it does not exist until one of the CTAs is clicked.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
page_url{{Page URL}} Drop no data yet Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
location_topic{{Click Text}} location_topic{{Click Text}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
No element to point at: the website pushes it to the dataLayer when the thing happens.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep sometimes empty (7/36)
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep sometimes empty (7/36)
page_url{{Page URL}} Drop ok Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep ok
cta_name{{Click Text}} cta_name{{Click Text}} Keep ok
destination_url{{Click URL}} destination_url{{Click URL}}, held back when empty Rewire sometimes empty (30/36) Empty in 30 of 36, every one a CTA that opens a modal rather than navigating. Correct to be absent, wrong to be sent blank.
cta_location{{CJS - cta_location}} Add new cta_name read ENQUIRE for 11 of 36 clicks across two different buttons. Today they are only tellable apart by destination_url being empty, which is an accident rather than an identifier.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep ok
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep ok
page_url{{Page URL}} Drop ok Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep ok
destination_url{{Click URL}} destination_url{{Click URL}} Keep ok
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
page_url{{Page URL}} Drop no data yet Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
No element to point at: it fires when the page loads.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
page_url{{Page URL}} Drop no data yet Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
campaign_name{{URL - utm_campaign}} campaign_name{{URL - utm_campaign}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
No element to point at: it fires when the page loads.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep ALWAYS EMPTY Empty in all 25, but every one fired off a project page where empty is correct. Keep and re-measure once it fires on a project page.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep ALWAYS EMPTY Same as project_name.
page_url{{Page URL}} Drop ok Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep ok
No element to point at: it fires when the page loads.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
page_url{{Page URL}} Drop no data yet Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
faq_question{{Click Text}} faq_question{{Click Text}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
page_url{{Page URL}} Drop no data yet Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
video_id{{Custom JS - youtube_video_id}} video_id{{Custom JS - youtube_video_id}} Investigate no data yet Same variable as project_video_played. No data yet; settle it there.
watch_seconds{{Video Current Time}} watch_seconds{{Video Current Time}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
completion_pct{{Video Percent}} completion_pct{{Video Percent}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
page_url{{Page URL}} Drop no data yet Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
amenity_name{{Click Text}} amenity_name{{Click Text}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
No element to point at: the website pushes it to the dataLayer when the thing happens.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
page_url{{Page URL}} Drop no data yet Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
configuration{{Click Text}} configuration{{Click Text}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
page_url{{Page URL}} Drop no data yet Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
page_url{{Page URL}} Drop no data yet Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
price_band{{Click Text}} price_band{{Click Text}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
page_url{{Page URL}} Drop no data yet Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
section_name{{Click Text}} section_name{{Click Text}} Keep, unverified no data yet This event has not fired since the exports began, so the attribute has never been observed arriving.
project_name{{RegEx Table - project_name}} project_name{{RegEx Table - project_name}} Keep ok
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep ok
page_url{{Page URL}} Drop ok Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep ok
video_id{{Custom JS - youtube_video_id}} video_id{{Custom JS - youtube_video_id}} Investigate NEVER ARRIVES Never arrives across 6 events. The embed URL DOES carry the id (/embed/YO7ZHbLSpl0?...) and the regex should match it, so the cause is not yet known. Reproduce in Preview and read {{Video URL}} at the moment the trigger fires before changing anything.
form_id{{DLV - lead_form_id}} form_id{{DLV - lead_form_id}} Keep ok
fields_completed{{DLV - lead_fields_completed}} fields_completed{{DLV - lead_fields_completed}} Keep ok
abandonment_step{{DLV - lead_abandonment_step}} abandonment_step{{DLV - lead_abandonment_step}} Keep ok
time_to_abandon{{DLV - lead_time_to_abandon_seconds}} time_to_abandon{{DLV - lead_time_to_abandon_seconds}} Keep ok
No element to point at: the website pushes it to the dataLayer when the thing happens.
project_name{{DLV - lead_project}} project_name{{DLV - lead_project}} Keep ok
enquiry_type{{DLV - lead_enquiry_type}} enquiry_type{{DLV - lead_enquiry_type}} Keep sometimes empty (16/22) Empty in 16 of 22 and every one is a form other than Contact Us, where the select does not render. Correct.
location{{DLV - lead_location}} location{{DLV - lead_location}} Keep sometimes empty (16/22) Same as enquiry_type.
No element to point at: the website pushes it to the dataLayer when the thing happens.
verification_method{{DLV - otp_verification_method}} verification_method{{DLV - otp_verification_method}} Keep ok
verification_status{{DLV - otp_verification_status}} verification_status{{DLV - otp_verification_status}} Keep ok
No element to point at: the website pushes it to the dataLayer when the thing happens.
project_name{{DLV - project_slug}} project_name{{DLV - project_slug}} Keep ok
project_location{{RegEx Table - project_location}} project_location{{RegEx Table - project_location}} Keep ok
page_url{{Page URL}} Drop ok Duplicates MoEngage's own URL attribute, which arrives free on every event. Measured identical in 49 of 52 blocks; the 3 differences are a #fragment and a gtm_debug parameter, i.e. the same page.
page_type{{RegEx Table - page_type}} page_type{{RegEx Table - page_type}} Keep ok
brochure_id{{DLV - brochure_id}} brochure_id{{DLV - brochure_id}} Keep ok
brochure_type{{DLV - brochure_type}} brochure_type{{DLV - brochure_type}} Keep ok
configuration{{DLV - configuration}} configuration{{DLV - configuration}} Keep ALWAYS EMPTY Empty in both events, and correctly so: a project-level brochure has no single configuration. Fills when a configuration-specific brochure exists.
No element to point at: the website pushes it to the dataLayer when the thing happens.
form_id{{DLV - lead_form_id}} form_id{{DLV - lead_form_id}} Keep ok
fields_completed{{DLV - lead_fields_completed}} fields_completed{{DLV - lead_fields_completed}} Keep ok
last_field_completed{{DLV - lead_last_field_completed}} last_field_completed{{DLV - lead_last_field_completed}} Keep ok
No element to point at: the website pushes it to the dataLayer when the thing happens.
Nothing matches that filter.