<@U036HQ571NK> how c

[2023-03-11 05:39:47 PM] : lnlrz how could you look at this as a "yes and" scenario instead of an either/or?
1 Reply
jasonswett
jasonswettOP3mo ago
[2023-03-11 07:42:51 PM] : hmm, I get what you mean. I think the things I've learned before (outside 30x500) has been getting in the way... I'm thinking that a regular newsletter sequence (of ebombs) does prepare people to buy (i.e how marketing leads to sales), but generating sales for me right now feels like an uphill battle. I already have a product and I've launched it before and generated sales. From a "permission marketing" perspective, I feel too pushy to launch it again to my list esp. because the course sales are always open anyway. Is it useless to worry about it, and just focus on publishing ebombs instead? [2023-03-13 12:58:51 PM] : Ebombs can definitely "prepare" people to buy, but on their own they have a different purpose: to EARN the sale, and more specifically earn the trust so that when you ask for the sale, they already trust that you can help them. think "if the free stuff is good, the paid stuff is even better"
From a "permission marketing" perspective, I feel too pushy to launch it again to my list esp. because the course sales are always open anyway.
think a bout any store you've interacted with offline. they have their products for sale all the time. but sometimes they run promotions or sales or even just remind you "hey, we sell this and you can buy it from us." those promotions can be annoying if they're out of the blue and unrelated and poorly targeted and are pushing stuff you don't want or need. but have you ever seen a promotion for a thing you already wanted, where all it did was make it easier for you to make a decision? or that reminded you about something you needed, and just had been distracted from getting? that's what "launch" is, beyond a product's initial release. Launch is just a strategic communication about something they probably already want, but aren't thinking about buying in that moment. Remember that permission marketing doesn't say "you can't ask for the sale" - it says you have to earn the right to ask for the sale. that's what ebombs do. [2023-03-14 02:39:26 AM] : That was…amazingly explained. This made it click for me! Thank you, Alex. I’ve been struggling with feeling pushy when selling, that often I just “suck it up” whenever I launch something. Whenever I see more unsubscribes than usual, (e.g. I launch to 1500 people and see around 14-20 unsubcribes) it really gets to me. I’m just not used to seeing these numbers and for a long time it made me feel like I’m getting annoying whenever I start even a hint of a selling “stance”. Thank you again [2023-03-14 10:21:27 AM] : glad it helped! on unsubscribes, something to remember: 20 unsubscribes out of 1500 people is around 1%. what about the 99% who decide to stay? even the 3-5% (or more!) who decide to buy is more than the unsubscribes. it's easy - and a mistake - to attribute "unsubscribes" to "I'm being annoying" instead of literally any other reason! [2023-03-14 10:53:52 AM] : Seeing all those hard won people unsubscribe is something that really got to me my first launch, actually, every time I sent an email. My friend said its like a "leaky bucket" and she was right. Still took a while to ignore it but I largely do now. Launches are more extreme events so one thing that worked for me is to offer the "unsubscribe from the launch but stay on the list click here" option. That stemmed the outflow a lot and even someone who had opted out from that later bought - as Alex said there are so many reasons we can't possibly know about. Another day to day thing I did is you can add the script dceddia wrote to modify the presentation of your convertkit dashboard (assuming you are using CK!) ... It changes broadcast unsubscribe numbers to "% stayed" ... appreciate its a bit of slight of hand but as your list grows I suspect this number will stay constant and therefore, if you are going to worry about anything, it is that % rather than the total number of people. Here is mine - I have no idea how I set this up btw! haha - but glad I did [File hidden by Slack limit] [2023-03-14 10:56:23 AM] : oh yeah! i forgot about that thing. It’s a little script you can drop into greasemonkey/tampermonkey/violentmonkey/whatever the current equivalent is:
// ==UserScript==
// @name CK - Hide or replace unsubs
// @namespace Violentmonkey Scripts
// @match <https://app.convertkit.com/*>
// @grant none
// @version 1.0
// @author -
// @description Hides the Unsubscribers number on broadcasts, or replaces it with the percentage of people who stayed.
// ==/UserScript==

// HOW TO USE THIS:
//
// - Install the Violentmonkey extension for your browser
// - Click the extension's icon, click the + button to create a new script
// - Select all text, delete it, and replace it with the contents of this file
//
// HOW TO MODIFY:
//
// It's got 2 modes
// - hide unsubs
// - replace unsubs with "Stayed" (the percentage of people who DIDN'T unsubscribe)
//
// To change the mode, change 'hide' to 'replace' here:

const MODE = 'replace';

///////////////////////////////////

function waitUntilReady() {
if(getNavbar()) {
modifyPage();
} else {
setTimeout(waitUntilReady, 100);
}
}

function modifyPage() {
const isBroadcastsPage = [...document.querySelectorAll('h2')].some(tag => /Broadcasts/.test(tag.innerText));


if(isBroadcastsPage) {
modifyBroadcasts();
}
}

function modifyBroadcasts() {
if(MODE === 'hide') {
repeatUntilDone(hideUnsubs);
} else {
repeatUntilDone(replaceUnsubs);
}
}

function repeatUntilDone(func) {
const stats = getStats();

// If no stats are on the page yet, retry until they are
if(!stats.some(bs => /Recipients/.test(bs.innerText))) {

setTimeout(() => repeatUntilDone(func), 100);

return;
}

// Repeat until 'Unsubscribers' is gone. (Some rows take longer to load than others)
const loadedRows = stats.filter(bs => /Recipients/.test(bs.innerText));

if(loadedRows.some(bs => /Unsubscribers/.test(bs.innerText))) {
func(stats);
setTimeout(() => repeatUntilDone(func), 100);

}
}

function hideUnsubs(stats) {
stats.forEach(row => {

[...row.querySelectorAll('a')]
.filter(a => /Unsubscribers/.test(a.innerText))

.forEach(link => {

if(!link) return;
const dot = link.previousElementSibling;
if(dot) dot.remove();
link.remove();
});
});
}

function replaceUnsubs(stats) {
stats.forEach(row => {

const links = [...row.querySelectorAll('a')];
const recipLink = links.filter(a => /Recipients/.test(a.innerText))[0];

const unsubLink = links.filter(a => /Unsubscribers/.test(a.innerText))[0];

if(!recipLink || !unsubLink) return;

const dot = unsubLink.previousElementSibling;

const recipients = parseFloat(recipLink.innerText.replace(/,/g, ''));
const unsubs = parseFloat(unsubLink.innerText.replace(/,/g, ''));
const stayed = 100.0 * (recipients - unsubs) / recipients;

// handle junk
if(isNaN(stayed)) {
unsubLink.remove();
dot.remove();
return
}

unsubLink.innerText = stayed.toFixed(1) + '% Stayed';
unsubLink.removeAttribute('href');
});
}

function getNavbar() {
return document.querySelector('nav');
}

function getStats() {
return [...document.querySelectorAll('.broadcast_stats')];
}


waitUntilReady();
// ==UserScript==
// @name CK - Hide or replace unsubs
// @namespace Violentmonkey Scripts
// @match <https://app.convertkit.com/*>
// @grant none
// @version 1.0
// @author -
// @description Hides the Unsubscribers number on broadcasts, or replaces it with the percentage of people who stayed.
// ==/UserScript==

// HOW TO USE THIS:
//
// - Install the Violentmonkey extension for your browser
// - Click the extension's icon, click the + button to create a new script
// - Select all text, delete it, and replace it with the contents of this file
//
// HOW TO MODIFY:
//
// It's got 2 modes
// - hide unsubs
// - replace unsubs with "Stayed" (the percentage of people who DIDN'T unsubscribe)
//
// To change the mode, change 'hide' to 'replace' here:

const MODE = 'replace';

///////////////////////////////////

function waitUntilReady() {
if(getNavbar()) {
modifyPage();
} else {
setTimeout(waitUntilReady, 100);
}
}

function modifyPage() {
const isBroadcastsPage = [...document.querySelectorAll('h2')].some(tag => /Broadcasts/.test(tag.innerText));


if(isBroadcastsPage) {
modifyBroadcasts();
}
}

function modifyBroadcasts() {
if(MODE === 'hide') {
repeatUntilDone(hideUnsubs);
} else {
repeatUntilDone(replaceUnsubs);
}
}

function repeatUntilDone(func) {
const stats = getStats();

// If no stats are on the page yet, retry until they are
if(!stats.some(bs => /Recipients/.test(bs.innerText))) {

setTimeout(() => repeatUntilDone(func), 100);

return;
}

// Repeat until 'Unsubscribers' is gone. (Some rows take longer to load than others)
const loadedRows = stats.filter(bs => /Recipients/.test(bs.innerText));

if(loadedRows.some(bs => /Unsubscribers/.test(bs.innerText))) {
func(stats);
setTimeout(() => repeatUntilDone(func), 100);

}
}

function hideUnsubs(stats) {
stats.forEach(row => {

[...row.querySelectorAll('a')]
.filter(a => /Unsubscribers/.test(a.innerText))

.forEach(link => {

if(!link) return;
const dot = link.previousElementSibling;
if(dot) dot.remove();
link.remove();
});
});
}

function replaceUnsubs(stats) {
stats.forEach(row => {

const links = [...row.querySelectorAll('a')];
const recipLink = links.filter(a => /Recipients/.test(a.innerText))[0];

const unsubLink = links.filter(a => /Unsubscribers/.test(a.innerText))[0];

if(!recipLink || !unsubLink) return;

const dot = unsubLink.previousElementSibling;

const recipients = parseFloat(recipLink.innerText.replace(/,/g, ''));
const unsubs = parseFloat(unsubLink.innerText.replace(/,/g, ''));
const stayed = 100.0 * (recipients - unsubs) / recipients;

// handle junk
if(isNaN(stayed)) {
unsubLink.remove();
dot.remove();
return
}

unsubLink.innerText = stayed.toFixed(1) + '% Stayed';
unsubLink.removeAttribute('href');
});
}

function getNavbar() {
return document.querySelector('nav');
}

function getStats() {
return [...document.querySelectorAll('.broadcast_stats')];
}


waitUntilReady();
[2023-03-14 11:15:06 AM] : Love this script! ConvertKit should really implement it. Creators don’t need the emphasis on unsubscribes

Did you find this page helpful?