Edit Post
«
CRM Integration to Turn Customer Churn Into an Advantage
Conclusion
In a privacy-tightening, AI-accelerated landscape, the winners will be retailers that:
- Treat GA4 predictive metrics as a starting point, not the finish line.
- Enrich with CRM signals—margin, returns, support tickets—to reflect true value.
- Serve high-propensity users first while nurturing low-propensity prospects with education.
- Plug propensity outputs into AI search agents and marketing copilots for always-on optimisation.
By unifying first-party data and modern AI tooling, CMOs can finally get ahead of the endless promotion cycle and focus on profitable, sustainable growth.
References (APA 7)
- Boston Consulting Group. (2024, December 12). What consumers want from personalisation. https://www.bcg.com/publications/2024/what-consumers-want-from-personalization
- Cloud Architecture Centre. (2024, June 25). Use Vertex AI pipelines for propensity modelling on Google Cloud. Google. https://cloud.google.com/architecture/use-vertex-ai-pipelines-for-propensity-modeling
- Google. (2025, May 15). AI Mode in Google Search: Updates from I/O 2025. https://blog.google/products/search/google-search-ai-mode-update/
- Google Analytics Help. (2025). Predictive metrics. https://support.google.com/analytics/answer/9846734
- Harvard Business School. (2016). Customer profitability and lifetime value (Background Note 503-XXX). https://www.hbs.edu/faculty/Pages/item.aspx?num=29218
- McKinsey & Company. (2025, April 12). How gen AI can take customer personalisation to the next level. https://www.mckinsey.com/featured-insights/themes/how-gen-ai-can-take-customer-personalization-to-the-next-level
- Microsoft. (2025, May 19). Microsoft Build 2025: The age of AI agents and building the open agentic web. https://blogs.microsoft.com/blog/2025/05/19/microsoft-build-2025-the-age-of-ai-agents-and-building-the-open-agentic-web/
- MIT Sloan Management Review. (2024, January 2). Use data to your advantage in 2024. https://mitsloan.mit.edu/ideas-made-to-matter/use-data-to-your-advantage-2024-new-ideas-mit-sloan-management-review
- Mistral AI. (2025). Models overview. https://docs.mistral.ai/getting-started/models/models_overview/
- OpenAI. (2025, May 14). Sycophancy in GPT-4o: What happened and what we’re doing about it. https://openai.com/index/sycophancy-in-gpt-4o
- Perplexity. (2025, February 11). Meet new Sonar: A blazing-fast model optimised for Perplexity Search. https://www.perplexity.ai/hub/blog/meet-new-sonar
Predictive purchase propensity modelling for ecommerce with GA4 and CRM enrichment
Why purchase propensity matters in 2025
Google Trends shows searches for “purchase propensity model” up 78 % YoY (July 2025) as brands race to protect margins in a cookie-less world. McKinsey puts personalisation gains at +10–20 % revenue uplift when grounded in propensity scores McKinsey & Company, while BCG finds 4 in 5 consumers now expect predictive, context-aware experiences BCG Global.
Measuring propensity in Google Analytics 4
GA4 ships three native predictive metrics: Purchase probability, Churn probability and Predicted revenue, trained on your first-party events and refreshed daily. Purchase probability forecasts the chance that an active user will trigger an purchase event in the next 7 days.
Read more: for GA4 product-data dimensions explained
Minimum data thresholds
-
- ≥1,000 returning purchasers & ≥1,000 non-purchasers in the past 28 days
-
- Enhanced E-commerce enabled and clean event taxonomy
When thresholds are met, GA4 surfaces a propensity distribution you can:
-
- Export to BigQuery to build custom models (e.g. XGBoost, logistic regression), Google Cloud AI Port Labs
-
- Create predictive audiences (e.g. “90-day high-propensity new users”) and share with Google Ads for smart bidding.
Enriching GA4 with CRM & order data
GA4 alone lacks margin, inventory and offline value signals. Forward-thinking CMOs now:
| Step | Action | Tooling |
|---|---|---|
| 1 | Daily BigQuery export of GA4 user and event tables | Native connector |
| 2 | ETL sales ledger (SKU, net margin, promo code, CLTV) from ERP/CRM to BigQuery | Cloud Data Fusion / Fivetran |
| 3 | Identity stitching via hashed email / User-ID to create a customer 360 table | BigQuery SQL |
| 4 | Feature store: recency-frequency-monetary variables, coupon usage, NPS | Vertex AI Feature Store |
| 5 | AutoML / XGBoost for probability-of-next-purchase & expected margin | Vertex AI Pipelines Google Cloud |
Internal how-to: GA4-CRM integration guide
Marketing activation playbook
-
- Email & SMS: progressive discounts triggered when probability 40-60 % but margin ≥20 %.
-
- Web personalisation: reorder widgets for 80%+ propensity cohort; suppress promotions for 5% tier.
-
- Paid media: feed high-propensity IDs to Google Ads Optimised Target ROAS; reduce spend on low propensity+low-margin segment.
AI search companions and why CMOs should care
-
- Google AI Overviews & AI Mode now reach 1.5 bn users and surface shoppable links inside the generative answers blog. google.
-
- Perplexity Sonar outperforms Gemini 2.5 Pro and GPT-4o in Search Arena tests and offers an API for instant competitive research. Perplexity AI.
-
- Microsoft Copilot is rolling out Copilot Agents; 230k orgs already use them to mine CRM data in seconds. The Official Microsoft Blog.
-
- OpenAI update adds deeper personalisation controls, useful for dynamic copy generation.
Tip: Feed your GA4-CRM propensity scores into these copilots via API to auto-draft channel-specific creative that reflects each user’s likelihood to buy.
Future-proofing with Gen AI personalisation
Edit Post
«
«
function openBoxInfo(){
event.preventDefault();
var detailBox = document.querySelector(".mce-detail-info");
if(detailBox.style.display == "none"){
detailBox.style.display = "block";
}else{
detailBox.style.display = "none";
}
}
function closePointer(){
jQuery('#deactivate-contact-form-7-mailchimp-extension').pointer('close');
}
function emailChecked() {
var checkBox = document.getElementById("05");
var text = document.getElementById("email-text");
var button = document.getElementById("submit_pointer");
if (checkBox.checked == true){
button.disabled = false;
text.style.display = "block";
} else {
text.style.display = "none";
}
}
function radioChecked() {
jQuery('#reason01').on('change', function () {
var checkBox = document.getElementById("reason01");
if(jQuery("#reason01").prop("checked")){
document.getElementById("reason01_desc").style.display = "block";
document.getElementById("reason02_desc").style.display = "none";
document.getElementById("reason03_desc").style.display = "none";
document.getElementById("reason04_desc").style.display = "none";
document.getElementById("reason01_desc").setAttribute('required', '');
document.getElementById("reason02_desc").removeAttribute('required');
document.getElementById("reason03_desc").removeAttribute('required');
document.getElementById("reason04_desc").removeAttribute('required');
}
});
jQuery('#reason02').on('change', function () {
var checkBox = document.getElementById("reason02");
if(jQuery("#reason02").prop("checked")){
document.getElementById("reason01_desc").style.display = "none";
document.getElementById("reason02_desc").style.display = "block";
document.getElementById("reason03_desc").style.display = "none";
document.getElementById("reason04_desc").style.display = "none";
document.getElementById("reason01_desc").removeAttribute('required');
document.getElementById("reason02_desc").setAttribute('required', '');
document.getElementById("reason03_desc").removeAttribute('required');
document.getElementById("reason04_desc").removeAttribute('required');
}
});
jQuery('#reason03').on('change', function () {
var checkBox = document.getElementById("reason03");
if(jQuery("#reason03").prop("checked")){
document.getElementById("reason01_desc").style.display = "none";
document.getElementById("reason02_desc").style.display = "none";
document.getElementById("reason03_desc").style.display = "block";
document.getElementById("reason04_desc").style.display = "none";
document.getElementById("reason01_desc").removeAttribute('required');
document.getElementById("reason02_desc").removeAttribute('required');
document.getElementById("reason03_desc").setAttribute('required', '');
document.getElementById("reason04_desc").removeAttribute('required');
}
});
jQuery('#reason04').on('change', function () {
var checkBox = document.getElementById("reason04");
if(jQuery("#reason04").prop("checked")){
document.getElementById("reason01_desc").style.display = "none";
document.getElementById("reason02_desc").style.display = "none";
document.getElementById("reason03_desc").style.display = "none";
document.getElementById("reason04_desc").style.display = "block";
document.getElementById("reason01_desc").removeAttribute('required');
document.getElementById("reason02_desc").removeAttribute('required');
document.getElementById("reason03_desc").removeAttribute('required');
document.getElementById("reason04_desc").setAttribute('required', '');
}
});
var button = document.getElementById("submit_pointer");
button.disabled = false;
}
jQuery(document).on('click', '.submit_pointer', function(event){
event.preventDefault(); // stop post action
var reason = "";
var reason_detail = "";
var php_log = false;
if(jQuery("#reason01").prop("checked")){
if(jQuery("#reason01_desc").val() == "" || jQuery("#reason01_desc").val().trim() == ""){
alert("Please provide What can we do to make it better");
event.preventDefault();
return ;
}else{
if(reason == ""){
reason = jQuery("#reason01").val()
}else{
reason = reason + " & " + jQuery("#reason01").val()
}
reason_detail = jQuery("#reason01_desc").val()
}
}
if(jQuery("#reason02").prop("checked")){
if(jQuery("#reason02_desc").val() == "" || jQuery("#reason02_desc").val().trim() == ""){
alert("Please provide What is broken");
event.preventDefault();
return ;
}else{
if(reason == ""){
reason = jQuery("#reason02").val()
}else{
reason = reason + " & " + jQuery("#reason02").val()
}
reason_detail = jQuery("#reason02_desc").val()
}
php_log = true
}
if(jQuery("#reason03").prop("checked")){
if(jQuery("#reason03_desc").val() == "" || jQuery("#reason03_desc").val().trim() == ""){
alert("Please provide What solution you choose");
event.preventDefault();
return ;
}else{
if(reason == ""){
reason = jQuery("#reason03").val()
}else{
reason = reason + " & " + jQuery("#reason03").val()
}
reason_detail = jQuery("#reason03_desc").val()
}
}
if(jQuery("#reason04").prop("checked")){
if(jQuery("#reason04_desc").val() == "" || jQuery("#reason04_desc").val().trim() == ""){
alert("Please let us know what can we do better");
event.preventDefault();
return ;
}else{
if(reason == ""){
reason = jQuery("#reason04").val()
}else{
reason = reason + " & " + jQuery("#reason04").val()
}
reason_detail = jQuery("#reason04_desc").val()
}
}
var email = "-"
if (jQuery('#email-text').val() != undefined) {
email = jQuery('#email-text').val();
}
var action_url = "-"
if (jQuery('#ajaxformid').attr('action') != undefined) {
action_url = jQuery('#ajaxformid').attr('action');
}
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: {
email: email,
reason: reason,
action:'submit_deactivation',
action_url:action_url,
reason_detail: reason_detail,
php_log : php_log
},
success: function(data){
console.log(data);
}
});
window.location = action_url;
});
jQuery('#deactivate-contact-form-7-mailchimp-extension ').on('click', function(e){
e.preventDefault();
var urlRedirect = jQuery(this).attr('href');
jQuery(
function() {
jQuery('#deactivate-contact-form-7-mailchimp-extension').pointer({
content:
"
",
position:
{
edge: 'top',
align: 'left'
},
pointerClass:
'wp-pointer arrow-right',
pointerWidth: 420,
close: function() {
},
}).pointer('open');
}
);
});
Check this for the last column in a row. i.e. when the columns add up to 1.
Enter delay (in milliseconds) if needed e.g. 150. This parameter comes in handy when creating the animate in «one by one» effect in horizontal columns.
Check this for the last column in a row. i.e. when the columns add up to 1.
Enter delay (in milliseconds) if needed e.g. 150. This parameter comes in handy when creating the animate in «one by one» effect in horizontal columns.
Check this for the last column in a row. i.e. when the columns add up to 1.
Enter delay (in milliseconds) if needed e.g. 150. This parameter comes in handy when creating the animate in «one by one» effect in horizontal columns.
Check this for the last column in a row. i.e. when the columns add up to 1.
Enter delay (in milliseconds) if needed e.g. 150. This parameter comes in handy when creating the animate in «one by one» effect in horizontal columns.
Check this for the last column in a row. i.e. when the columns add up to 1.
Enter delay (in milliseconds) if needed e.g. 150. This parameter comes in handy when creating the animate in «one by one» effect in horizontal columns.
Check this for the last column in a row. i.e. when the columns add up to 1.
Enter delay (in milliseconds) if needed e.g. 150. This parameter comes in handy when creating the animate in «one by one» effect in horizontal columns.
Check this for the last column in a row. i.e. when the columns add up to 1.
Enter delay (in milliseconds) if needed e.g. 150. This parameter comes in handy when creating the animate in «one by one» effect in horizontal columns.
Enter delay (in milliseconds) if needed e.g. 150. This parameter comes in handy when creating the animate in «one by one» effect in horizontal columns.
Don’nt include «px» in your string. e.g. 650
Would you like the height of your slider to constantly scale in porportion to the screen size?
Would you like this slider to display the full width of the page?
Would you like this slider to display arrows on the right and left sides?
Would you like this slider to display bullets on the bottom?
Please select your overall bullet navigation style here.
Would you like this slider to have swipe interaction on desktop?
will only activate if the slider is the top level element in the page
Would you like your slider to loop infinitely?
This will only become active when used in combination with the full width option
Please select your slider transition here
Slider Next/Prev Button Styling
Please select your desired button sizing
If you would like this slider to autorotate, enter the rotation speed in milliseconds here. i.e 5000
Don’nt include «px» in your string. e.g. 40
Don’nt include «px» in your string. e.g. 40
Enter delay (in milliseconds) if needed e.g. 150. This parameter comes in handy when creating the animate in «one by one» effect in horizontal columns.
If you would like to control the specifc number of pixels your divider is, enter it here. Don’t enter «px», just the numnber e.g. «20»
The number/count of your milestone e.g. «13»
The subject of your milestones e.g. «Projects Completed»
An optional symbol to place next to the number counted to. e.g. «%» or «+»
Enter your size in pixels, the default is 62.
Enter your size in pixels
Tiny is recommended to be used inline with regular text. Small is recommended to be used inline right before heading text. Regular can be used in a variety of places. Large is recommended to be used at the top of columns.
Don’nt include «px» in your string. e.g. 40 – the default is 64
This will cause the icon to appear to draw itself
Enter time in milliseconds e.g. 400
How many columns would you like?
Enter any social media links with a comma separated list. e.g. Facebook,http://facebook.com, Twitter,http://twitter.com
Will only be used if Link Type is not set to «None».
Enter in milliseconds (default is 700)
Would you like the carousel the transition automatically?
Click here to see examples of these.
Check to enable
Check to enable
Check to enable
Check to enable
Check to enable
Only supply the formats you desire, this shortcode is just a shortcut to place the default WordPress video player.
Please select the categories you would like to display for your portfolio. You can select multiple categories too (ctrl + click on PC and command + click on Mac).
Please select the style you would like your projects to display in.
This will allow your portfolio items to display in a masonry layout as opposed to a fixed grid. You can define your masonry sizes in each project. If using the full width layout, will only be active with the alternative project style.
Checking this box will allow your portfolio to display sortable filters
This will allow your filters to display horizontally instead of in a dropdown. (Only used if you enable sortable above.)
Would you like to enable pagination for this portfolio?
How many projects would you like to display per page? If pagination is not enabled, will simply show this number of projects. Enter as a number example «20»
This will remove the single project page from being accessible thus rendering your portfolio into only a gallery.
This will make your carousel extend the full width of the page. Won’t work in a column shortcode!
Enter any text you would like for the heading of your carousel
This will be the text that is in a link leading users to your desired page (will be omitted for full width carousels and an icon will be used instead)
Enter portfolio page URL you would like to link to. Remember to include «http://»!
Checking this box will remove the controls from your carousel
Enter as a number example «6»
Please select the style you would like your projects to display in.
This will remove the single project page from being accessible thus rendering your portfolio into only a gallery.
Please select the categories you would like to display for your blog. You can select multiple categories too (ctrl + click on PC and command + click on Mac).
Would you like to enable pagination?
How many posts would you like to display per page? If pagination is not enabled, will simply show this number of posts. Enter as a number example «10»
These labels are defined by you in the «Blog Options» tab of your theme options panel.
Select post types to populate posts from. Note: If no post type is selected, WordPress will use default "Post" value.
<# } #>
{{{ vc.loop_partial('text-input', 'size', loop) }}}
How many teasers to show? Enter number or word "All".
<# } #>
<# if(vc.loop_field_not_hidden('order_by', loop)) { #>
{{{ vc.loop_partial('dropdown', 'order_by', loop) }}}
Select how to sort retrieved posts. More at
WordPress codex page.
<# } #>
<# if(vc.loop_field_not_hidden('order', loop)) { #>
{{{ vc.loop_partial('dropdown', 'order', loop) }}}
Designates the ascending or descending order.
<# } #>
<# if(vc.loop_field_not_hidden('ignore_sticky', loop)) { #>
{{{ vc.loop_partial('checkboxes', 'ignore_sticky_posts', loop) }}}
<# } #>
<# if(vc.loop_field_not_hidden('categories', loop)) { #>
{{{ vc.loop_partial('autosuggest', 'categories', loop) }}}
Filter output by posts categories, enter category names here.
<# } #>
<# if(vc.loop_field_not_hidden('tags', loop)) { #>
{{{ vc.loop_partial('autosuggest', 'tags', loop) }}}
Filter output by posts tags, enter tag names here.
<# } #>
<# if(vc.loop_field_not_hidden('tax_query', loop)) { #>
{{{ vc.loop_partial('autosuggest', 'tax_query', loop) }}}
Filter output by custom taxonomies categories, enter category names here.
<# } #>
<# if(vc.loop_field_not_hidden('by_id', loop)) { #>
{{{ vc.loop_partial('autosuggest', 'by_id', loop) }}}
Only entered posts/pages will be included in the output. Note: Works in conjunction with selected "Post types".
<# } #>
<# if(vc.loop_field_not_hidden('authors', loop)) { #>
{{{ vc.loop_partial('autosuggest', 'authors', loop) }}}
Filter by author name.
<# } #>
{{label}}
Actions
Selected media actions
<# } #>
Uploading
/
–
<# if ( data.buttons.check ) { #>
<# } #>
<#
var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly';
if ( data.describe ) {
if ( 'image' === data.type ) { #>
<# } else { #>
aria-label="Video title"
placeholder="Video title…"
<# } else if ( 'audio' === data.type ) { #>
aria-label="Audio title"
placeholder="Audio title…"
<# } else { #>
aria-label="Media title"
placeholder="Media title…"
<# } #> {{ maybeReadOnly }} />
<# }
} #>
Attachment Details
Saved.
<# var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; #>
<# if ( 'image' === data.type ) { #>
Learn how to describe the purpose of the image (opens in a new tab). Leave empty if the image is purely decorative.
<# } #>
<# if ( 'audio' === data.type ) { #>
<# } #>
<# if ( data.editable ) { #>
<# } #>
<# if ( data.clearable ) { #>
<# } #>
Attachment Display Settings
<# if ( 'image' === data.type ) { #>
<# } #>
<# if ( data.model.canEmbed ) { #><# if ( 'image' === data.type ) { #><# } #>
<# if ( 'undefined' !== typeof data.sizes ) { #>
<# } #>
Gallery Settings
Playlist Settings
<# var emptyModel = _.isEmpty( data.model ), isVideo = 'video' === data.controller.get('library').props.get('type'); #>
checked="checked"
<# } #> />
<# if ( ! isVideo ) { #>
checked="checked"
<# } #> />
<# } #>
checked="checked"
<# } #> />
Learn how to describe the purpose of the image (opens in a new tab). Leave empty if the image is purely decorative.
Site Icon Preview
As an app icon and a browser icon.
Add Element
Page settings
Templates
- All 0About 0Blog 0Call To Action 0Counters 0General 0Icons 0Hero Section 0Map 0Project 0Pricing 0Services 0Team 0Testimonials 0Shop 0
Salient Studio
Append predefined Salient templates to the current layout
Save layout and reuse it on different sections of this site.
My Templates
Append previously saved templates to the current layout.
My Elements
Manage My Elements
Remove existing elements
Page Settings
Change title of the current post (Note: changes may not be displayed in a preview, but will take effect after saving page).
Enter custom CSS (Note: it will be outputted only on this particular page).
Row Layout
Change particular row layout manually by specifying number of columns and their size value.
Global Section
Portfolio
: 4: all: 1: default
Recent Projects
: all: 1
Split Line Heading
Text With Inline Media
Highlighted Text
Divider
Single Image
: full: Fade In
Cascading Images
Image Comparison
Horizontal List Item
Blog
: std-blog-sidebar: all: default
Recent Posts
: default: light: all: none
Post Grid
: post
Category Grid
: posts: all: all
Centered Heading
Call To Action
: see-through
Video Lightbox
: play_button
Milestone
Interactive Map
Team Member
Fancy Box
Flip Box
Gradient Text
Image With Hotspots
: Accent-Color: plus_sign
Nectar Hotspot
Badge
Animated Title
Rotating Words Title
Single Testimonial
Testimonial
Client
List Item
: numerical
Menu Link
Pricing Column
Fancy Unordered List
Morphing Outline
Button
Icon
Scrolling Text
: None
Self Hosted Video Player
: 169
Contact Form 7
Image Gallery
Custom Heading
: This is custom heading element
Raw HTML
Raw JS
Pie Chart
: 50
Video Player
: https://vimeo.com/51589652
Icon
: fontawesome
ZigZag Separator
Session expired
Please log in again.
The login page will open in a new tab. After logging in you can close it and return to this page.
Notifications
CRM Integration to Turn Customer Churn Into an Advantage
Conclusion
In a privacy-tightening, AI-accelerated landscape, the winners will be retailers that:
-
- Treat GA4 predictive metrics as a starting point, not the finish line.
-
- Enrich with CRM signals—margin, returns, support tickets—to reflect true value.
-
- Serve high-propensity users first while nurturing low-propensity prospects with education.
-
- Plug propensity outputs into AI search agents and marketing copilots for always-on optimisation.
By unifying first-party data and modern AI tooling, CMOs can finally get ahead of the endless promotion cycle and focus on profitable, sustainable growth.
References (APA 7)
-
- Boston Consulting Group. (2024, December 12). What consumers want from personalisation. https://www.bcg.com/publications/2024/what-consumers-want-from-personalization
-
- Cloud Architecture Centre. (2024, June 25). Use Vertex AI pipelines for propensity modelling on Google Cloud. Google. https://cloud.google.com/architecture/use-vertex-ai-pipelines-for-propensity-modeling
-
- Google. (2025, May 15). AI Mode in Google Search: Updates from I/O 2025. https://blog.google/products/search/google-search-ai-mode-update/
-
- Google Analytics Help. (2025). Predictive metrics. https://support.google.com/analytics/answer/9846734
-
- Harvard Business School. (2016). Customer profitability and lifetime value (Background Note 503-XXX). https://www.hbs.edu/faculty/Pages/item.aspx?num=29218
-
- McKinsey & Company. (2025, April 12). How gen AI can take customer personalisation to the next level. https://www.mckinsey.com/featured-insights/themes/how-gen-ai-can-take-customer-personalization-to-the-next-level
-
- Microsoft. (2025, May 19). Microsoft Build 2025: The age of AI agents and building the open agentic web. https://blogs.microsoft.com/blog/2025/05/19/microsoft-build-2025-the-age-of-ai-agents-and-building-the-open-agentic-web/
-
- MIT Sloan Management Review. (2024, January 2). Use data to your advantage in 2024. https://mitsloan.mit.edu/ideas-made-to-matter/use-data-to-your-advantage-2024-new-ideas-mit-sloan-management-review
-
- Mistral AI. (2025). Models overview. https://docs.mistral.ai/getting-started/models/models_overview/
-
- OpenAI. (2025, May 14). Sycophancy in GPT-4o: What happened and what we’re doing about it. https://openai.com/index/sycophancy-in-gpt-4o
-
- Perplexity. (2025, February 11). Meet new Sonar: A blazing-fast model optimised for Perplexity Search. https://www.perplexity.ai/hub/blog/meet-new-sonar



