Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Learn more about your campaign's uninstall/opt-out/deleted tokens.
It is normal to see unsubscriptions (opt-out = uninstall = deleted tokens) at the level of campaign analytics or globally on the days you send campaigns.
Here are the three spots to track deleted tokens :
Indeed, on web push, we receive by return loop the unsubscriptions that took place between the sending of the last campaign and the campaign of the day. This loop occurs only once a campaign is sent. That's why you'll see deleted tokens only days when a push is made (as in the picture above).
So, instead of reading "the January 20th campaign generated 29 opt-outs", you should interpret it as "between January 10th and January 20th, approximately 29 opted-in users unsubscribed from web push". This highlights the importance of sending campaigns regularly to keep your user base clean.
About the ascent of deleted tokens:
on Firefox: the deleted tokens are sent to us each time an old opt-in connects to the website again, that's why we observe opt-outs even on days when no campaign is sent.
on Chrome: the deleted tokens are sent to us each time a new campaign is sent.
Here is a simple step-by-step guide to reset your web browser opt-in preferences for web push notifications.
In case you are testing a new web push integration, you may need to reset your browser preference to trigger again the push opt-in prompt. Here is a simple step-by-step guide on how to do it for Google Chrome, Mozilla Firefox, and Safari on a desktop.
Right-click on your webpage, then click Inspect to display the inspection. Head to the Application tab > Clear Storage, then click on Clear site data.
Click on the padlock icon 🔓 on the left side of the search bar and set the push preference to Ask.
Finally, click on the refresh button. You should be able to trigger the push opt-in prompt again.
Click on the padlock icon 🔓 on the left side of the search bar and set the push preference to Ask.
Click the padlock icon 🔓 again and clear your web push preferences:
Finally, click on the refresh button. You should be able to trigger the push opt-in prompt again.
From the Safari tab, click on Preferences. Head to the Privacy tab and click on Manage Website Data... Then select the website in the list and click Remove on the left-hand side.
From the Safari tab, click on Preferences. Head to the Websites tab and click on the Notifications button. Then select the website in the list and click Remove on the left-hand-side.
Finally, click the refresh button. You should be able to trigger the push opt-in prompt again.
Batch and your analytics tools measure user visits to your app in different ways.
You may observe discrepancies between Batch direct opens, Daily Active Users, starts, installations, and the number of sessions tracked by your third-party analytics tools (AT Internet, Firebase Analytics, Google Analytics, Mixpanel, etc.).
If you notice more direct opens from a Batch campaign than sessions in your analytics tool, this could be due to several reasons.
On Batch's side, each click on a push is counted as a direct open (without grouping push opens within a specific time window). This measurement is precise, as it is directly provided by our SDK. Calculation methods can vary across different tools. Keep in mind that:
Your analytics tool may count sessions only after a certain delay or a set number of interactions on your app/website.
Your analytics tool may group multiple visits within a specific time frame into a single session (e.g., 'Google Analytics groups hits received within 30 minutes into the same session' – see )."
Direct opens are measured by Batch when the user opens the notification, while your analytics tool measures a session when the app has effectively been opened.
After the notification has been clicked, your analytics tool may not count a new session, depending on the configuration. For example:
The user has not provided consent for session tracking in the app (e.g., via your Consent Management Platform).
The notification contains a deep link that opens in the device's web browser instead of the app.
The number of visits in your analytics tool may be higher than Batch's active users, installations, or starts. You should bear in mind that:
A "Start" as shown on Batch's dashboard corresponds to a start of the Batch SDK. If Batch SDK has been disabled by some users (e.g. by not giving their consent, see our ), a visit may be counted in your analytics tool but not in Batch.
You may also have defined specific rules to allow Batch to start in your app/website (e.g., IP filtering, after a specific action, a minimum delay, etc.).
For the web, Batch analytics do not include unsupported platforms (e.g., Internet Explorer), but your analytics tool is likely to include them.
To track your campaigns effectively, you should implement an event dispatcher (Guides: /). This enables the automatic dispatching of push opens and in-app displays from Batch's SDK to your analytics tool.
Read these guides for more details:
Need help setting up a multi-language campaign? Here is all the information you need to know!
Batch automatically detects the country and the language of your users. This allows you to create multi-language campaigns to send your push based on the language of your users.
But if your users can choose their own language or region for localization purposes in the app, we recommend setting up a custom region/language that will override the value detected by the SDK. Here is the documentation for iOS / Android.
Let's go through the steps of setting up a multi-language campaign 🚀
Either choose specific countries and/or languages to target or leave the fields Country and Language empty to target your audience globally 👇
You can choose Profile's local time to send notifications according to the user timezone, or Universal time (UTC) if you want to send a push notification to your users at a specific UTC time regardless of their location.
You can add as many localized versions of your message as you need by toggling the Multi-language option and clicking on + :
Then simply write your message in the appropriate language. Batch will automatically send the message in the right language to every targeted user.
💡Batch will deliver the message in the if you don’t have a message in the language of a user.
If you want to target one single language, like English, for example, but have different deeplinks for each country (like Australia, United States, United Kingdom), you will need to create one campaign per country.
Here is a step-by-step guide to create a campaign celebrating your user's birthday, or any other meaningful date.
Anniversary campaigns are an essential part of creating or improving your customer relationship. Let's go through the steps together!
First, create a new recurring automation.
Once you have selected the date attribut you want to base your reminder on, add the Next Anniversary condition:
Then you can choose the moment when the campaign should be sent to the users: on the due date, a day before (to remind them), or one day after (to extend the feel-good vibe 🌴).
Anniversary campaign sent on the due day:
Anniversary campaign sent the day before:
Anniversary campaign sent the day after:
Batch allows you to send a push notification that includes a deeplink.
A deeplink is a link that allows you to direct users to a specific location in your app or to a specific page on your website.
Deeplinks can have several formats:
HTTPS URLs: https://exemple.com/path/to/content
Custom URL schemes: example://path/to/content
If you want to direct your user inside your application, you must have a pre-existing deeplink structure in your app before being able to direct users to a specific place in your application.
By default, Batch will open the “home” of your app if you don't have any deeplink on your campaign.
On iOS, allow you to connect to content deep inside your app using standard HTTP or HTTPS links (see documentation on the ).
As universal links cannot be opened from within an app that supports them using UIApplication.openURL, you will need to declare your Universal links domains to Batch to open then inside of your app.
By default, Batch will redirect your users to the homepage of your website or your app. If you wish to redirect your users to a particular page on your website or in your app, you can include a deeplink directly from the message editor.
Click on Split by platform to add a specific deeplink fo each:
You can also direct your users to an external page, such as independent landing pages or even social networking sites!
You can easily collect your Batch campaign opens by creating the parameters related to your campaign in your analytics tool (, Google Analytics, etc.) and then adding them to the deeplink of your push campaign.
Here is everything you should check if you have no opens on your push campaigns.
If your campaigns have no opens, something may be misbehaving in your integration.
The problem can come from different places depending on the platform:
On iOS, the issue may be caused by a conflict with another SDK that automatically integrates with your application delegate (such as but not limited to Firebase).
You can fix this by manually integrating Batch. If you implement your own UNUserNotificationCenterDelegate, you need to make sure that Batch is integrated into it (learn more about this advanced setting).
On Android, it can mean that Batch is not integrated into all activities.
If you are using a Custom Receiver (or ) and displaying your own notifications, you might not have copied the data Batch needs in the intent.
If you use a Custom Receiver, we recommend checking if the interceptor meets your needs instead. It greatly reduces the likeliness of this kind of errors.
Also, Opens might not be detected if the splash screen ends too soon. We recommend using the feature to exclude the splash screen from Batch's lifecycle handling.
Once you have made the fixes, you can test your integration by taking the following steps:
Run the Xcode or Android Project on a device in debug mode.
Send a notification while outside of the app (in background mode, do not kill the app).
Open the notification.
Check your Xcode logs or your logcat. You should see the following logs: "App was opened from a Batch push".
Set recurring welcome campaigns in a few minutes to guide new users in your apps and increase engagement.
The installation date is natively collected by Batch's SDK. It means you can use it to create user segments as "users who installed the app 2 days ago".
In the targeting block of your campaign, click on "Add conditions", and pick "Installation date".
According to your campaign's goal, set the number of days after installation ("Installation occurred 2 days ago" in this example):
The advantage of these welcome campaigns is that you only have to set them up once. Then, you can let them run in the background.
In the "When" section of your campaign's creation form, choose the "Recurring" option. Choose a starting and ending date for the campaign:
You're all set! ✨
Indeed, by adding labels to a campaign or an automation, you can set a limit on the number of communications a user receives with that label during a given timeframe.
Labels are a type of tag you can attach to a campaign to organize your campaigns and to set custom marketing pressure rules to limit the number of pushes received per label. They allow a more granular capping than the global capping methods.
First off, you can create and manage existing Labels via Settings > Labels. Here you are able to manually add labels and change their name, which will identify a label when using the Campaigns API to push your campaign:
You can then edit the code and the name of existing labels or delete them if needed. Batch shows the number of orchestrations attached to each label so you can understand the impact of deleting or modifying one.
You can simply attach a label to a campaign via the "Add labels" button in the title field of the campaign/automation builder. Then you will be able to add up to 5 labels to a campaign:
Labels allow you to organize the list of your campaigns in the Campaigns and Automations tabs:
But here comes the interesting part: by going to Settings > Cappings, you can limit the number of notifications users will receive from campaigns attached to a specific label, it's called the :
All rules are dynamic, which means that rather than being a fixed push quota every X hours/days, Batch is gonna check the number of notifications that have been sent in the last X hours/days to conclude if the push has to be sent or not.
Here is what you should check if the attributes and events tagged in your app or sent through the Profile API do not come up in your orchestrations.
If you are trying to use data sent to Batch through your tagging plan or through the Profile API, but cannot find it, here's a few things you should check.
To check if your attribute or event is active, simply go to Data > Profile Data and go through the Attributes and Events tabs: if you can find it in the list, it means the data is active:
You can also check when the data was last received, which sources (iOS, Android, Web, API) it was sent from and when it was created.
If you cannot find the data in your list, go to step 3.
If you are sending new attributes or events to the dashboard, they need to be confirmed before you can use them in your orchestrations.
To do so, go to Data > Profile data, and click on the Attributes or Events tab > Confirm all:
If you could not find your attribute or event in the main list, click on View Archived.
All archived data will appear, and you can Restore them so they become available in your orchestrations again:
Save time by replicating your existing automations or campaigns, which will automatically reuse their successful settings and targeting.
This is very useful if you use a staging / pre-production Project before fully deploying the Batch solution in a live production Project for your daily Automations and Campaigns management operations.
To replicate Automations and Campaigns across Projects, you have two intuitive options:
From the Automation / Campaigns Lists
From the Automation / Campaign Builder
In this option, you need to click on the '...' button on the right side of the selected Campaign / Automation. Then on the short drop-down menu click on 'Replicate':
As soon as you click on 'Replicate', a pop-up form shows you all the Projects in which you can duplicate your Automation / Campaign:
Select the Project to which you want to replicate your Automation / Campaign, then click on the 'Replicate to this/these project(s)' button to immediately perform its replication(s).
In this option, the Batch users just need to click on the '...' button, available on your Batch Dashboard, on the top right corner of all Batch Campaigns and Automations. Then on the drop-down menu, click on 'Replicate':
Once you click on 'Replicate', a popup listing the different Projects to select for automated replication is displayed:
Select the Project to which you want to replicate your Automation / Campaign, then click on the 'Replicate to this/these project(s)' button to immediately execute its replication(s).
You have now replicated your campaigns/automations! ✨
You don’t know where to track the uninstall stat of your application? I’ll tell you where you can find this indicator.
At Batch, we do recommend using tools such as Google play developer for Android or iTunes Connect for iOS that can give you relevant information about uninstalls.
If Batch does not know the information on the uninstallation of your application, Google knows it.
All you have to do is connect to your Google Play Console and find on the statistics tab the number of uninstalls. You can also check on the dashboard the number of installs and uninstalls for the last week, month, or year.
iTunes Connect does not give you the exact number of uninstallation. But it can give you another information, which is "retention". Retention measures the usage of your app over time.
The debug tool allows you to see all the native and custom data Batch has on your most recent installs.
Let's take a look at how to target specific users with an audience.
Importing an audience allows you to target specific users to test an orchestration in real conditions, to test your dynamic content, or to simply target static segments exported from your userbase (e.g. top 500 buyers) or created by third-party tools.
There are two types of audiences: normal audiences or rich audiences. Let's take a look at both!
An allows you to upload a static list of users, which you can then target in your orchestration. To use an audience, follow the steps below.
The Yes/No Split feature allows for multi-branch automations.
You can easily alert users a few days before or after a specific date. This is handy to manage expiry alerts, reminders and more.
Batch allows you to automatically send a notification to users a few days before a specific date in the future.
This is useful to alert users when their voucher, subscription, loyalty points or credit card is about to expire. You can also use that kind of campaign to send travel reminders, appointments, and more:
Batch only collects essential information on every installation (e.g. country, language, last visit date, etc).
Make sure you are sending all the additional data you need to manage your use cases. You can send custom data to Batch by tagging your app or sending data from your servers using the
Create a user Segment and use it in your orchestration to avoid targeting mistakes!
You can create dynamic User Segments to use the same targeting rules in as many orchestrations as you want! Let's go through the steps together ✨
Go to the Data > Segments page, where you will find the list of your current segments, and click on New segment:
Write a title for your segment and add the targeting rules of your choice, then click on Save segment ✅
Discover how to include an unsubscribe link in templates built with Batch's email composer or your own HTML.
Adding an unsubscribe link to your e-mail marketing campaigns allows Batch to get instant opt-out feedback and to not retarget recipients who have chosen to unsubscribe.
Thus, it allows:
Not to generate dissatisfaction with the recipient who has chosen not to receive e-mail marketing anymore.
The Random Split feature allows for multi-branch automations.
With the Random Split feature, divide users into random groups to run tests, optimize your journey or set up a control group logic. Let's go through the steps together ✨
Find out how to build consistency in your email design.
Backgrounds applied to individual containers or strips help you to draw receivers' attention to specific elements. On the other hand, backgrounds applied to entire emails help make your design consistent and complete.
Each element of the structure of your email has its own background. It allows you to enlighten specific parts of your email.
This article provides solutions if your email template cannot be uploaded correctly on Batch.
The pre-header serves as a powerful tool to enhance the effectiveness of your email campaigns, learn how to add it to your email template!
Email marketing is a powerful tool for engaging with your audience, but optimizing your campaigns for maximum impact requires attention to detail!
One crucial element often overlooked is the pre-header, a valuable asset that can significantly improve the open rate of your email campaigns.
The pre-header is the snippet of text that follows the subject line in an email inbox:
By default, the first lines of an email are often displayed as a preview. However, these lines may not always provide valuable information to entice recipients to open the email.
Designing emails that remain clear and consistent in dark mode is an important step toward accessibility and a better subscriber experience. With Batch’s Email Composer, you can design emails that adapt perfectly to both light and dark themes. To ensure the best display, check out this article with all our recommendations.
Dark mode is no longer just a trend. Most email clients and devices now offer it, and more and more users prefer it for comfort and readability. But the way email clients handle dark mode varies a lot. Some leave colors intact, others partially invert them (for example, a blue may turn brown), and some invert the entire template. To complicate things further, even a single provider - like Gmail - may handle colors differently depending on the platform (web, iOS, Android).
That’s why optimizing your emails for dark mode is essential. It ensures your message remains accessible, your brand identity stays consistent, and your campaigns look professional across every inbox.
This article explains how to use universal links in your email templates.
Need help setting up your first push campaign with an image? Here is all the information you need to know (format, size, and more).
Learn everything you need to add text and links to your emails with our Email Composer!
Learn how to create email banners using our Email Composer.
Banners are the first element your reader will see at the opening of your email. They introduce your brand and set the tone of the e-mail, which is why it's so important to make them as impactful as possible.
To add a banner, simply drag and drop the Banner Block in the structure of a column, where you want it to be.
Click on that Block in the model, and select the Image you want to use:
Gmail and some other inbox providers can clip emails that are too long, here is how to troubleshoot your templates.
A clipped email is an email that is not fully displayed in your recipient's inbox. In Gmail, here is how a clipped email looks like.
Users may see "[Message clipped] View entire message" at the bottom of their email, with a link to view the full version. This happens when an email's size exceeds 102KB.
Several factors contribute to email size:
Learn how to locate a user profile within the Data tab of the Batch dashboard.
The Profiles view allows you to centralize all data related to a user in one place.
This section of the dashboard allows you to visualize all the data collected by Batch on your users, regardless of the platform, and to build unified customer profiles from all existing data sources (web SDKs, mobile SDKs, or our data ingestion APIs).
Go to Data > Find Profile on your Dashboard:
Adding an image to your push campaign has many great benefits. Here are the different advantages of doing so.
Images help you achieve better interaction with your users and enhance their experience. Adding images to your campaigns improves your audience's engagement in the long term.
Adding visual elements, such as images, positively affects your user's attention. With an image, your campaign stands out in the notification center, increasing your visibility and therefore your open rate.
Discover how to save a module for future use or in other campaigns.
Whether you have found the perfect structure or need to come back and work on it later, it's essential to save your progress.
First, select the structures made up of the content blocks you want to include in your module: text, image, button, video, etc.
Then, click on the 3 points at the right of the selected frame and click on the Save logo :
A new view will open on the left of your screen where you can add a name to your module and specific details such as a description and tags:

















Body: 120–140 characters; space included (prior iOS 15: 140-180)
At Batch, we advise a 15-30 character limit for your title and a 120–140 character limit for your body description.
If you create a long message of more than 140 characters, not all 140 characters will be shown to the user. It will depend on whether the notification is shown as an alert on the lock screen or when the phone is actively used.
We recommend keeping your title and body message short as possible. Focus on keywords and short content, to encourage the user to click.
iOS displays up to 180 characters, including spaces, spread over 4 lines for push notifications displayed on the lock screen. The text is displayed in full when the push is opened.
Android only displays one line of text from the lock screen. This means that only 50 characters are displayed, including spaces. The full message is displayed when the notification is opened..
We advise you to test your message on different devices (on iOS / on Android) and see how your message is displayed before sending it to your users.

All content adds to the total weight, including:
Text
Links
HTML code (including conditional display code)
Each character uses approximately 1-2KB.
Images can be attached to your emails in two different ways:
Enclosed images: Enclosed images are not stored in the template itself. Images are loaded remotely and only the path to the image is referenced in your email template (e.g. <img src="https://path/to/img.png" alt="img"/>). This is Batch's default behavior when you create a template from the email composer.
Embedded images: You may also embed an image encoded in Base64 within your HTML template (e.g. <img src="data:image/jpeg;base64,[base64code]" />). Use this approach for small images only, as it adds considerable weight to your template: each Base64 digit represents 6 bits of data. For example, a single 156KB JPEG image will add more than 200K characters to your HTML template.
Batch automatically includes two tracking pixels in your emails:
One at the top
One at the bottom
This dual-pixel approach ensures open tracking even if the email is clipped.
Move your unsubscribe link to the top of long emails to reduce spam complaints
Minimize email size by:
Reducing the number and length of links
Condensing text
Optimizing HTML code to use fewer characters






When an email is sent from your campaign, the ESP (Email Service Provider) replaces the original links with tracking links of its own, for example:
This link:
Is replaced by this one once the email is received:
By managing the redirection using a link of its own, the ESP can track the CTA / link opened actions.
Unfortunately, replacing the universal link causes the redirection not to work. Therefore, when using universal links, you need to disable the ESP link tracking, which means you will not be able to track clicks on these links in your Batch campaign stats.
As an alternative, you can rely on the classic Analytics tracking you probably already add to your links (e.g. ?utm=, etc) and track clicks in your dedicated Analytics tool.
In order not to break redirection on universal links, you can disable the ESP’s link tracking by adding the data-msys-clicktrack="0" argument to your link HTML tag as follows:
<a href="https://myapp.example.com/albums?albumname=vacation&index=1"> OPEN LINK </a><a href="http://post.eu.spmailtechnol.com/f/a/UtKgWMX8Z_6C6As1- frJKg~~/AABGZAA~/RgRlbNn6P0TTaHR0cHM6Ly9vLmxhbGFsYWIuY29tL3UvbnJkLnBocD9wP Utoa3g4enRhVERfMl8yNDIwNTkxXzFfMyZlbXNfbD00MTE5NzQ1Jmk9MSZkPU1UWTROamc0TlR"> OPEN LINK </a><a data-msys-clicktrack="0" href="[URL]">My link</a>Make sure a Custom User ID is correctly attached to your installation.
Test your integration each time you track a new attribute or event with the SDK.
See if the data you sent using the Custom Data API is attached to your installation.
First, go to Settings > Debug.
You can use the debug tool to find your most recent install, based on:
An Installation ID, which is an anonymous ID generated by Batch.
The debug tool shows all the native and custom data we have on your most recent installs:
Custom User ID: This field shouldn't be empty if you are sending it to Batch and are logged into the app. Make sure that ID disappears after your log out.
Attributes/events: Your attributes and events will appear in the right panel of the debug tool. Make sure important attributes are sent to Batch in the right format (e.g. date, string, boolean, etc) and at the right moment (e.g. on the first start of the app and/or when a value changes etc). Events will appear as soon as you perform the tracked action in the app.
Last location: In case you share with Batch the most recent location of your user, you should see a latitude/longitude in the right panel of the debug tool.
To create a new audience, go to Data > Audiences and click on Add audience:
Upload a .txt, or .csv file, with one Custom ID per line only:
Once the audience is uploaded, create your orchestration and use the audience in your targeting.
You can also upload your audience to the dashboard through the Audience API.
A rich audience is a static list of users, which you can associate to one or several attributes. You can then call these attributes in your orchestration for personalization purposes.
The rich audience file should only contain the Custom User IDs and the associated attributes, each in one column.
For rich audiences uploaded manually on the dashboard, only 1 associated attribute is allowed in the file, and its format should be STRING.
For rich audiences uploaded through our Audience API, several attributes with different formats can be included.
To personalize your orchestration with the values in your rich audience, first add the audience to the targeting.
In the title/body of your message, use the following code to call the attributes:
For rich audiences uploaded manually on the dashboard:
{{audienceAttribute('audience name', 'att1')}}
The att1 value should be added as such in the code and should not be changed.
For rich audiences uploaded through the Audience API:
{{audienceAttribute(<audience name>, <attribute name> ) }}
Click on the split you created, give it a title, and select the targeting rules of your choice.
The Yes/No Split will leverage all Profiles data to split the workflow into 2 branches:
Yes, people match the rules;
No, they don’t.
In your targeting rules, you can also use , or .
💡 Be aware that entry event information cannot be used as split targeting rules.
In addition to the profile targeting block, you can filter on trigger event attributes directly within the Yes/No split.
It allows you to specify conditions on the attributes of the exact event occurrence that initiated the user's journey in the Trigger Automation:
Currently, complex attributes like arrays and objects are not supported for filtering in the trigger event query block.
You are now ready to create your own journey using the Yes/No Split feature 🚀
You will find the list of the custom data received by Batch in Data > Profile data:
Create a recurring automation, click Add conditions to select the attribute you will use to target the right users.
You can either use:
time in the future to warn/remind users about a specific date coming up
time in the past to remind users about a specific date in the past
time in the past occurred 0 days ago to alert users on the D-day
You can add a retargeting condition for users who already opened the first alert but didn't renew their subscription or for users who haven't opened it yet to remind them to make a specific action. You can even include an exclusive discount and therefore prevent churn.
Ensure you set the Frequency to 1 per day 👇
You won't need to set a capping for this type of automation, as this is important information and users should not trigger it often.
Write your message by adding a title, a description and emojis.
You can even personalize your notification based on the same custom data you are sending to Batch (e.g the first name, the number of loyalty points/miles/jackpot left). This will add more context to your message.

💡 Tip: do not choose the same name for multiple segments to avoid any mistakes when selecting it.
Once your segment is created, you can use it in any type of campaign or orchestration. Click on the Use segment button to select your segment. You can add up to 10 segments.
Your automation is now almost ready to be sent!
Use the page Data > Segments to manage your user segments. Create, delete, update and export them from the same page! Check the Estimated profiles of each segment and the number of orchestrations using it in real-time:
💡 Note that any modifications made to a segment from there will apply directly to the orchestrations using it. Also, you cannot delete a segment used in a running orchestration:
Download the list of profiles that match the conditions of your segment by clicking on the Export profile button next to your segment:
Once your export is processed, you will promptly receive an email containing the download link for your file!
The file will contain the following information:
Custom ID
Profile ID
Phone number (if available)
Email address (if available)
Learn more about the Segment feature on the Profile documentation.

Not to damage the sending reputation.
Unsubscribe links are mandatory in marketing campaigns but should not be included in transactional campaigns.
Here is an example of an unsubscribe link:
Here is how you can simply add an unsubscribe link for an email template in a single language:
If the email template already contains personalization conditions to change the language of certain text blocks, the same should be done for the unsubscribe link:
You can also insert an unsubscribe link easily when using the email composer to create your email templates.
To do so:
Select the text
Add a hyperlink to the text area
Select the Unsubscribe option listed in the Link field on the left side panel.
Please note that {{emailComposerUnsubscribeLink()}} is only compatible with the drag and drop email composer, and should not be used for HTML email creation.
Once recipients click on the "unsubscribe" link:
Batch removes the recipients from the marketing mailing list
Recipients are redirected to a personalized landing page hosted on your side
Batch unsubscribe confirmation landing page is localized in FR/DE/ES/EN/IT: when inserting the unsubscribe variable, the landing page will be translated in the end user's browser language.
If you do not have one yet, you can use our default landing page:
🇮🇹 Italian:
Create from 2 to 4 branches and adjust the percentage of users for each of them. Just keep in mind that the sum of branches must always be 100%.
The algorithm for randomization is efficient for high volumes but less so for very low volumes. If 30 people receive the automation and the automation has 3 branches (33%, 33%, 34%), you might not have exactly 10 people by branch.
🔍 With this feature, automations can get a lot bigger: to get a better overview, use the mini-map at the bottom-left corner of your screen to navigate and zoom in and out in the automation:
You are now ready to create your own journey using the Random Split feature 🚀
To add the color background, click on the element of the structure in your email, and on the options panel on the left you'll find the Background color of content field. Choose a color among the proposition or type the color code of your choice:
First, note that the background image will be visible on desktop, but not on mobile devices.
To add a background image, go to the Appearance tab and find the Background image button in the General Settings part:
There, add your image by dropping one or with an external link. Check our documentation if you need help handling the image and editing it.
Once the chosen image is here, you can set it up! Define its position and click the "Repeat image" button if you want your image to be applied to the whole email, no matter how long it is:
Note that some email providers, such as Outlook, may not display the background image. We recommend that you also define a background color, similar to the background image.
If you receive the error labelled No index.htm(l) or mail.html file found, you should rename the HTML file to index.html (or mail.html). If the file is not named correctly, the import will fail.
Here is how to resolve this issue:
Unzip the ZIP file that contains the HTML email
Find the target HTML file
Rename the target HTML file to index.html (or mail.html)
Zip up the file
Upload the file
To import templates on the Dashboard, Batch needs the ZIP file to contain exactly one index.html (or mail.html) file and one "images" folder.
During the compression, some tools can put the index.html (or mail.html) file and the images folder in the same folder, which impacts the import of the images.
Make sure that they are no additional folders. Here is how it goes on Mac OS:
When creating ZIP files, the images must be in the sub-folder of your ZIP file. If the “images” file is not named correctly, they will not be displayed in your template.
Here is how to resolve this issue:
When creating ZIP files, the images must be in the sub-folder of your ZIP file.
Unzip the .ZIP file that contains the HTML email.
Rename the image file to images (it doesn't work without the "s")
Zip up the files
Upload the file
In the HTML code of the template, each image should be referred to by its name and sub-folder. If the images mentioned in the HTML code do not have the same name as those in the "images" file, Batch will not link them and they will not be displayed in your email template.
In case you still have problems uploading your ZIP file, feel free to contact our support teams directly on the Live Chat! 💬
Generic greetings such as 'Dear customer, we are pleased to...' might not be compelling and a well-crafted pre-header can make a substantial difference 💪
To take control of your email pre-headers, you can effortlessly add a pre-header directly within your template.
To do so:
Edit the HTML file of your template directly on the Batch Dashboard by clicking on Edit email:
Add a hidden div to the top of the body of the email with the following code:
By incorporating this step, you can customize your pre-header text, providing a concise and compelling summary that encourages recipients to open and engage with your emails.

Dark mode is here to stay. By applying these practices directly in the Email Composer, you’ll make sure your campaigns remain readable, accessible, and visually consistent, no matter how or where they’re opened.
Size: Width must be at least 300px, height at least 200px. Avoid using images wider than 2000 pixels. Also, make sure that your image is not bigger than 1MB.
Aspect ratio: Use images in landscape format respecting a 2:1 ratio (e.g. 1000x500px).
Composition: Important information or the product you want to show should be in the middle of the image or as far as possible from the borders of the image.
🚧 There is no one-size-fits-all solution. The image you attached to your notification may be displayed differently based on:
Your users' OS. iOS, Android, Mac OS and Windows manage notification images differently. Your image may be displayed correctly on iOS and cropped on Android for example.
Your users' screen size.
Your users' browser (for web push notifications only).
Ensure the text is in the middle of the image or as far as possible from the image borders:
Last but not least, focus on the text of your notification and avoid including too many details in your image. Users will read the text of the notification before seeing the image.
Batch allows you to use a portrait image in your push campaigns, though we do not recommend it as both iOS and Android will display the image in full width, cropping the top and the bottom of your image.
You can click the "Send a test" button in the campaign editor to see how your message looks on your device (more information here: iOS / Android / Web Browser).
On iOS and Android, the image attachment is displayed as a square thumbnail when the notification is collapsed. Your image will be cropped on the right and left-hand sides.
IOS: with a force touch or by sliding the notification and clicking the "Display" button. iOS will display the image at full width.
Android: by swiping down the notification.
Users can receive web push notifications on desktop and mobile if they turned on push notifications from a compatible browser (e.g. Google Chrome, Mozilla Firefox, Microsoft Edge or any other Chromium-based browser).
On Android, web push notifications look like any other mobile notifications.
On desktop, the aspect of the notifications may change depending on your users' browser and OS:
Windows: Images will be displayed exclusively for Chrome. This also applies to any Chromium-based browser (e.g. Microsoft Edge, etc). Firefox uses a custom format to display push notifications. That format doesn't support images yet.
MacOS: Recent versions of Chrome, Firefox and Microsoft Edge use MacOS' native notification format, which doesn't support images yet.
You can easily preview your message on different OS' and browsers from the campaign editor to make sure it will be displayed correctly:

From the Content tab and Blocks, you will be able to drag the Text feature to the layout and drop it on your email:
Once you create the block:
Click on it and start to add your text.
Set up your text parameters on the settings panel on the left.
Use all the properties displayed on the top of the composer to edit your text.
You can choose the font, style and size. You can also add emoticons, bullet points, etc 🎨
If the image doesn't appear, you can choose to add an alternate text.
You can add this text directly in the Email composer, by clicking on the image:
Once you added your text:
Click to edit.
Highlight the text you want to make clickable.
Click the chain link.
Choose the type of link you want to add.
Paste your URL into the box.
You're done!
Learn how to handle link tracking in emails on our dedicated article.
Do not forget that every link has a purpose:
Call to actions: try to place them towards the top of your email and add a little space between them so they can stand out. To make them even more visible, you can even replace them with buttons.
More Information: complete your existing text by including links for further details. Select relevant keywords and phrases within your text and hyperlink them to provide definitions or more information.
The use of URL shorteners is not recommended. Inboxes can interpret it as an attempt to hide the content of your url and see you as a spam.
Upload an image from your computer
You can then drag and drop the image you want to use for your campaign or upload it from your computer by clicking the arrow and selecting the image of your choice on your files.
Use an external link
You can use an image URL link that you host on your end. In the External link field, copy the link to your image.
Once your image is selected, you can apply different effects to it. Indeed, you can:
Choose the orientation (vertical, square, horizontal)
Adjust the height of the picture
Apply different filters to your visual
You can also add content to your banner, such as a deeplink, an anchor link or an alternate text.
Anchor link: web page element that links to another location on the same page. They are typically used for long or text-heavy pages so that visitors can jump to a specific part of the page without having to scroll as much.
Alternate text: also called "Alt text", is a textual description for non-text content that explains the presence or function of an image on a webpage.
Then, if you want to place text on the banner image, click on the "T" button in the toolbar at the top of the template. Draw your text zone, and then replace the caption with yours. You can set the font size, color, and type:
Finally, you can add images to your banner and place them where they suit you:
You can perform all the editing steps in the order of your choice! ✨

By uploading a .CSV or .TXT file to Batch from the dashboard Profiles → Audiences tab.
Via the Audience Importer. The importer automatically imports audiences from your data stores via (S)FTPs (Audience Importer setup is upon request. Reach support or your CSM to know more).
An audience can only contain a list of Custom IDs.
The dashboard will automatically display the number of IDs that match your audience:
In your campaign/automation creation form, in the Segmentation part, click on Use audience:
Choose the audience you want to exclude in the dropdown menu:
Select "contains none of", so that the segmentation now excludes the audience you picked:
You can exclude as many audiences as you want:
You can now exclude audiences from your campaigns targeting! ✨
A user profile can be found through an Email address, a Custom ID or an Installation ID.
The Email address allows you to send targeted and relevant communications to your customers.
Batch supports importing your known email subscribers in two ways:
As the Custom ID is a native field you can use to attach a unique user ID to one or several devices.
If you have Batch’s web or mobile SDK deployed, it is assigned to your users when they are connected to their customer account.
The Installation ID is an anonymous ID generated by Batch the first time users open your app or your website, whether they opt-in for push notifications or not. That ID changes each time users reinstall your app.
Once you get your Custom ID or Installation ID, you can use it to find the user's profile.
In the upper section, you'll have a profile overview, with information such as the user's location, his opt-in status on all channels, as well as the platforms he is on:
In the lower section, you'll get information on the user's attributes, and the different events he triggered:

When an action is required by your users, you can emphasize that by adding an image containing a word, an action, or a question that will guide your users in doing what is needed.
Add valuable information to your message, such as the product category related to the offer, the article being discussed, or new content that is finally available.
Images help users visualize the presented content, enhancing their understanding and improving the overall user experience.
Selecting the right image style — whether it is grainy or crisp, colorful or monochrome, illustrations or photos — enhances your branding and sets you apart from competitors. When people can easily recognize your brand, it ensures they remember you, signifying a lasting impact on them.

In the Folder field, there are two ways of saving your module:
Email: the module will be only available on the campaign you are working on.
Project: the module will be found for all the campaigns you create.
Once your modules are saved, you can find all of them in the Content > Module part on the right. Choose the one you want and drag it to its place on your new email:








Everything you need to know to disable web push notifications on Google Chrome, Mozilla Firefox, Microsoft Edge, and more.
Here is a simple step-by-step guide on how to disable push notifications for a specific website on Google Chrome, Mozilla Firefox, Microsoft Edge, Safari, and Samsung Internet browsers.
Go to the website:
Click on the padlock icon 🔒 on the left side of the search bar
Set the push preference to Block.
Go to the website:
Click on the padlock icon 🔒 on the left side of the search bar
Tap Site settings
Tap Notifications
Turn off push notifications. You can also disable alerts if you are using a recent version of Android.
Go to the website:
Click on the padlock icon 🔒 on the left side of the search bar
Delete the permission.
Got to the website:
Click on the padlock icon 🔒 on the left side of the search bar
Tap Edit Site settings
Toggle Notifications, then tap Clear.
Go to the website:
Click on the padlock icon 🔒 on the left side of the search bar
Delete the permission.
Go onto the website:
Click on the padlock icon 🔒 on the left side of the search bar
Tap Site settings
Tap Notifications
Turn off push notifications. You can also disable alerts if you are using a recent version of Android.
Open Safari on your Mac:
From the Safari tab, click on Preferences
Head to the Websites tab
Click on the Notifications button on the left menu.
Set the permission to Deny for the website.
Here are the steps you need to take to disable push notifications for a specific website in Samsung Internet Browser:
Go to Settings
Tap Notifications
Tap the three dots on the top-right corner and click on Allow or block sites
Disable push notifications for one, several or all websites.
This guide does not include instructions for all browsers available on the market, but most Chromium-based browsers work in the same way.
You can use the Chrome guide to disable push notifications on Opera, Vivaldi, and more.
Batch provides a highly flexible way of tracking clicks on links. Here are the three available options for this feature.
Batch provides a highly adaptable method for individually monitoring the clicks on links, and displays detailed statistics for each email campaign or automation sent.
These allow you to track generic indicators (e.g. click-through rate), but also to see the number of clicks on each of the links in your e-mails, so you can understand which part of your message converts best and optimize your content (e.g. clicks concentrated on the unsubscribe link or the buy button).
On the Dashboard, you can see both the generic clicks indicator and the list of links for each of your email campaign/automation analytics👇
Batch offers 3 different ways to track clicks, depending on your use case:
Track clicks separately, per URL.
Group clicks on similar links under a "link name".
Disable the click tracking for one or several URLs.
These 3 options are here to cater to different scenarios and needs, giving you the flexibility you require to accurately understand and interpret your data.
By default, Batch will track clicks on all of the URLs of your email. The raw clicked URL will be displayed in the campaigns analytics 👇
While easy to use, this method is not suited for personalized links that contain personal/sensitive data, or e-mails that contain links unique for each user (e.g. a single-use promocode, a password reset token, etc). These URLs would be exposed in the campaign analytics.
Allows you to group the click tracking behind a "link name" defined on your end while editing the email template (e.g. "social_networks" for your social network links in the footer of your email) 👇
It is suitable for personalized links to avoid having too many raw personalized links in the stats or links that don't have enough value to be tracked individually.
Here are several cases where using a link name tracking is useful:
Privacy & Double opt-in automations: Attaching a link name to URLs in your email (e.g. validation_url) is the best solution if you don't want to expose raw personalized URL in the campaigns analytics, but still want to track clicks on these links.
Deduplication of URLs with personalization: A single link with a personalization variable that changes for each user (e.g. ) will result in hundreds/thousands of different links tracked for the same URL in the template. Using a link name “redeem_link” to track all of the clicks on that link in the template is a better option.
Grouping of similar links
To attach a link name to a URL in your email, simply add a data-msys-linkname="NAME" parameter to the <a> html tag of the link:
Replace NAME with the link name you want to use. Link names have a maximum length of 63 characters and are truncated if they exceed the limit.
Allows you to disable link tracking completely if you want to avoid showing links with personal/sensitive data (e.g. a password reset token, etc) in Batch analytics, or if your links are unique for each users and you don't want to have thousands different entries in the analytics or for any technical reasons (e.g. universal link support).
Lastly, you may need to disable click tracking on a specific link, and this option is suitable for cases where no click is to be tracked.
It applies to these two cases mainly:
Privacy & confidential links
Universal links
To implement this, you only need to add a data-msys-clicktrack="0" parameter to the <a> html tag of the link:
Link tracking cannot be disabled for a whole template, the option is only available at each level.
Your complete guide to using images in the Email Composer.
Images are essential in your email marketing strategy. They represent your brand and products, and one of the first things that catch the eyes when opening an email. We will see how to manage them to create your email.
Once you have finished the structure of your email, you can add Blocks to define the content of each part of your email.
From the Content tab and Blocks, you will be able to choose Image or Banner and place it on your email:
Now, you will be able to attach the image to the Block. First, click on the Image block to open the settings panel on the left:
There are 2 ways to add your image:
Upload an image from your computer
You can then drag and drop the image you want to use for your campaign or upload it from your computer by clicking the arrow and selecting the image of your choice on your files.
Use an external link
You can use an image from the web using an URL link. In the External link field, copy the link to your image.
If you want to use this image for other campaigns, select the Download to the gallery option. Otherwise, choose Leave as external Link.
Now that your images are in place, you can edit them to make them perfect for your email!
Select your image and, on the settings panel, click on Edit image 🪄:
In a new pop-up window, your image will be opened with the Pixie editor where you can do whatever you want!
It is possible to:
Apply filters
Resize and crop images
Draw
Place text
Once you've finished editing, do not forget to click on Save in the editor window to apply the changes to your image! ✨
This article shows how to correctly upload HTML email templates on the Dashboard from a ZIP file.
If you want to use your own email templates, you can directly import them on your Batch dashboard.
Before you upload your file, you need to create your own HTML email template. Whether you create your templates yourself or use an e-mail builder, your file must be a single compressed ZIP file containing:
A single HTML file saved as "index.htm(l)" or "mail.html" (with a maximum size of 512kb)
A single image folder containing all the images of your e-mail template saved as "images"
💡 Depending on your operating system, compress the file selecting both elements ("index.html file" (or mail.html) + "images" folder")
For example, here is how it goes on macOS:
If you want the images to be hosted by Batch, you need to put them in the image folder and replace the URLs in the HTML (with a code editor for example) before uploading the ZIP file on the Dashboard.
On your Batch Dashboard, go to Campaigns > New campaign > Email message, name it to start a new campaign, choose the targeting and timing, and go to the Message section:
You can choose between 'Design your message with the Email Composer', 'Upload your ready-to-use HTML template', or 'Open the code editor </>'. We'll focus on the last two!
Don't hesitate to use the Dashboard's preview mode and send yourself test emails to check that your emails are displayed correctly regardless of the device.
All the information you need for adding videos to your emails in our Email composer.
Once you have finished the structure of your email, you can add Blocks to define the content of each part of your email. From the Blocks part of the Content tab, you will be able to choose Video and place it on your email:
You can choose between 2 ways to include videos in your emails.
It is the safest way to broadcast videos because it works perfectly with all email clients and on all devices.
Click on the Video block to open the settings panel on the left side of the screen and there, paste the link to your video. Our system will automatically fill in the Alternate text field but you can change it as you want:
You can now custom some parts such as:
The color of the Play button
The image of the thumbnails (the preview image of the video) through the Custom thumbnails button.
The alignment and the size of the preview
The embedded video is played directly in e-mails. Recipients don't have to access another website to view it.
Embedded videos are only supported by Apple Mail (native iOS messaging), Thunderbird, and Outlook for Mac.
You need to change the Video block to the HTML one to custom the code of the video:
Once the HTML block is in place, click on Insert your HTML in the Code editor to open the code editor screen:
Here, you can use the following piece of code and customize it as you please:
That's it! You now know everything about video in our Email Composer ✨
To interpret opt-outs and app uninstalls correctly, you need to understand how they're calculated.
Timing your push notifications wisely can drive more traffic and boost engagement.
The key to communicating effectively with your users is to deliver the right content to the right audience at the right time.
When is the right time? Here are some hints:
Our clients have been sending push thanks to Batch for years now. We analyzed their habits and discovered that they mainly send push notifications at three specific moments of the day:
You can add a test device and target it from the dashboard to ensure your notification is displayed correctly.
Batch allows you to find information on your installation and test your integration or make sure the notification you are editing works as expected on a real device (deeplink, image, mobile landing, etc).
The easiest way is to use either your Installation ID (/) if it is displayed in your app, your Custom ID (/) if it is sent to Batch, or the email address linked to the profile if there is one. Once you retrieve your ID, go to point 2.
💡 From version 1.18 of our SDK, you can find your Installation using the "Find my Install" feature.
Read this guide to understand why the number of Profiles estimated for your audience is different than the number of targeted IDs.
Audiences allow you to import a list of user IDs to your Batch dashboard. These audiences can be used later to improve the segmentation of your push, email or SMS.
In Data > Audiences, Batch displays an estimate of the number of profiles matching the IDs contained in each audience:
In some cases, you may notice a gap between the number of profiles and IDs contained in the audience. Read through the following scenarios to understand why the number of tokens doesn't match the number of IDs contained in your audience.
Discover how to embed social media links using our Email Composer.
Social media are an essential part of your marketing strategy and it's natural to add a link to these accounts in your email. Usually in the footer of the email, next to the unsubscribe link, we'll see how to add these icons.
Once you have finished the structure of your email, you can add Blocks to define the content of each part of your email.
From the Content tab and Blocks, you will be able to choose Social and place it on your email:
Depending on your users' browser and OS, the way web push notifications are displayed may change.
Each browser has its own set of standards when it comes to the number of characters allowed in their web push notifications.
We advise you to follow these ground rules to be as comprehensible as possible:
Title: 15-40 characters max (space included)
Body: 140–180 characters max (space included)
As a general standard, you should try to keep your title and your body message as short as possible. Your title must be impactful to attract users. Moreover, we advise you to test your message on different devices and see how your message is displayed before sending it to your users. You can see how to send yourself a web push test by following
Notification badges are handy to let your users know they have an unread push notification.
On Android (8.0 and higher), notification badges (or "notification dots") are automatically displayed on your app icon when users have unread push notifications. Users can long-press on the app icon to see the list of unread notifications.
Android's notification badges are simple colored dots. This doesn't allow users to know how many unread push notifications they have for a specific app.
If you are wondering how to optimise your app traffic using push notifications, you are in the right place!
Open rate is the main KPI to know if your campaign successfully engaged your users.
There are several keys to creating a campaign that your users will open. The targeting, the timing, and the content need to be customized to fit your audience. Usually, users prefer rich push (e.g., with an image attached) and like the wording to be short and illustrated with emojis.
Find some tips here to make sure your open rates always get better!
Batch offers you different targeting options to target your users using native or custom data:
<a data-msys-unsubscribe="1" data-msys-linkname="batch::unsub" href="[LANDING PAGE LINK]">Unsubscribe</a><a data-msys-unsubscribe="1" data-msys-linkname="batch::unsub" {% if b.language == 'fr' %}href="https://static.batch.com/list-management/landing.fr.html"> Se désinscrire {% else %} href="https://static.batch.com/list-management/landing.html"> Unsubscribe {% end %}</a><div style="display: none; max-height: 0px; overflow: hidden;"> YOUR PREHEADER TEXT </div>







Add frames
Apply backgrounds
...and so much more!





















































All the resources needed to understand email delivery and optimize deliverability
Tracking the same link separately:
Why? If you have the same URL several times in your email, Batch will attribute all of the clicks to a single URL in the campaign analytics. While this is great to have a synthetic view on which URLs were clicked, this can be an issue if you want to know from where the clicks are coming from (e.g. from the URL in the header, or from the same URL in the body of the email).
How? Use a different link name for the same URL, according to where the URL is placed (e.g. mylink_body) and use a different one for the same link, placed in the footer (e.g. mylink_footer). In the campaign analytics, you will be able to measure the distribution of clicks on that specific link, based on where it is placed in the email.






<a data-msys-linkname="NAME" href="[URL]">My link</a><a data-msys-clicktrack="0" href="[URL]">My link</a><video class="adapt-img" controls="controls" poster="https://tlr.stripocdn.e-mail/content/guids/CABINET_0bd21bea47f1cfb916fb84d59a107495/images/92621531318217276.jpg" width="100%" height="313">
<source src="http://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4">
<source src="http://www.w3schools.com/html/mov_bbb.webm" type="video/webm">
<!-- fallback -->
<a href="https://www.youtube.com/watch?v=ryqOEPk51Lg/" class="esd-frame-element esd-hover-element esdev-disable-select"><img class="adapt-img" src="https://tlr.stripocdn.e-mail/content/guids/CABINET_0bd21bea47f1cfb916fb84d59a107495/images/48461531318273724.jpg" alt="" width="100%" height="313"></a>
</video>Show more
If you choose to directly add your file, click on 'Upload your ready-to-use HTML template' and select your file.
It will be added and the preview of your template will appear:
If this one does not suit you, you can click on Delete and upload a new one or if you want to make some changes, you can edit it by clicking directly on Edit Email.
If you choose to add your template via the HTML code retrieved from your e-mail builder, click on 'Open the code editor </>' and add the code:
Once all the content of your email is adjusted, click on Continue:
Your email is now ready to be sent! ✨
Before launching your email, don't forget to test it by using the Send test feature.


You can track your opt-out users in the Analytics → Reach tab:
Batch can only have information about what's going on in the app. When a user installs and opens the app, we receive a push token from Apple/Google that allows us to communicate with them:
If the user opt-outs from notifications in the device settings, no information is provided to Batch servers. The actual opt-in status will be updated only when the user opens the app again. Likewise, we do not know in real time when an opt-out user activates push notifications again.
Therefore the Batch database is potentially always "out of synchronization" with reality regarding the opt-in status.
Batch always targets all opt-in and opt-out tokens: it allows us to update the state of the tokens, clean the database and recover the users who would have reactivated the notifications. The notification will never be displayed to an actual opt-out user, it will be blocked by the device.
There are two pages where you can track your app uninstalls:
In this example, we report that 509 users, who were targeted by the push, did not receive it because they uninstalled the application. Uninstalls concern both opt-in and opt-out users, as long as they were targeted by the campaign.
Unlike opt-outs, we receive by return loop the uninstalls that took place between the sending of the last campaign and the campaign of the day. This loop occurs only once a campaign has been sent. That's why you will see uninstalls only on days when a push has effectively been sent.
Early morning, from 7 AM to 9 AM
Mid-day, during the lunch break from 12 PM to 2 PM
Early evening, from 6:30 PM to 8:30 PM
Knowing that, do not hesitate to send your push notifications a little earlier than most other apps. For instance, you can schedule your push notification at 11:55 AM to make sure your users receive it before they receive alerts from other apps at noon sharp. Or you can also decide to send your notification at 12:02 AM instead of noon sharp ti stay on top of the notification pile.
There are two main ways to schedule orchestrations in Batch:
You can pick between two options when scheduling a simple or recurring push campaign:
Profile's local time: This option lets you send a push notification that will be received based on the user's timezone, at the same hour in every country. This ensures that marketing efforts target your users at a uniform time.
Universal time (UTC): This option allows you to send a push notification to your users at a specific UTC regardless of their location. Every user will receive the message at the same time.
You can try out different sending times in our Automation Builder thanks to the Random split feature:
Click the "+" sign to add a random split and up to 4 variants (you can choose the ratio between them).
Select your preferred delay for each option by clicking the "+" sign and adding a Delay. You can set it for a specific duration or wait for a certain time.
You can check the result of each variant in the Analytics tab of your automation:
Go to Analytics > Push > More > iOS / Android / Web and set the dates for 3 days maximum. This way, you will be able to see the analytics, hour by hour. The "Starts" chart (blue) shows when your app is most opened by your users (in UTC):
Check your app's peak hours—these are the times when users naturally engage the most. This indicates they are available and more likely to open your notifications during that period.
If you notice more influenced opens than direct opens, it may indicate that your push campaign was sent too early. Instead of opening the notification immediately, users opened your app within three hours after receiving it.
To check the ratio of direct to influenced opens, visit the campaign's analytics section:
If you are not seeing any direct opens in your campaigns, we recommend checking out our guide on why your direct opens may be stuck at 0 — it could be due to an integration issue.
General timing strategies are useful, but always adapt them to your audience and the type of content you're sending.
Media apps: Perform best with early weekday morning pushes.
Fashion, lifestyle, and entertainment apps: See higher engagement in the late afternoon or on weekends.
Here is how to find your Installation ID:
On the dashboard, go to Data > Find Profile, and paste your ID (with the correct ID type selected):
In the Platforms section, find your device and click on Inspect 👇
Then click on Inspect in app debug:
You can send a test notification from 3 different places:
In case you just need to test your integration, you can use the Send test push button, and Batch will send a generic message with an image to your device:
You can see the list of all of the registered test deices from Settings > Push Settings. This is helpful to check if the token of your saved devices is still valid, and delete them if it's not the case:
You can send test notifications to your device to see how your campaign looks from the campaign editor.
Click on Send a Test and add your Installation ID or Custom ID in the corresponding field, then hit Send test.
Click ⚙️ to select your device in the saved devices, or copy your Installation ID in the corresponding field. Hit Send a test.
This may happen due to:
Formatting issues: The IDs included in your audience are not formatted correctly (e.g. extra space, lower/upper case issue, extra semicolon, etc).
The wrong type of IDs: The type of IDs included in your audience doesn't match the unique user IDs sent to Batch by the app as custom user IDs.
Opt-out installs: None of your targeted IDs matches an opt-in install.
Wrong "Audience type": Make sure you have selected the correct "audience type" when you uploaded your audience (e.g. Custom User ID, Installation ID).
You can prevent these issues by using the preview displayed by Batch dashboard when you upload your audience to double-check what will be imported:
Also, please note that the estimate has been designed for high volumes of profiles. As a consequence, it is not precise for small amounts of IDs. Even if the estimate shows 0 Profiles, your campaign may actually target less than 10 users.
This may happen because:
Users may not have the app: Some of the users you targeted in the audience may not have installed the app or may have uninstalled the app.
Users may not have turned on notifications: The IDs included in your audience may match users who did not turn on push notifications and, as a consequence, don't have a token.
ID not collected: Some of the custom user IDs you targeted in your audience may match users who logged out from the app. As a consequence, Batch cannot find any installs attached to specific user IDs. If your audience contains advertising IDs, Batch may not be able to collect the advertising ID of your users (e.g. limited ad tracking turned on or app limitation).
This may happen in the following cases:
Multiple installs: If your audience targets Custom User IDs, Batch may have more than one opt-in install per ID. This usually happens when users install the app on different devices and log into the same user account in the app.
Outdated tokens for reinstalls: Batch may keep temporarily several tokens for users who reinstall the app, though some of them may be invalid. This happens because Batch gets feedback on the validity of the tokens in an asynchronous way, every time you target all your user base with a push campaign. So the user's profile still get a push token.

By clicking the new social block, the editing window opens on the left side of your screen:
You can add more social media or choose different ones by clicking on the ➕ icon:
Then select through several options the look of the social media icons and the size of it.
There, you have two choices:
Generic icons
A long list of designs with known icons is ready to be used! Once you have chosen the right one, you can then set up the link to your social media accounts:
Custom icons
You may want to personalize these icons in order, for example, to add the icon of your brand and the link to your website. Choose the Custom icons line in the list:
Or add a new Custom icon:
You'll be able to add and edit your own icon image and a link to any website! Check our documentation if you need help in editing your image.
Once your icons are in the right order, it's time to edit it!
Activate the More button to see all the settings. There, insert the appropriate URL links; enter the title and the alternative text:
And finally, the general setting of the block such as alignment, padding, and spacing:
The link to your social media account is generally in the footer of your email, next to the unsubscribe link and contact details. See how to add an unsubscribe link for more details.
When the footer of your email is done, don't forget to save it! So you can use it as a module when creating your future emails ✨ Find more information on how to save a module.

Here is a breakdown of every browser's character limit per OS:
Google Chrome, Microsoft Edge, Opera and other Chromium-based browsers use the same Windows 10 native format for notifications. Notifications not opened yet will be placed in the notification center.
Title: Up to 70 characters (space included), split into two lines of text.
Body: Up to 140 characters (space included), split into four lines of text.
Image: Displayed as a landscape image both when the notification is received and stored in the notification center.
Firefox uses a non-native format on Windows. As a result, the content is displayed differently, and notifications are not stored in the notification center.
Title: Up to 50 characters (space included), on one line of text.
Body: Up to 200 characters (space included), split into four lines of text.
Image: Firefox doesn't display images in notifications.
Firefox, Chrome, and other Chromium-based browsers use MacOS' native notification format. Unread notifications are stored in the notification centre.
Title: Up to 35 characters (space included), on one line of text.
Body: Up to 40 characters (space included), on one line of text. MacOS displays two lines of text for each notification in the notifications centre (75 characters).
Image: MacOS doesn't display images in notifications.
Notifications use Android's native format, used by apps too. New notifications will be displayed on the locked screen of the device and in the notification centre.
Title: Up to 40 characters (space included), on one line of text.
Body: Android will display one line of text when notifications are collapsed (around 50 characters). The message will be entirely displayed once unfolded.
Image: Displayed as a landscape image. Users need to expand the notification to see the image. Please note that Android will only display one line of text in the body of your notification if you include an image.
Some device manufacturers may add an unread notifications count to their custom Android interfaces (e.g. Samsung, Xiaomi, etc). When this is the case, the system will increment or decrease the value displayed on each app icon automatically.
Batch allows you to display a badge in the top right corner of your iOS app icon when your users receive a new notification. Here is how it looks:
Badge counts are especially useful to show your users that new content is available in your app. This is a simple way to re-engage users and create more visits in a non-intrusive way.
You can add a badge to your notifications on iOS:
From the Dashboard
Via the Transactional or Campaigns API.
You set a badge count (e.g. 99) by copying/pasting the following code in Advanced settings > Payload:
This can be easily achieved by adding the same code to the custom_payload field. Here is how it looks for a new campaign:
Find more information on how to use our API in the dedicated documentation.
iOS allows you to set a specific value for the badge count (e.g. 0, 3, 99) but doesn’t provide any mechanics to automatically increment or decrement the value displayed on your app icon when a notification is received.
You could handle that issue by saving remotely the most recent value of the badge for each install, and resetting it once the app is opened. We usually recommend against it as the badge may be reset while the device is offline.

4 options are available on Batch: Now, Scheduled, Recurring, or Trigger.
"Now" and "Scheduled" campaigns are in the Campaigns tab:
You can find "Recurring" and "Omnichannel Trigger" orchestrations in the Automations tab:
Selecting the optimal timing for push notifications can enhance traffic and increase engagement. When is the right time? Find some tips in our article: What is the best time to send push notifications?
Are you wondering if you should use a formal or familiar tone in your mobile communication? Learn how to use the A/B test feature in our dedicated article!
In addition to the message itself, you can also A/B test images, deeplinks, and emojis!
Emojis are important, but can also be overwhelming. Here are a few examples of how to use emojis wisely in your messages.
Discover all the best practices in our dedicated article!
You can easily improve your open rates by adding an image, GIF, or video to your push notification.
You do not know how to add images, videos, or GIFs to your push? Here is the article you need: How can I attach an image, an audio, a GIF or a video to a push notification?
You can personalize your push notifications from the campaign editor using the data you have collected from your users. For instance, you can customize the name, the city, or the amount left in the pot's user.
This feature is also available for In-App messages and works in a very similar way.
Here is our article dedicated to in-app dynamic content: How to personalize the content of my in-app message?







You can add a test device and target it from the dashboard to ensure your notification is displayed correctly.
Batch allows you to find information on your installation and test your integration or make sure the notification you are editing works as expected on desktop or mobile.
The easiest way is to use either your Installation ID if it is displayed in your app, your Custom ID if it is sent to Batch, or the email address linked to the profile if there is one. Once you retrieve your ID, go to point 2.
Here are the steps you need to take to preview an in-app message on your iOS or Android device.
In-App Messaging allows you to communicate with your users while they are browsing the app, even if they did not accept push notifications. You can easily send a preview to your device before turning the campaign on for all your users.
To achieve that, Batch simulates the In-App display by sending you a push notification with your In-App message displayed as a landing page in your app. This will only allow you to see if your text and image are displayed properly.
In the in-app automation editor, click the ⚙️ to select your device in the saved devices, or copy your Installation ID in the corresponding field. Hit "Send test":
You will receive a push notification: open it to see on your device a preview of the message you are editing.
If you don't see it right away, you should refer to the Mobile Landing debugging article.
Consider turning on the automation for a development version of your app if you want to test more than the aspect of your message (e.g. trigger, targeting, etc).

Here is a list of all the best practices you need to take into account when using emojis in your notifications or In-App messages.
"Emoji" (also called emoticon or smileys) is a Japanese term to designate pictograms that can be added to your messages to emphasize your content and attract your users' attention. Every emoji has a meaning. They can substitute a word, express a feeling and are a staple element of the current communication strategy. They can be used in every type of business field.
All the best practices you must know to maximise you push notifications opt-in rate on iOS and Android (from Android 13) .
On iOS and Android 13 and higher, users must give consent to receive push notifications from your app (or "opt-in"). Users who didn't see the push permission prompt or refused to receive push notifications are considered as "opt-out".
iOS and Android push permission prompts are similar:
Do you need to improve your opt-in rate? Here are all the steps you need to take to create a re-opt-in In-App automation on iOS and Android.
On iOS and Android 13 and higher, users must give their consent to receive push notifications from your app (or "opt-in"). Users who didn't see the push permission prompt or refused to receive push notifications are considered "opt-out".
iOS and Android push permission prompts are similar:
Need help creating a dynamic message? Here are all the steps you need to follow.
Batch provides a system of dynamic content and a templating engine, allowing you to create dynamic messages for your campaigns.
You can personalize your In-App messages from the campaign editor.
When editing your message, just click the {...} button, choose the custom attribute you want to personalize your message with and select the formatting.
For instance, you can customize the name, the city, or the amount left in the users' pot:
Follow these steps to retarget users based on their interactions with an In-App automation, leveraging our integrated actions.
Learn how to segment your email traffic across multiple subdomains to isolate risk and optimize your sender reputation.
You will find here all the information you need to troubleshoot issues with SPF, DKIM and DMARC.
A variety of tools exist to help you check if your emails are correctly authenticated.
Send a test email from your subdomain and then check the email headers.
Most mailbox providers will indicate whether your email is correctly authenticated. For example, in Gmail, open the email, click the three dots in the top right corner, and select "Show Original."
{"aps":{"badge":99}}"messages": [
{
"channel_type": "push",
"platform_type" : ["ios","android"],
"title": "The campaign title",
"body": "The campaign body",
"ios": {
"deep link": "https://example.com/",
"custom_payload": "{\"aps\":{\"badge\":2}}"
"android": {
...
}
}
]
























You may find different types of errors when writing dynamic content. Here’s a list of the errors you may find and an explanation for each of them.
Meaning: A character appeared where only a name, number, separator, or part of a string was expected.
Typical Causes:
Using the string delimiter (') or variable prefix ($) in the wrong place.
Mixing double quotes where the language requires single quotes.
Introducing a non-alphanumeric character while building an identifier or a number.
Examples:
👉 {% if trigger_event.name == “John” %} instead of {% if trigger_event.name == 'John' %}
⇒ The issue is the double quotes “”.
👉price $ 30 instead of price == 30
⇒ $ on its own becomes an illegal char.
Meaning: A symbol of this type is not allowed in this part of the code.
Typical Causes
Forgetting a comma between arguments.
Using the wrong operator.
Examples:
👉 price => 3 instead of price >= 3
⇒ The correct operator is >=.
👉 {% set $product = lookup('products' '1') %} instead of
{% set $product = lookup('products', '1') %}
⇒ There should be a comma between the catalog name ‘products’ and the catalog id ‘1’.
Meaning: Closing a parenthesis incorrectly or without valid arguments.
Example :
👉{% set $product = lookup('products', '1' %} instead of
{% set $product = lookup('products', '1') %}
⇒ The second parenthesis after the catalog id ‘1’ is missing.
Meaning: The control block was not properly closed.
Example:
👉 {% if age > 5 %} CONTENT instead of {% if age > 5 %} CONTENT {% endif %}
⇒ The closing block {% endif %} is missing.
Meaning: A string was opened but not properly closed.
Example:
👉 {% if name == 'XYZ %} instead of {% if name == 'XYZ' %}
⇒ The closing quote ‘ is missing.
Meaning: The name doesn’t match the expected format, scope, or permissions.
Example:
👉 user..age instead of u.age or age
⇒ The format of the attribute is incorrect.
Meaning: After {% set, there must be a $variable followed by =.
Example:
👉 {% set = 3 %} instead of {% set $user_id = 3 %}
⇒ The $variable is missing.
Meaning: After {% for, there must be a variable followed by in.
Example:
👉 {% for $item list %} instead of {% for $item in list %}
⇒ The in is missing.
Meaning: The block associated with an if, else if, else or for is empty.
Example:
👉{% if condition %}{% endif %} instead of {% if condition %}CONTENT{% endif %}
⇒ There is no content between the display conditions (for dynamic content in SMS, push and In-App).
Meaning:
+ or - is used in front of a value that is not a number.
Example:
👉 {% if -true > user_score %} instead of {% if -4 > user_score %}
⇒ true is not a number, and therefore -true is not valid.
Meaning: The filter used to transform the argument is incorrect.
Example:
👉{% if first_name|title(nullIfEmpty:true) != None %} instead of
{% if first_name|trim(nullIfEmpty:true) != None %}
⇒ The filter title(nullIfEmpty:true) is incorrect.
Meaning: The string ends too early due to a closing parenthesis missing or placed incorrectly.
Example:
👉 hello {{first_name instead of hello {{first_name}}
⇒ The closing parenthesis is missing.
Meaning: The symbol used to separate the whole part from the fractional part of a number is incorrect.
Example:
👉 {% if age > 1..5 %} instead of {% if age > 1.5 %}
⇒ The decimal is incorrect.
Meaning: A character that isn’t allowed appeared inside a unit (the part that describes measurement like kg, ms, cm).
Example:
👉{% if distance > 10km@ %} instead of {% if distance > 10km %}
⇒ The unit is incorrect.
Meaning: The system couldn’t read the constant because it’s malformed or contains invalid characters.
Example:
👉 {% if subscription_date == 90days %} instead of {% if subscription_date == 90d %}
⇒ The constant days is incorrect.
Meaning: A partial tag is a tag whose full set of values cannot be listed. If a tag is partial (like b.custom_audiences), you cannot use it where the system must enumerate or join all values.
Example:
👉 {{ b.custom_audiences | join(", ") }}
⇒ The system cannot return the complete list of audiences for an installation.
You can also use dedicated DNS debug tools like EmailStruff's DNS tool.
Strict alignment: Type your subdomain name in the TXT field of the tool (subdomain.domain.com)
Relaxed alignment: Type your bounce subdomain name in the TXT field of the tool (bounce.subdomain.domain.com)
Type the selector + your subdomain name in the TXT field of the tool (scphxxxx._domainkey.subdomain.domain.fr).
Type _dmarc.subdomain.domain.com in the TXT field of the tool to check your DMARC record.
Alternatively, you can use the dig command following the same logic:
When operating in strict alignment mode, the presence of TXT entries within the same domain often disrupts email authentication.
The most frequent cause is a Google Postmaster Tools verification code being incorrectly placed at the subdomain level. Ensure that you only verify your root domain with Google Postmaster Tools.
Subsequent subdomains do not require individual verification to be added to the tool's monitoring.

dig TXT subdomain.domain.comSimply write javascript: in the URL bar of your website and copy and paste the following code:
batchSDK('ui.showPublicIdentifiers')
Open your website, right-click somewhere on the page and select Inspect or Inspect Element in the context menu that appears.
Once you have the developer tools open, click the Console tab, paste the following code:
For both methods, Batch's SDK will then return your identifiers:
Ensure that:
Subscribed to notifications? is set to Yes ✅
The Registration token field is not empty ✅
If these conditions are not fulfilled, or if you do not see the identifiers pop-in, try resetting your browser opt-in preferences.
If you are using Batch's Mobile Engagement Platform (More on the ), go to Settings > Debug, and paste your ID (with the correct ID type selected).
In case you just need to test your integration, you can use the Send test push button, and Batch will send a generic message with an image to your device:
You can see the list of all of the registered test devices from Settings > Push Settings. This is helpful to check if the token of your saved devices is still valid, and delete them if it's not the case:
You can send test notifications to your device to see how your campaign looks from the campaign editor.
Click on Send a Test and add your Installation ID or Custom ID in the corresponding field, then hit Send test:
Click ⚙️ to select your device in the saved devices, or copy your Installation ID in the corresponding field. Hit Send a test:
Right-click anywhere on your website, then click Inspect:
Then click on the Application tab and go to IndexedDB > BatchWebPush > BatchKVData:
You should then be able to get your Installation ID, for example here: 1bb71252-2b58-4285-9fe0-321c37ce5730.
Right-click anywhere on your website, then click Inspect Element:
Go to Storage > Indexed DB > Your Website URL > BatchKVData:
Your installation ID is displayed on the first line, for example here: 61b11de8-5cc9-454f-a0b3-162f740b53a.
Right-click anywhere on your website, then click Inspect Element:
Then click on the Storage tab and go to Indexed Databases > BatchWebPush > BatchKVData:
You should then be able to get your Installation ID, for example here: ebccf486-961f-403e-97a3-39daf001f98c.


Emojis are fun, but they can help you get better at communicating with your audience. Use them to:
Improve your open rate: Adding visual elements such as emojis impact positively your user attention. It has been proven that emojis increase the visibility of your message and thus your open rate by 80% (average between iOS and Android).
Increase your user retention: When used as a tool of classification for your campaign, emojis help your users to know what subject is covered by your message. You now have a clearer way to communicate with your audience.
Shorten your messages: Push notifications are short messages. Every character matters, especially in the title of your message. When it feels right, substitute words for emojis.
Be more impactful: Users have a very short attention span. Train your audience to associate an emoji with a type of content when they see it.
Think outside the box: Get creative by adding disruptive elements to your message that will make it stand out and differ from your competitors.
Here are all the existing methods to insert emoji in your title and body text:
Mac: press CTRL + CMD + Space to display the emoji keyboard and pick an emoji.
Chrome 68+: Right-click any text field and select "Emoji" or "Emoji & Symbols".
Using a browser extension: You can use the extension on Firefox or by EmojiOne on Chrome.
Using Emojipedia: Or simply copy/paste emojis from .
Emojis serve various purposes and can be placed in different positions:
In the title: This is the most effective way to attract the attention of your users. You can use an emoji to inform them when a live show starts or present the topic of the message.
In the body: As push notifications have to be short, you can easily replace a word with an emoji. This will allow you to save space, emphasize your communication and encourage users to open the notification and know more about your app.
In the button of your In-App message: This space is also a good one to use emojis if you want to boost the performance of your campaign.
In your web push: As with mobile campaigns, you can add emojis to your web push campaigns. We recommend that you put the emoji at the beginning of the push body (so that it is seen and attracts the eye).
Feel free to use as many emojis as you like, as long as your message remains clear, understandable, or funny—depending on your goal.
There is a large variety of emojis you can use. When it comes to picking the right emoji for the right meaning, the best solution is to stay relevant:
When talking about sport/food/piece of clothing: Use emojis that embody the theme or the action ( 🥊, 🍔, 🎩, 🤳, etc).
When talking about a live event: Use emojis that illustrate the upcoming event or a recording (🔴, 🔜, ▶️, 🆙, etc).
When explaining a feature/service: Use emojis inviting the users to know more by opening the message (📍, ℹ️, ✅, 🆕, etc).
When suggesting to open the app: Use emojis that show that there is more to discover in the app (👉, ➡️, 🔥, ⏳, etc).
You can find the top-used emoji in our Great Push Notifications Benchmark.
Depending on your industry, some emojis may be inappropriate or confusing for your audience. Cultural context is key when crafting your message. For example, 🙏 can be interpreted as a prayer or a gesture of gratitude, while 🙃 is often seen as playful or sarcastic but is also used in text-flirting.
Also note that some emojis may be sex-correlated such as 📯, 🍆, 🍑, 💦, 🍌.
If you haven't used emojis with your audience before, try Batch's A/B testing module to measure their impact on your campaign's performance. Run the test over a period of time and analyze how your audience responds.
Click on "A/B Testing" at the top right corner to turn the A/B Test on.
On iOS, the permission prompt can only be displayed once. On Android, users can tap in the grey area to dismiss the permission prompt. It will be displayed again the next time users open the app.
The wording of the push permission prompts cannot be customized.
Developers can choose when the permission prompt is triggered (e.g. after a pre-permission screen, as part of the onboarding tutorial, presenting why you are asking users to turn on push notifications. 👉 See our example below).
Users who don't allow push notifications cannot trigger the push permission prompt again later. They need to go to the system settings to grant the push permission for your app.
On Android, the system (via Play Protect) will automatically revoke the push permission for long-time dormant users.
There are four actions every marketer should take to grow their push opt-in base and make sure users don't disable notifications over time:
Improve the onboarding experience in your app, to explain the value behind push notifications before triggering the system opt-in prompt.
Set up a re-optin campaign using Batch In-App messages
Leverage iOS' provisional authorization
Allow opt-in users to adjust their push preferences from the app
On iOS and Android (starting from Android 13), the "native" request for push authorization can only be displayed once. For this reason, and following Apple and Google recommendations, we advise you to develop a pre-permission screen that can be displayed:
As an additional step, in your onboarding tutorial
On the first session
Or/and after a meaningful action: login, order confirmation, service subscription, etc.
Here is how a pre-permission prompt looks like:
If users click the "Turn On notifications" buttons, they will see the system permission prompt that can only be displayed once.
From a technical point of view, here is what must be done:
iOS: Simply call the BatchPush.requestNotificationAuthorization() method of Batch SDK when users click the right button on your pre-permission screen.
Android: Make sure your app targets at least Android 13 (API 33) and you are using a recent version of Batch SDK (1.19.2 or higher). Then, call the Batch.Push.requestNotificationPermission(context) method when needed to trigger the push opt-in prompt.
You can use Batch In-App messages to improve your push opt-in rate. Indeed, In-App messages can be displayed to every user, whether they are opt-in or opt-out to push notifications. Our platform allows you to segment your audience according to the push opt-in status (true or false) by using the native attribute "Push opted-in":
Then, you can target opt-out users via our In-App messaging technology to suggest users to subscribe / re-subscribe to push notifications, by setting up a re-optin campaign:
On iOS 12 (and higher), the Provisional Authorisation feature allows you to send push notifications to users who haven't displayed the system permission prompt yet.
These notifications will be displayed in the notification center only.
Users will have a chance to fully turn on push notifications for your app directly from the notification they received:
We observe a better opt-in rate for apps that have:
A thematic opt-in demand
A notification preferences page in the app allowing users to manage themselves their push preferences by theme.
This makes sure users can simply disable a category of alerts instead of disabling push notifications for the entire app from the system settings.
On iOS, the permission prompt can only be displayed once. On Android, users can tap in the grey area to dismiss the permission prompt. It will be displayed again the next time users will open the app.
The wording of the push permission prompts cannot be customized.
Developers can choose when the permission prompt is triggered (e.g., after a pre-permission screen, as part of the onboarding tutorial, presenting why you are asking users to turn on push notifications. Read this Guide on how to improve your opt-in rate).
Users who do not allow push notifications cannot trigger the push permission prompt again later. They need to go to the system settings to grant the push permission for your app.
On Android, the system (via Play Protect) will automatically revoke the push permission for long-time dormant users.
Getting opt-out users to turn on push notifications is key to re-engaging your audience, especially in the first 7 days following the app install. This can be done in a couple of minutes using an In-App message.
Batch In-App Messages are a powerful tool to encourage opt-out users to enable push notifications. These In-App automations allow you to efficiently invite such users back by suggesting they turn on notifications. With Batch's advanced targeting and personalization features, you can display these messages at the right moment and context, following a meaningful action.
Media: When users reach the end of an article, share or save an article, create or log into their account, get a premium subscription, etc.
Retail: When users add an item to their wish list, add a favorite brand, or after the checkout, to be sure they get alerts on their delivery.
Etc.
Here is the list of prerequisites for setting up your opt-in automation:
SDK: On Android, make sure your app includes the 1.19.2 version of Batch SDK (or higher). Your Android app must also target, at least, Android 13 (API 33). Install the latest version of your app and find your install in the debug tool (Settings → Debug) to check the current version of Batch's SDK used in your app.
Tagging plan: Make sure all the user actions you plan on using as triggers for your In-App message are tagged as events with Batch's SDK. On Batch's dashboard, go to Profiles → Custom Data → Events (or Settings → Custom Data → Events if you are using our Mobile Engagement Platform) to check the list of events available as trigger events. If the action needed is missing, your developers will need to tag it following Batch documentation: iOS / Android / Cordova / Flutter / React Native.
You will need to create an In-App automation using the following instructions:
Add the "Push opted-in" condition to your targeting and set it to "No" to target exclusively users who did not turn on notifications. We recommend you turn on the "Re-evaluate targeting just before display" option to improve your In-App automation behavior.
On Android, make sure you add a condition to target exclusively Android 13 (and higher) users:
Here is where you choose when the re-opt-in automation will be triggered:
Display event: We recommend using a custom event linked to a specific action sent to Batch through your tagging plan. Select an event triggered after an engaging action from the user: signing up or logging in to your app, adding an item to the cart, etc.
Capping: This feature helps you to control marketing pressure. In the example below, we have set a capping of 2 and a 72 hours grace period. A user will see the In-App message 2 times maximum, with a delay of 3 days minimum.
"NEW SESSION" triggers the display of the In-App when the app is opened. However, this display event is not ideal: when using this trigger, the re-evaluation of targeting is inoperative.
Even if you enable re-targeting, the user will see the In-App message at least a second time, even after turning opt-in.
Then, edit your message:
Select the In-App theme you want to use, in the format adapted for your use case (e.g., banner, modal, full screen, image, or webview). If you do not have a theme yet, create one from Settings → Theme → New theme.
Add wording for the text and the buttons of your message, according to your theme.
Configure the button action: Choose the "Smart push re-optin" option as the primary action. You can add another action for advanced use cases (e.g., track an event when users click "later" to show them another In-App message later.)
Clicking a button linked to the "Smart push re-optin" action will have different outcomes based on your users.
If users never triggered the push permission prompt, → Batch will trigger the push permission prompt, allowing users to turn on push notifications.
If users have already triggered the push permission prompt and didn't turn on notifications → Batch will direct users to the system settings, in the section dedicated to your app, where users will be able to turn on push notifications.
To test a re-opt-in automation, your installation has to be opt-out. In this state, you can’t receive the test push via the Send a test feature. That’s why you need to create a Custom Audience with your Installation ID (See the guides for iOS and Android).
Once your Custom Audience is ready and attached to your test automation, you can activate it.
Then, you can trigger the display event of your In-App automation, and you must see your In-App message, and you can click on the buttons.

Don't forget to add a default value so that the content of your message adapts if the user doesn't have the attribute selected.
Dynamic messages can be very handful to build user loyalty by creating bonds and addressing users in a personalized way.
It will definitely help you make a difference in the eye of your audience.
Here are some examples :

batch.user.eventThe built-in actions are Batch actions associated to a call-to-action of an In-App message, you just need to have the In-App feature enabled to use this feature. When creating an automation, they allow you to set up actions beyond the different actions associated to a button.
In order to be able to retarget users who have interacted with a previous In-App automation, you need to track events on your In-App automation A:
When editing your first In-App automation, you will have to associate your button with an event. To do this, choose the button of your choice (Dismiss, Deeplink, Clipboard, Rating...) then click on "Add secondary action" > "Track event".
Configure your event: select an already created event or create a new one, you can also add a Label for extra information like the name of the campaign or button.
You can also associate your second button, if you have defined one, to another event
Your button is now linked to an event (in the example below "Later"), which will be tracked once your users click on it.
Once the first campaign has been sent and the first users have interacted with it, the event you have configured will show up in your custom data. It is necessary to activate it in your Settings > Custom data in order to view them on the dashboard when creating the second In-App automation.
Now send a second In-App automation to users who interacted with the In-App automation A
To do so, you just have to adjust the targeting by choosing exactly the same event defined in campaign A. You will be able to decide to target or exclude the users who interacted with the buttons of your campaign A:
To exclude them, just click on the "Invert" button.
Your campaign A could be an In-App message with a promotional code, in the case below, the first button allows the user to copy/paste the code "PROMO10" and redirects to the page where the code can be used.
The second button of this In-App message indicating "Maybe later" allows the user to simply close the message. However, this button is in fact linked to an event via the "Track event" functionality, so all users who click on "Maybe later" will be linked to an event in Batch:
Below, we see that after clicking on "Track event" in order to link an event to the dismiss button "Maybe later", it is necessary to configure this event. You have to name it and give it a label if you want:
Then, in this example, once the event is brought up in Batch following the first clicks of your users on the dismiss button of the In-App message, it will be possible with campaign B to retarget all the users who clicked on "Maybe later" in order to offer them a new (or the same) promotional offer for example!
news.company.com, for your newsletters and marketing communications.
account.company.com, for your service related communications.
Etc
Most mailbox providers track the reputation of each subdomain separately. Think of it like having different phone numbers for different departments in your company—each builds its own reputation based on how it's used.
We strongly recommend using dedicated subdomains for different email types—particularly separating transactional emails (e.g. password resets, receipts, account notifications) from marketing emails (e.g. newsletters, promotional campaigns).
Here is how a typical email setup looks like:






















When sending out a marketing e-mail, the main goal is to optimize engagement: here are our guidelines for the most efficient email content.
Once the email you sent reaches your customer's inbox, the metric to optimize is user engagement, meaning at least opening the email, learning about its content and optionally interacting with buttons through CTA.
Customers are overwhelmed with information and advertising every day, so you have to stand out from your competitors.
To prevent horizontal scrolling (especially on mobile which is widely used), the correct mail format is 600 pixels on desktop and 320 pixels on mobile.
The design of the e-mail must be responsive; after you've finished editing the message, remember to always check that the e-mail displays correctly on the various devices (well-centered text, good distribution of images, etc.).
Also, to avoid the message being blocked in spam or the email loading time being too long, we recommend a ratio of around 70% text and 30% images within the message. Consider optimizing the weight of images by compressing them to reduce their size while maintaining good display quality.
Pay particular attention to the size and spacing of clickable buttons and icons placed in the email (especially on mobile devices, to avoid click errors).
We recommend designing them between 40 and 48 pixels minimum; the smaller they are, the further apart they need to be.
You can create color contrast and highlight text (bolding, spacing, etc.) to make buttons stand out 👇
💡 Adding a deeplink to all email items (images, CTAs, etc.) can help maximize the rate of visits to your site. This way, the visitor can become a potential lead!
Whatever device the customer uses, the text must be displayed correctly. That's why we recommend using the most common typefaces: Arial, Helvetica, Times New Roman, Verdana, Courier, Tahoma, Georgia, Palatino, Trebuchet MS, Geneva, etc.
Two different fonts (maximum three) will be more than sufficient👇
Finding a font that matches your corporate identity and reflects your positioning, and sticking to it helps keep your communication materials consistent.
🔤 The most legible font, regardless of screen size, is Sans Serif.
To make a real difference between the text and the headings and to organize the message, we recommend a height of 14 to 18 pixels. Headings can be larger, with a recommended height of between 22 and 28 pixels.
The signature can be smaller: 12 pixels to distinguish it from the rest of the text.
Make sure that your brand is directly identifiable on opening the email: your logo must be clearly visible in the header, with consistent graphics throughout the e-mail 👇
The subject line is the first thing the customer sees once they've opened their mailbox. It should not be neglected, as it has a direct impact on the open rate!
It's best to opt for an eye-catching, personalized and above all short and descriptive headline, which says as much as possible in as few words as possible. To draw the customer's attention directly to his inbox, the recommended maximum number of characters is 50, for 3 reasons:
The title is fully visible in the inbox on a computer or mobile. For maximum impact, place your keywords at the end of the sentence.
A short title will be read quickly, almost unconsciously, by the customer. Reading the subject line requires very little effort, which significantly increases the open rate.
A long title will give the customer the wrong impression, it's not aesthetically pleasing.
👉 Our recommendations:
Personalize the subject line: "Marie, would you like to travel for cheap?". Calling the customer by his name helps create immediate proximity with him.
Provoke a sense of urgency whenever possible: "Marie, don't forget to use your promo code before it expires! 👀"
Get straight to the point: The customer needs to understand immediately what the email is about.
To make your e-mail more descriptive, you can add
A call-to-action (CTA) is a button designed to encourage the reader to perform a specific action, such as registering for a webinar or purchasing a product 👇
To maximize your chances of conversions, limit the number of CTA above your waterline. This is the line that delimits what the reader can see without having to scroll.
👉 Our best practices:
Use action verbs like "Download", "Discover", "Take", etc.
Use "I" to encourage the customer to open the CTA, as the wording will allow them to project themselves directly. Example: "I'm discovering the program!" is more effective than "Discover the program".
If necessary, write a short reassurance text visible before the CTA to give more information about the offer.
Don't hesitate to engage
Adding a human dimension to the e-mail is a winning element so that customers can identify with their interlocutor's message and develop a real relationship with the brand.
You can add a first name as the "sender" of the e-mail.
Your email is now ready to be sent!
See how you can direct users to their default phone, email or sms app by simply clicking an In-App button.
In-App messages allow you to trigger a wide variety of actions when users click a button, including opening the default phone, SMS, or email app with a predefined phone number or email address. This can be done by using links such as :
tel:+00XXXXXXXXX: opens the default phone app. Users just need to press the call button to call the phone number included in the link.
sms:+00XXXXXXXXX: Creates a draft in the default SMS messaging app. Users only need to type a message and click "Send" to send an SMS to the linked phone number.
mailto:: Creates a draft in the default emailing app. Users only need to type a message and click "Send" to contact the linked email address
These links are handy to improve the user experience by redirecting them to the default apps and pre-filling the phone number/email address they need to contact, instead of asking them to copy-paste a value, and then open manually their phone/messaging app.
Here is a quick guide on how to use these links in an In-App automation or a Mobile Landing:
To be able to redirect users to their phone application you must:
Open or create a campaign
Go into the advanced settings and add the following format as a deeplink of the In-App message button: tel:+33123456789
Depending on their device, here is what the redirect could look like once users click the "Contact Us" button:
To be able to redirect users to their email application you must:
Open or create a campaign
Go into the advanced settings and add the following format as a deeplink of the In-App message button: mailto:experts@batch.com
Depending on their device, here is what the redirect could look like once users click the "Contact Us" button:
Batch adapts automatically the format of the In-App message to the screen size. It means the image will not look the same on all devices.
You can choose between two display modes for the image included in your In-App message. This can be done from the dashboard settings, in "Themes":
Cover: Batch will use the entire width of the screen to display the image. In portrait mode, depending on the screen size of the user device, the bottom and the top of the image will be cropped.
We recommend a square file, with a width of 1200px. Make sure the important part is not in a zone that may be cropped (the red zone):
Contain: Batch will not crop the image vertically. You will now have two empty spaces on the left and the right of your image.
If you choose the Cover mode, we recommend using the same colour for the background of your In-App message and the background of your image.
Introduced in Batch 1.14.0, In-App Image messages enable you to display a full-screen image or a modal with a close button or an auto-close timer.
If you want the In-App to appear like a modal, you need to upload a square image, with a width of 1200px.
If you want the In-App to appear like a full screen, you need to upload an image with a 2:1 ratio (for example, 1200x600 pixels).
Since the In-App will adapt itself to the different screen sizes of the device, be sure to test the outcome on several different devices.
Introduced in Batch 1.17, In-App messages enable you to display any web content in your app, while still leveraging Batch's campaign targeting, push, and In-App trigger engine.
Any HTML content can be displayed, allowing you a wide range of possibilities.
Be aware that your message might be displayed in virtually any display size and aspect ratio:
iPhones (from an iPhone 5 to 12 Pro Max).
Android phones.
Landscape phones.
Tablets, both portrait and landscape.
Use responsive web design techniques (CSS Media queries, Flexboxes, Grids, etc) to handle this. Firefox, Chrome, and Safari all come with tools that allow you to test your content on various form factors.
Learn why Gmail does not always show the “Unsubscribe” button, how List-Unsubscribe headers work, and how sender reputation and deliverability practices influence the button’s visibility
Gmail's one-click unsubscribe button allows recipients to opt out of marketing emails without scrolling to the footer. This streamlined experience reduces friction for users who want to unsubscribe, and protects your sender reputation by significantly lowering spam complaint rates from frustrated recipients.
However, the button does not always appear, even when technical requirements are met. Gmail evaluates multiple signals beyond header configuration before deciding to display it.
The List-Unsubscribe header allows email clients (like Gmail or Outlook) to offer recipients a standardized way to opt out:
Two methods are typically provided:
mailto: Sends an unsubscribe request via email
https: Points to a web-based unsubscribe endpoint
When Gmail detects these headers, it may render an "Unsubscribe" button next to the sender name. Clicking triggers a confirmation dialog, then processes the request automatically.
Including the header is required by Gmail but does not guarantee visibility. The button may not appear in these scenarios:
Warmup phase
Gmail may not display the button for subdomains without established reputation. New sending infrastructure typically requires consistent sending for approximately one week before the button appears ().
Reputation Issues
Senders with severely deteriorated reputation occasionally report missing buttons. This appears to be rare but indicates Gmail's trust threshold has not been met. In both cases, focus on recipient engagement, progressive volume increases, and consistent sending cadence to resolve the issue.
Here are some best practices to ensure the list unsubscribe button is consistently displayed:
Include both List-Unsubscribe and List-Unsubscribe-Post headers in all marketing emails. Batch includes them by default.
Maintain authentication records (SPF, DKIM, DMARC) and monitor their alignment. Misconfigurations may block button visibility regardless of other factors.
Build sending volume gradually. Sudden increases may trigger protective measures from inbox providers, even with proper headers.



Several issues may prevent you from receiving web push notifications on your browser or desktop.
Know more on Batch default setup for SPF, DKIM, DMARC, MX and BIMI.
Email authentication is the first aspect senders should consider when they start sending emails. Email authentication is required by mailbox providers, and crucial for verifying sender identity and minimizing email spoofing risks.
When sending emails, ensure you have correctly implemented the following technical measures:
Here are the steps to tag users who have interacted with the buttons of your In-App automations using our built-in actions.
You can easily add an attachment to your push notification directly from the dashboard. Keep in mind that each OS supports different types of attachments.
You can attach an , a GIF, or a video to your push campaign from the campaign editor if the OS supports that feature.
Click "Add media" in the message preview:
And choose between these two options:
From Computer: upload a file directly from your computer
batchSDK('ui.showPublicIdentifiers')Don't use sentences in capital letters, too many exclamation points, or words that are too "commercial", such as "urgent", "100%" or "open quickly".













Remove unengaged recipients proactively. Waiting for them to unsubscribe damages engagement metrics; segmenting or removing inactive contacts preserves reputation.
Monitor complaint rates in Google Postmaster Tools. Both directly influence whether Gmail trusts your sending infrastructure enough to display the button.

List-Unsubscribe: <mailto:unsubscribe@yourdomain.com?subject=unsubscribe>, <https://yourdomain.com/unsubscribe?uid=12345>
List-Unsubscribe-Post: List-Unsubscribe=One-Click



Make sure you have opened the website once and the version you installed includes Batch's SDK.
The Push token field is empty. Make sure the install date you see in app debug makes sense and check if notifications are enabled in your browser or in your OS:
To check if notifications are enabled in your browser or in your OS :
Do not use incognito mode, private browser mode or guest browser mode or Firefox's ESR versions. Subscription to push does not work in these modes.
Chrome
Click on the padlock 🔓 to ensure notifications are enabled for your website:
Firefox
Click on Settings to ensure notifications are enabled for your website:
Safari
From the Safari tab, click on Preferences, then head to the Websites tab and click on the Notifications button on the left-hand side menu to ensure notifications are enabled for your website:
Mac OS
Go to Apple menu > System Preferences > Notifications.
Select your browser on the left to ensure notifications are enabled.
Windows
Select the Start button and then select Settings ⚙️.
Go to System > Notifications & actions to ensure notifications are enabled for your browser.
You will need to refresh your page after enabling push notifications.
You can also reset your browser opt-in preferences.
Do Not Disturb mode
You can have issues receiving notifications if you are using a Do Not Disturb Mode. Disable the Do Not Disturb mode and try again.
You are using a VPN
If you are using a VPN, try to disconnect it, this can cause issues when trying to receive Web push notifications.
If notifications are enabled and your browser and your OS can receive test push notifications, double-check the targeting of your campaign:
Ensure it matches the information you see in your profile!
Check if you scheduled your campaign based on Profile's local time or Universal time (UTC):
The Profile's local time option allows you to send a push notification that will be received at the same hour in every country. For example, if your push campaign is scheduled to be sent on Friday, July 19th at 6 PM, your Canadian, Italian, and Chinese users will receive it on Friday, July 19th when it's 6 PM in their timezone.
The Universal time (UTC) option allows you to send a push notification to your users at a specific UTC time regardless of their location. If your push campaign is scheduled to be sent on Friday, July 19th at 6 PM Universal time (UTC), your users will receive it:
At 2 PM in Canada (UTC -4)
At 8 PM in Italy (UTC +2)
At 2 AM on July 20th in China (UTC +8)
DomainKeys Identified Mail (DKIM)
Domain-based Message Authentication, Reporting, and Conformance (DMARC)
While this is not related to email authentication, we also recommend implementing:
MX records, to specify the servers responsible for receiving email
Brand Indicators for Message Identification (BIMI)
All emails sent through Batch are transmitted using TLS (Transport Layer Security) encryption.
This means your email content are automatically protected with industry-standard encryption while traveling between servers, safeguarding your communications from interception.
SPF is used for sending IP validation. SPF is designed to stop spammers from sending emails that falsely appear to come from your domain.
To implement SPF, you need to create and publish an SPF record for your domain, listing all authorized email servers.
DKIM enables inbox providers to verify the email is authentic and hasn't been modified during the delivery.
DKIM is an email authentication method that helps protect against email spoofing and phishing attacks. It allows an organization to verify the authenticity of an email message, enabling recipients to confirm that the message was indeed sent by the domain owner.
DMARC helps prevent email spoofing and phishing by allowing domain owners to set policies that dictate how receiving servers should manage emails that fail SPF or DKIM checks, such as quarantining or rejecting them.
Additionally, DMARC provides domain owners with reports on email delivery and authentication, aiding in the monitoring and enhancement of email security.
Some inbox providers may require the presence of a Mail Exchange (MX) record to accept emails. An MX record is a type of DNS record that specifies the mail servers responsible for receiving email messages on behalf of a domain.
You can use the MX records Batch implementation team provides by default as part of the onboarding process, or use your own if you want to process the responses in a specific tool you are already using (e.g., a ticketing tool, etc.).
Brand Indicators for Message Identification (BIMI) is an email specification that allows authenticated senders to display their logos within supporting email clients, improving brand recognition.
BIMI adds value for brands that want to stand out in the recipient's inbox or that are more likely to be targeted by phishing campaigns (e.g., finance, insurance, etc.). Note that BIMI implementation is optional and not all email providers currently support it.
Built-in actions are actions associated with the call-to-action of an In-App message, which allows you to set up more complex actions than the typical actions associated with a button. These actions do not require any development and can be activated directly via the dashboard when editing the automation.
Set a tag in your In-App automation
When you edit your first automation, you need to manage the formatting of the buttons. Let's imagine the scenario of an In-App message presenting new app features. The buttons would be: Discover now and Discover later.
Below the dismiss button Discover later, click on Add secondary action and then on Add tag.
Create a new collection and the tag(s) to add to your users, or search for tags that exist in the system.
A tag is now associated with your dismiss button Discover later, so all your users who will click on this button will be associated with this tag.
Once this tag is set up, it will show up in your custom data. You need to activate it in your Settings > Custom Data so that they appear on the dashboard when creating future In-App automations.
Then you will be able to retarget all of the users who want to discover the new features of your app later on. This will give you an additional way to segment your userbase precisely.
Note that in this example, it would also have been possible to set a tag on the Discover now button, so in case you want to send a second campaign presenting the features, you could exclude users who have already discovered them.
When editing the second automation, in order to retarget or to exclude users grouped under a tag, you will have to add the corresponding collection in the targeting section and then select the desired tag:
You can do the same thing in various other use cases.
For example:
In the context of a rating In-App automation in order to group all users who have clicked on Rate the app under a tag : you could then exclude them from future rating automations.
If you want to communicate about a contest via an In-App message, you can set a tag on the Participate button. Then in a second automation, you will be able to exclude all users who clicked on the Participate button in order to target only those who have not entered the contest.
On iOS, you will need to integrate an extension to add support for rich push notifications.
Here is some information on the supported attachments:
Batch lets you send large-format notifications with a large image attachment. We require a landscape image, PNG or JPG, with a minimum width and height of 300px.
Images can be displayed on:
iOS 10+: Make sure you integrated the extension for rich push notifications.
Android 4.1+
Web: Chrome 56+ on Windows/Android.
These formats work exclusively on iOS.
The file must be an mp3 file with a valid mime type, hosted on an HTTPS server. The OS will automatically download the mp3 file and drop the download if it takes more than 30 seconds.
You can add a video attachment using an mp4 file, with a valid mime type and hosted on an HTTPS server.
You can also attach a GIF file to your push notification. The GIF file must have a valid mime type and be hosted on an HTTPS server.
If the attachment is not displayed, here are some suggestions to find the issue:
On iOS, make sure you have implemented the additional extension for rich push notifications, and check the deployment target. If your device's iOS version is below the target, you won't receive an image in your push notification.



























Easily sync third‑party email template builders with Batch’s dashboard using Batch APIs.
Batch allows customers to create email templates using two different approaches:
Built‑in email composer: Batch includes its own email composer that meets both basic and advanced email‑creation needs.
Third-party template builder: Customers can also bring any templates built with a third-party template builder or created within a Content Management System (CMS) into Batch. Customers can either upload the template manually through the dashboard or integrate it programmatically via the API.
Integrating a third-party template builder or CMS with Batch via API makes external templates instantly available inside the Batch interface, saving time to CRM teams and eliminating manual steps.
This guide walks through a typical template-builder‑to‑Batch integration using the API.
allows third-party template builder solutions to export templates to Batch:
Here is how it works:
Template Creation
Users create a template in the third-party template builder.
Template Export
Users request export to Batch (via button in the third-party template builder, automated process, etc.).
Make sure you have the following information before starting the integration:
In order to export a template to Batch, you will need to create a campaign using the . The campaign will serve as a container for your HTML template.
Here are several recommendations before you start sending a template to Batch:
In order to create a campaign containing a template, you will need to call a POST endpoint :
Here are the minimum parameters needed in the body of your API call:
name: Campaign name. For third-party template builder integrations, we recommend to prefix it like "Template - [Template name]")
state: Must be "DRAFT" to avoid accidental sends
when: Past date recommended (e.g., "2023-10-24T10:22:00Z"
If your API call is successful, the API will return a 201 response containing the ID of the newly created campaign.
The Campaigns API also lets you update the HTML of an existing template that is still in draft mode.
This is useful when the template has been edited several times in a third‑party template builder. Updating the campaign directly in Batch prevents the buildup of outdated “campaigns” that could be mistakenly used by a CRM team.
In order to update a campaign, you will need to use a dedicated endpoint :
The body of your API call needs to contain:
The ID of the campaign you want to edit ().
The updated campaign content.
Simply mention the ID of the campaign in the body of your API call, as described in .
Discover how to manage all your abandoned cart use cases with Batch Trigger campaigns.
The trigger feature option enables you to send a notification from one minute to several days after users have triggered an action in the app.
For setting up your abandoned cart campaigns, you need to plan to trigger actions in your tagging plan:
→ "added_item_cart" event, with [optional] product categories labels (e.g. “bags”) → "validated_purchase" → "cleared_cart" [optional - as an exit event]
First, you will need to go into the Automations tab, and click on New automation > Omnichannel trigger
Then, you can follow the instructions and create your automation:
Choose your entry event —> "added_product_cart" or any equivalent.
At this stage, you can add if you do not want a user to receive this trigger campaign more than X times.
Alternatively, you can use the , which prevents users from re-entering the flow if they have already triggered the event before (up to 6O days).
We recommend only using the grace period on abandoned carts, because a user can make multiple orders over different periods.
Then, you also have the option to enable parallel automations - When this option is activated, the user can trigger and advance through the same automation several times in parallel, each time they trigger the entry event with a different attribute value.
2. Targeting
It is not necessary to fill in the targeting part, except if you need to manage a multilingual campaign or target specific users, based on conditions ⇒ Check out .
3. Timing
By default, the starting date will be "now" and the ending date "never", but you can enter a specific date for both of them.
4. Quiet times
It is possible to add quiet hours and quiet days if you do not want your audience to receive messages on specific times or days.
You can then choose the fallback strategy: whether you want the notification initially scheduled during the quiet times to be sent at the next available slot, or not to send the notification at all and skip it.
When you are in the automation builder, you can add steps by clicking on the '+', in order to create the journey you want. Here is the documentation related to ⇒ .
You can add the delay of your choice to trigger the message. You have 2 options:
Wait until: X minutes/hours/days after the "item added to cart" event is triggered.
Wait for: the next slot at 11:00 AM, on any day, or a specific day.
On this delay, you can attach exit events, so that the user exits the automation and does not receive the message if they trigger a specific event.
In the following example, the user exits the automation if the product is "out_of_stock", if he "cleared_cart", or if he validated his "purchase" within a delay of 1 hour.
You can then add the push message step to write the content you want for your abandoned cart campaign. Your campaign is now ready to activate!
General recommendations :
Personalization is key (for example, using the user's first name)
Make it Omnichannel (Push, SMS, Email...)
To maximize conversion and have a more impactful strategy, you can create omnichannel journeys to reach your users on their preferred channels.
In the following journey, we've added a yes/no split step to ensure that if the user is opted-in for push notifications, they receive that priority, otherwise they will receive the email version.
How to do this Yes/No split ?
By adding a step in the automation '+' and selecting the Yes/No split option.
Then you will have to fill in the targeting conditions for your split (in the example, IOS and Android push opt-ins).
Getting ratings and reviews is essential in any app marketing strategy to encourage downloads and get useful feedback.
You can ask your users to rate your application directly by displaying the native request (provided by Apple or Android), or by displaying first a pre-request.
Apple and Android provide API in order to ask your users to rate and review your application. Thanks to this API, your users will see the native in-app appear in your application as below :
Batch recommends to set up a pre-request via Batch before displaying the Apple or Android native In-App. Users will receive a first In-App message asking them if they want to rate the app or not. If users answer yes, then, the native in-app will appear.
On iOS, you have to call the Apple SKStoreReviewController API (), to request permission to display the native request. You need to keep in mind some important things:
You can prompt for rating up to three times in a 365-day period. If users leave a rate, it will not be possible to re-solicit them for a year.
Users can disable rating requests on iOS settings. This option is available in Settings → App Store → In-App Ratings & Reviews.
There is no way to know if Apple’s request has already been displayed for a user.
The API doesn’t provide metrics on rating, and review.
On Android, you have to call the In-App Review API (), to request permission to display the native request. You need to take some points into account:
Review API keeps the right to refuse the display of the native request if it has already been triggered recently ("for example, less than a month" says the Google doc)
The API doesn’t provide metrics on rating, and review.
By setting up a pre-request via Batch, you are sure to target the user at the right time and retrieve push-related data.
To set up a pre-request push, you have to create an and redirect the user to the native request provided by Apple or Android.
It is important to choose the right targeting for rating campaigns. You can use Batch smart segments to target engaged users. This will allow you to get feedback from people who regularly use your app:
It is also useful to target users based on your industry. If you sell items, you can target users who have purchased in the last few months. Similarly, if you provide a service, targeting people who have signed up for a subscription is a good idea.
You must offer app ratings to all your users, not only satisfied ones.
It is essential to target users at a specific time, for example when a customer has finished a purchase or made a specific engaging action:
Be careful not to interrupt the buying process!
You can use a or as below:
Remember to keep neutral content as “Rate our app”.
Then, you have to redirect users on native requests, not to a feedback survey if the user is not satisfied with your app. To do that:
If you use the 1.17 version of the SDK or higher, you can use the proposed by Batch.
If you use a prior version:
Implement a custom action that triggers the rating request.
Use the “custom” field and fill in the name and custom JSON of the custom action.
Before sending your first emails or implementing new use cases, be sure you understand your legal obligations and Batch email guidelines.
Migrating to a new email solution is a perfect opportunity to start fresh, cleanse your list, and ensure compliance with legal and regulatory guidelines.
As a sender, the first thing you need to do is make sure that your practices and the use case you want to implement take into account local legal requirements and Batch email sender guidelines.
Ensure compliance with relevant data protection and anti-spam regulations, including:
(🇪🇺 European Union)
(🇺🇸 United States)
(🇨🇦 Canada)
Other local data protection or anti-spam legislations.
Verify that you have clear and explicit consent for all recipients, including context information (e.g., date, scope) and confirm that no renewal of consent is required.
During this step, you may need to review your subscription flow and redefine what you consider a "marketing opt-in" to ensure the validity of obtained consents. Some countries, like Germany, may require implementation of a double opt-in process.
Consult with a qualified lawyer or legal service if you have any questions or concerns regarding these matters.
Batch guidelines, accepted by all customers, specify that each customer must:
Be aware of the rules and guidelines for sending emails, under the legislation applicable in the countries to which each customer sends emails.
Only provide a recipients base collected solely on the basis of explicit consent and provide any demonstration in this regard, at Batch's first request.
Respect the rules governing the collection of opt-ins and in particular, not pre-check the opt-in boxes and ensure that the person has full knowledge of the content to which they subscribe.
Transmit to Batch only data or information of which you are the owner, assignee or licensee. Accordingly, you must not store email addresses or send messages to email addresses scraped on the Internet and/or automatically send emails from forms without any protection. Using a purchased/rented third party's recipients list is prohibited.
Ensure the quality of the data provided to Batch. Data must be up to date (for example, the email address of a recipient must be correct) and collected legally and in accordance with the objectives pursued by the customer in subscribing to Batch's Email Services.
Subscription forms exposed on the Internet must be protected against subscription bombing attacks (e.g., reCaptcha, invisible fields, etc.) and include mechanisms to prevent the collection of mistyped email addresses and other problematic email addresses (e.g., role email addresses, disposable email addresses, etc.).
Respect subscribers' consent. Sending emails that require a marketing opt-in according to Batch without respecting the user consent is strictly prohibited. Examples of use cases requiring a marketing opt-in include, but are not limited to, onboarding emails and abandoned cart alerts.
Do not send marketing messages to inactive recipients (who have not opened or clicked on messages for a very long period of time, which is assessed according to the sector of activity).
Be aware of the rules and guidelines of the main technical intermediaries and inbox providers (e.g., Google, Microsoft, Orange, etc.).
Here are the reference limits you need to consider for interpreting your results, based on industry best practices and specific sender guidelines:
Read thoroughly the updated inbox providers' guidelines to ensure you comply with the latest requirements regarding recipient list quality and more:
Google:
Microsoft:
Yahoo:
Orange:
Batch is a member of .
Signal Spam is a French non-profit organization that unites key stakeholders in the email ecosystem to combat electronic messaging threats (e.g., email service providers, inbox providers, publishers, authorities, and spam filter operators).
Signal Spam serves as a central hub for coordinating anti-abuse efforts across the French email infrastructure, working to create a safer digital messaging environment for all users. Batch customers are expected to respect the ethics codes and charters of Signal Spam(see ).
Also, please take a look at the M3AAWG senders best practices:
Discover how tracking links are generated uniquely for each recipient and how clicks are intercepted, counted, and redirected through proxy servers.
Unlike web analytics, email systems don't natively support click tracking. Emails are essentially static messages - once sent, there's no built-in way to know if recipients are clicking on links.
To solve this limitation, email service providers like Batch use tracking links that act as a proxy. These special links allow us to:
Intercept and count each click before redirecting to the destination
Identify which specific recipient clicked
Measure engagement metrics that would otherwise be invisible
This is why the links in your marketing emails point to a tracking domain first, before redirecting to the actual destination.
Here is a simplified version of the whole click tracking process:
Batch generates unique tracking links to replace all the original links in your email. These tracking links are generated differently for each recipient.
When a recipient receives an email containing links (e.g. link to an article, product page, etc.), all these links have been replaced during the email construction process by tracked links generated specifically for that recipient by Batch.
If you haven't configured a custom tracking subdomain during implementation, Batch will use a default tracking subdomain to generate tracking links. While this allows you to start tracking immediately, it should be considered a temporary solution.
Default tracking links look like this:
Here is how the click tracking process looks like with Batch's default tracking domain:
We strongly recommend setting up a custom tracking subdomain for three critical reasons:
Recipients are more likely to trust and click links from your own domain. This is especially important for sensitive communications like:
Order confirmations & payment receipts
Password reset emails
Account notifications
Using unfamiliar domains may cause recipients to hesitate or contact support, concerned about the legitimacy of your emails.
Training your recipients to click on links from unknown domains creates dangerous habits. When users become accustomed to clicking third-party links in your emails, they become more vulnerable to phishing attacks that exploit this behavior.
Email providers and security filters evaluate the alignment between your sending domain and the domains used in your email links. Misalignment can:
Trigger spam filters
Reduce inbox placement rates
Damage your sender reputation
To use your own subdomain for tracking links (such as click.yourdomain.com or track.yourdomain.com), you need to configure a CDN/proxy that:
Intercepts clicks on your tracking subdomain
Forwards the requests to Batch servers
Maintains the tracking functionality while preserving your domain branding
Here is how this would work:
You will find more information on how to setup your click tracking subdomain here:
Learn more on how Batch maintains your subscribers userbase, in all possible scenarios: bounces, unsubscribes, spam complaints and more.
Batch applies a series of rules designed to preserve your sender reputation, help with list hygiene, and comply with your obligations as a sender.
During the lifecycle of a subscriber, several events can occur:
Bounces: Feedback Batch receives from mailbox providers indicating that an email couldn't be delivered
Spam complaints: Feedback Batch receives from mailbox providers when recipients mark an email as spam
Unsubscribes: Requests coming from unsubscribe mechanisms available in your email (unsubscribe link or unsubscribe button in the app or webmail).
All these events are logged and displayed in your campaigns/automations statistics. They can be exported using the Profiles API export capabilities:
Email messages transit from the Mail Transfer Agent server (Batch) to the mailbox provider's servers (e.g., Gmail) using the Simple Mail Transfer Protocol (SMTP).
When an error occurs, the mailbox provider returns a bounce message with additional details explaining why the email couldn't be delivered.
There are three common categories of bounces:
Soft bounces are temporary delivery failures that can happen for various reasons:
Misconfigured/unreachable inbound server
Inbox full (or over quota)
24 hours of failed delivery due to rate limiting
And more
Hard bounces are permanent delivery failures. Batch receives hard bounces in cases of:
Invalid email addresses (mistyped or nonexistent)
Deleted or deactivated email accounts
Domains that no longer exist
Blocked sending domains due to invalid or inactive email addresses
A block bounce occurs when an email server refuses to accept the message due to policy or reputation issues. This is usually caused by:
Poor sender reputation
IP address or domain blacklisting
Content identified as spam
Authentication failures (missing or incorrect SPF, DKIM, or DMARC records)
Batch also processes automatically negative user interactions to protect your domain reputation and exclude these recipients from future emails.
Here is an overview of the existing flows:
Batch automatically processes negative user interactions to protect your domain reputation and exclude affected recipients from future emails.
A spam complaint occurs when email recipients mark a message as spam in their email client. Recipients may flag emails as spam based on their personal judgment of the content, frequency, or relevance of the messages they receive. Batch receives the email addresses tied to spam complaints through inbox providers' feedback loops ().
Recipients can unsubscribe in two ways:
By clicking the unsubscribe link included in marketing communications
By clicking the unsubscribe button in their email client (which triggers a "list-unsubscribe")
Learn how spam complaints impact your email deliverability and Batch handles complaints to keep your sender reputation safe
A spam complaint occurs when an email recipient marks a message as spam in their email client.
Recipients may flag emails as spam based on their personal judgment of the content, frequency, or relevance of the messages they receive:
Spam complaints are serious indicators of potential issues with your email marketing strategy.
Mailbox providers, like Google, Yahoo, Microsoft or Orange closely monitor these complaints to determine your sender reputation, which directly affects your email deliverability. Spam complaints have an important role in reputation issues.
Message Classification Issues
Incorrect message classification (such as marking marketing emails as transactional, for onboarding messages for example).
Mixing promotional content into transactional emails.
Content Quality Issues
Suspicious content (including aggressive promotions or misleading subject lines).
Technical problems (broken images, non-functioning links).
Repetitive content (constant promotional offers without variety).
Frequency and Transparency Problems
Excessive email frequency for non-critical notifications.
Over-aggressive marketing (multiple daily emails with little value).
Unclear communication about email purpose and frequency.
Userbase Quality Issues
Be sure your subscribers are aware that they subscribed to marketing communications, and know what they will receive and when. We recommend you implement a double opt-in logic to make sure your subscriber base is willing to receive your emails.
Above all, your opt-in process must comply with .
Poor unsubscribe link placement or visibility. The link may be difficult-to-find in long emails, often clipped by Gmail.
Absence of a global unsubscribe link.
Technical issues with unsubscribe functionality.
Emailing inactive subscribers who may have forgotten about your service and don't expect an email.
Inadequate audience segmentation across different subscription sources.
Failing to adjust content for different subscriber acquisition channels (e.g., targeting the same way users who subscribed to your newsletters and customers).
Batch monitors spam complaints through:
Standard Feedback Loops, coming from mailbox providers (FBLs, )
Independent feedback systems like
As a sender, you are responsible for monitoring spam complaints across all your sending domains. A spam complaint rate exceeding 0.3% requires immediate investigation and corrective action.
Google does not provide specific email addresses associated with spam complaints, necessitating a proactive testing approach to identify and address potential issues.
Orange only provide specific email addresses associated with spam complaints if users give consent, and only if these complaints are done from the Orange's app or webmail.
When Batch receives a spam complaint, the system automatically:
Unsubscribes the complaining email address
Blocks future marketing communications to prevent additional complaints
Records the complaint for analysis and improvement
This immediate response helps maintain a healthy sender reputation and ensures compliance with email marketing best practices.
Get to know how to set up a new click tracking subdomain with Batch to use your own domain in tracking links.
An email subdomain is a prefix added to your main domain name.
If your company domain is company.com, you can create any subdomain that will be usef for your tracking links: click.company.com, track.company.com, etc.
The following examples are not subdomains:
Separate domain with hyphen: domain-x.com (e.g., click-company.com)
Different root domain: domain.x.com (e.g.,
To use your own subdomain for tracking links (such as click.yourdomain.com ), you need to configure a Content Delivery Network (CDN) / proxy that:
Intercepts clicks on your tracking subdomain
Forwards the requests to Batch servers
Maintains the tracking functionality while preserving your domain branding
Here is how this would work:
You can verify that your custom tracking domain is properly forwarded to Batch's tracking endpoint using the curl command to check the routing and security:
Look for the HTTP/2 302 status code. This redirect indicates that your CDN has successfully forwarded the request to Batch's tracking server.


Here are all the steps you need to take to create a pre-permission In-App message and add context to the App Tracking (ATT) prompt.
Asking users to turn on app tracking is a sensitive task. Adding context and describing the benefits of app tracking for your users is key to optimizing your App Tracking Transparency (ATT) opt-in rate. This is all the more important given the fact that the app tracking prompt can only be displayed once.
Batch In-App messages allow you to provide additional details on why app tracking is important for your app and to trigger that request at the best moment:
the first time users open your app,
after a meaningful action,
Understand how to choose the right email sending domain, structure your IPs and why domain consistency is key for an optimal deliverability.
Using single-purpose subdomains is key to build a reputation quickly and secure your email delivery, especially if you send both transactional messages (e.g., account creation confirmation emails) and optional marketing communications targeting thousands of subscribers at once (e.g., a weekly newsletter).
Here is how a typical email setup looks like:
Dedicating a pair of IP/subdomain to your transactional messages and a different pair of IP/subdomain to your marketing communications is highly recommended for two reasons:














Policy blocks (the receiving server has specific rules against your type of email)




















The recipient receives the email and clicks a tracked link. That link points to Batch servers, which will:
Count a click for that specific recipient
Provide the content behind the tracked link to the recipient's browser
This redirection step is almost invisible to the recipient and happens in milliseconds.
https://post.eu.spmailtechnol.com/f/a/[random-tracking-ID]The template builder calls Batch Campaigns API, passing the the HTML content to Batch.
A campaign is created in draft mode on the Batch dashboard, for a specific Batch project.
Later, the third-party template builder can update an existing draft campaigns to avoid duplicates or the use of outdated templates on Batch dashboard.
Campaign Review
On Batch dashboard, users can edit the campaign details (name, targeting, subject, sender), review it, and send the email to the targeted audience.
For CMS integrations, you can create campaigns with a RUNNING status:
You can create campaigns with a RUNNING status. This schedules the campaign for immediate or future delivery. It’s the default use case for most media companies that need to send newsletters created in‑house.
In this case, make sure the campaign has a descriptive name and includes targeting parameters that match your audience (e.g., profiles subscribed only to “politics” news). Otherwise, Batch will target all opt‑in profiles.
subject: Email subject line
sender_identity_id: Sender ID from the dashboard (see here).
html: Escaped HTML content from template builder






Ensure that the email addresses and the sending plan do not disrupt the Batch Services and do not create rejection by the technical intermediaries (impact on the reputation and/or blacklisting of DNS or IP addresses of Batch, etc.).
Indicate a physical address in the footer of the email and have a "legitimate" website (in the sense given by the email service providers/email inbox providers) linked to the sending domain name.
Notify Batch in the event of sending a volume extremely higher than its usual sending volume.
company.click.comTechnical solution names (e.g., batch.domain.com): While technical teams may prefer this approach to simplify DNS management, it's not recommended. Solution-specific subdomains are rarely used in production email infrastructure and can confuse recipients.
Single-letter abbreviations (e.g., b.domain.com): Avoid abbreviated subdomains that could be confused with technical subdomains like bounce records, and make DNS management difficult.
Random names (e.g. xp3kd8.domain.com): These may be confusing for your recipients and spam filters.
Suspicious terms: Avoid using terms that might worry users because they are too trechnical or privacy concerning (e.g., proxy.company.com, analytics.company.com, tracking.company.com, etc).
Long prefixes: Avoid unnecesarily long prefixes like email-tracking.company.com, etc.
Use clear, short (2-5 characters) and trustworthy prefixes. Here are some examples:
click.company.com
go.company.com
link.company.com
Use a subdomain dedicated exclusively to Batch click tracking. Ensure it's not already in use for emails or other purposes in your organization.
Your CDN must be configured to forward all HTTPS requests to Batch's tracking endpoint.
Origin Server Configuration:
Endpoint: eu.spgo.io
Protocol: HTTPS only
Method: Forward all incoming requests
Our partner, SparkPost, offers step-by-step guides to help you configure your CDN:
Alternatively, you can use a reverse proxy following .
Once you have configured your CDN, please contact us mentioning the tracking subdomain you have chosen. This will help us validate the setup and activate the custom click tracking for your project.
You can contact:
A Solutions Engineer if an implementation project is ongoing
Or our Custom Care team through
or when users match a specific target.
Advertising IDs are no longer collected by Batch since the release of SDK 2.0 version.
First of all, make sure your app integrates the 1.16 version of the SDK or higher. It includes a new built-in action for In-App messages: batch_ios_tracking_consent.
On iOS 14, that built-in action will ask for app tracking consent using the AppTrackingTransparency framework. If users have already been asked and refused to consent, it will open the app's settings where tracking can be enabled.
In order to target specific users who didn't allow app tracking yet for your app, excluding users who disabled it system-wide, you will need to send the ATT authorisation status to Batch via a custom attribute.
Here is how to proceed:
Use the trackingAuthorizationStatus property to check the app tracking authorization status.
Send the values provided by iOS to Batch using a custom attribute. You can track an attribute that will send a string value to Batch (e.g. att_status="not_determined" or "authorized", "denied", "restricted"). Follow our documentation to find the methods required by Batch SDK to track attributes.
Make sure these attributes are sent to Batch as soon as the SDK starts and are updated when users interact with iOS app tracking prompt. You can see if your attribute is sent correctly to Batch using the debug tool.
Once you have taken all the steps described in the prerequisites, you can start creating your In-App automation. Go to the dashboard → In-App and click the "New campaign" button.
Here is how you can target all users on iOS 14 who didn't trigger the app tracking prompt:
Choose a trigger event that matches your need. You can trigger the pre-permission message the first time users open the app (ASAP), on the next session (New Session) or based on a specific action tracked in your app.
Make sure you set a frequency capping and/or a grace period to avoid showing that message too many times:
Your In-App message layout and its content must be compliant with Apple's guidelines. Please read them carefully before creating your campaign: Apple Human Interface Guidelines - Accessing User Data.
Here are a few examples of what you need to take into account to avoid misleading or confusing users:
In-App theme: Your In-App message must offer only one action, which must display the system prompt, so it is clear to users that this is the only action they can take. You can create a new In-App theme with one CTA to match Apple requirements in your dashboard Settings → Themes.
Body: The body of your In-App message should only describe the benefits of app tracking for your users. You should not offer incentives, display a screen that looks like a request, display an image of the alert or annotate the screen behind the alert. Please review the examples provided by Apple in the Human Interface Guidelines and in the App Store Review Guidelines.
CTA: Don't use words that let users think they are granting permission by clicking the CTA of your In-App message. Instead, use words that suggest the permission prompt will be displayed once they click the CTA (e.g. next, continue, etc).
Here is what a pre-permission campaign looks like if you use a full-screen In-App format:
As with any other In-App automation, you can track the results of your automation from Batch dashboard.
You can also use one of Batch analytics dispatcher to track the results of your campaign in your favorite analytics tool.
By segregating email types, you can better manage the reputation of each domain and IP address.
This prevents issues with one type of email affecting the deliverability of others, giving you time to fix your issues and improve your email practices (e.g., in case your newsletters are blocked, your other emails won't necessarily be blocked):
Dedicated domains and IPs allow you to adapt your email infrastructure to your needs. This can result in better deliverability rates, as inbox providers and spam filters may treat transactional and marketing emails differently.
Also, you will be able to track separately the performance of your emails (e.g., identify the causes of abnormal spam rates, etc.) and address issues in a more flexible way (e.g., having your marketing subdomain blocked will not necessarily mean that your transactional subdomain will be blocked).
When creating your sending subdomains, please consider the following points:
It is essential to send emails using subdomains to properly segregate email sending by activity (for example, marketing vs. transactional emails).
Select your subdomain names thoughtfully. The names you choose will be visible to recipients and help them identify your different communications (e.g. news.domain.com for newsletters, service.domain.com for transactional emails, etc).
The main objective here, in addition to making your emails easier to identify by recipients, is to avoid being mistaken for a bad sender that commonly uses "cousin domains" or "lookalike domains".
Select a subdomain under your primary domain to gain credibility with inbox providers and email recipients (e.g., news.domain.com).
Most mailbox providers expect your Header From domain to point to a real website. That site needs to have a page with your company information (address, identity), an explanation of how you got permission to email your users, and your legal notices.
Don't choose another domain that has no history (e.g., news.randominternaldomain.com). This is especially important for known brands that can be victims of phishing/spoofing campaigns.
Be sure to use a top-level domain that matches the one of the links you put in your emails.
For example, if you have a localized website (e.g., domain.fr) and a global domain (domain.com), you will need to set up two different sending subdomains to send your newsletters so that the TLD of your links and the TLD of your sending domains are aligned:
For your localized newsletters: news.domain.fr
For your global newsletters: news.domain.com
Domain consistency is a best practice when sending emails.
While this is optional, we recommend using a dedicated click tracking subdomain for all the emails sent from Batch (e.g., click.domain.com) that will be aligned with your root domain (e.g., domain.com). If you send emails from news.domain.fr and news.domain.com, make sure you have two different tracking domains (e.g., click.domain.fr and click.domain.com).
Using a custom tracking domain has several advantages:
Increased trust: Links in your emails point to a domain your customers recognize. This reduces the risk of the emails being marked as suspicious or fraudulent. Also, this helps your customers verify the message they just received is not a phishing email.
Increased security: HTTPS tracking links are a big improvement over HTTP tracking links, especially if you are providing a service in a sensitive sector (e.g., banking, insurance, etc.) or sending sensitive messages (e.g., verification codes, password reset links, etc.).
Better deliverability: Email providers are more likely to trust emails with a tracking domain aligned with the root domain and no mixed content (e.g., mixed HTTP and HTTPS links), leading to improved email deliverability rates.










Key practices for ensuring inbox success and building a strong sender reputation
Email deliverability involves a variety of practices designed to ensure that emails reach recipients' inboxes without being rejected or marked as spam. Ensuring high deliverability is crucial for any omnichannel strategy for several reasons:
Critical messages such as account creation confirmations, password reset emails, and order service related messages must reach recipients to ensure the smooth operation of your business.
Marketing emails that don't reach users represent lost opportunities and wasted effort from your team. With the growing volume of emails users receive, it's essential to refine your targeting, content, and user experience to make each email anticipated and effective in driving conversions.
The sender reputation refers to an internal scoring used by mailbox providers to evaluate the trustworthiness and reliability of an email sender (e.g., IP reputation, domain reputation, etc.).
It is one of the indicators that help mailbox providers decide whether an incoming email should be accepted, delayed, or blocked; shown in the inbox or in the spam folder; displayed in the main inbox of the user or in another category.
The sender reputation is not shared across all mailbox providers. Each mailbox provider uses its own set of parameters and values different aspects of your email activity differently.
The reputation is usually built taking into account:
IP and domain reputation, considering the history of sent emails and the presence in block lists.
Authentication of the email traffic (e.g., use of authentication protocols like DKIM, SPF, and DMARC).
List hygiene (e.g., high hard bounce rate indicating poor list quality, high soft bounce rate indicating inactive subscribers are targeted, etc.).
Sending frequency and volume
The distinction between legitimate senders and spammers is constantly evolving as mailbox providers need to react to increasingly sophisticated spamming tactics. For legitimate senders, this means more risks of being identified as a potential spammer and having emails blocked or not shown in the main inbox.
Building a strong email reputation requires long-term commitment and daily attention from your technical and marketing teams. The amount of work needed to sustain a good reputation differs depending on your situation.
Using shared IPs is a good solution for most senders, especially those who don't have enough traffic to sustain the reputation of a single IP (typically less than 10K emails/day).
Benefits of shared IPs include:
From the start, senders benefit from the established reputation of the shared IPs.
The reputation is already established thanks to other customers using these IPs, reducing the risks of facing delivery issues.
Shared IPs make the subdomain warmup process easier.
This approach is a cost-effective solution that comes with additional advantages, including a delivery management team monitoring possible IP-related issues and mitigating them for you.
Although using shared IPs might appear to be a "low maintenance" option, it still requires adherence to best practices in terms of userbase quality, email sending, and email content. It is possible for your domain's reputation to decline, even if you use shared IPs with a strong reputation.
In order to protect the email activity of our shared IP customers, all Batch customers are:
Audited: Each customer must fill a vetting document to ensure they follow industry best practices. In case of non-compliance, modifications are required before they can send their first email with Batch.
Assisted: Our Customer Success team helps you build a domain warmup plan to avoid operational mistakes and start on the right foot.
Monitored: Our Delivery team monitors the email activity on Batch shared IPs to alert in case of anomalies and suspend a customer's email activity if necessary.
Enterprise customers sending large volumes of emails, with dedicated resources to monitor and troubleshoot email traffic, can opt for a dedicated IP to send their emails.
When choosing a dedicated IP, Batch customers are fully in charge of their own IP reputation:
Tailored IP warmup: By taking care of the IP warmup process, you can customize the warmup strategy to maximize long-term deliverability for your specific case. While initial delivery issues may occur, such as temporary blocks or delays, a carefully planned warmup ensures better results with mailbox providers over time.
Constant and predictable traffic: With exclusive use of the dedicated IP, you have the advantage of establishing a consistent email sending pattern. This helps mailbox providers recognize your traffic as trustworthy, significantly reducing the risk of being flagged as a potential threat.
KPI monitoring: Managing a dedicated IP allows for precise monitoring of key performance indicators (KPIs). While our Delivery team handles this for shared IPs, having a dedicated IP gives you the opportunity to directly oversee and optimize the health and performance of your email campaigns.
Customers who use Batch shared or dedicated IPs are all required to adhere to:
and the code of conduct outlined in the contract, which take into account industry best practices.
The local legislation applicable in the country of the email subscribers they are addressing.
The guidelines of mailbox providers. Email senders must stay informed about any updates to these guidelines.
Get to know how to set up a new sending subdomain with Batch to send your first emails.
POST https://api.batch.com/2.8/campaigns/create{
"name": "Campaign name",
"state": "DRAFT",
"when": {
"local_time": false,
"start_time": "2023-10-24T10:22:00Z"
},
"messages": [
{
"channel_type": "email",
"subject": "Email subject",
"sender_identity_id": "4012",
"html": "Escaped HTML content here"
}
]
} {
"name": "Campaign name",
"state": "DRAFT",
"when": {
"local_time": false,
"start_time": "2023-10-24T10:22:00Z"
},
"messages": [
{
"channel_type": "email",
"subject": "Email subject",
"sender_identity_id": "4012",
"html": "Escaped HTML content here",
"languages" : [
{
"language" : "en",
"subject" : "Email subject",
"sender_identity_id" : "4012",
"html": "Escaped HTML content here"
},
{
"language" : "fr",
"subject" : "Email subject",
"sender_identity_id" : "4034",
"html": "Escaped HTML content here"
}
]
}
]
}{
"id": "orchestration_0664hyh918hr1gnzka9py5t62nrc0e1q"
}POST https://api.batch.com/2.8/campaigns/update {
"id": "orchestration_0664hyh918hr1gnzka9py5t62nrc0e1q",
"campaign": {
"name": "Campaign name",
"state": "DRAFT",
"when": {
"local_time": false,
"start_time": "2024-01-24T10:22:00Z"
},
"messages": [
{
"channel_type": "email",
"subject": "Campaign subject",
"sender_identity_id": "4012",
"html": "Updated escaped HTML content"
}
]
}
}
POST https://api.batch.com/2.8/campaigns/delete{
"id": "orchestration_0664hyh918hr1gnzka9py5t62nrc0e1f"
}curl -v https://subdomain.company.com/f/a/b/c/dUser feedback, whether it is positive (e.g., opens, clicks, interactions, etc.) or negative (e.g., unsubscribes, spam complaints, etc.).









The following examples are not subdomains:
Separate domain with hyphen: domain-x.com (e.g., news-company.com)
Different root domain: domain.x.com (e.g., company.news.com)
Choose a subdomain name that clearly reflects the type of emails you'll send from it. While you can switch to a different subdomain later, doing so requires a new warmup process, which is time-consuming.
If you are sending marketing and transactional emails, we recommend you choose a different subdomain name for each type of message to segregate your email traffic.
Technical solution names (e.g., batch.domain.com): While technical teams may prefer this approach to simplify DNS management, it's not recommended. Solution-specific subdomains are rarely used in production email infrastructure and can confuse recipients.
Single-letter abbreviations (e.g., b.domain.com): Avoid abbreviated subdomains that could be confused with technical subdomains like bounce records, and make DNS management difficult.
Localized names (e.g., bonjour.domain.com, hola.domain.com): These can create challenges when expanding to new markets. English subdomain names provide better international compatibility.
Persona names (e.g., persona.domain.com): If you use sender personas in your "From" field (e.g., "Pierre from Company"), avoid encoding that persona in your subdomain. This creates issues if:
Your persona varies by country. You would have a mismatch between your from ("Peter from Company"), and the sending email address (pierre.company.com)
Or if you decide to change or discontinue using personas.
Here are recommended approaches that provide flexibility:
Channel-related names: email.domain.com, mail.domain.com, etc
Greeting-based names: hello.domain.com, hi.domain.com, hey.domain.com
Generic, versatile names: contact.domain.com, news.domain.com, service.domain.com, updates.domain.com, etc.
These options scale internationally, and remain meaningful regardless of how your email strategy evolves.
Use a subdomain dedicated exclusively to Batch email sending. Ensure it's not already in use for emails or other purposes in your organization.
Then, the last step would be for you to fill in your sender information on Batch's dashboard.
Sender information is what is going to be displayed before your sending domain in the recipient's Inbox.
To do so, you can go to Settings > Channels > Email and click on "Create sender":






Learn how to condition the display of certain parts of your email according to your user data.
From the Email Composer, display conditions can be added directly to the text blocks or structures that make up your templates.
These conditional blocks can be used to:
Define conditions for displaying text based on user data
Create a loop displaying the different elements present in an object array
Conditional blocks can only be activated on template structures.
To activate and add a condition to a structure:
Click on the Edit email button in your campaign and then select the structure to which you want to apply the condition.
In the menu on the left, click on Conditions
Activate the toggle button Apply Display Conditions
A list of elements to fill in will then appear:
Name (Required): Name of the condition (ex: display cart news items)
Description (Optional): Description of the condition
Code before module: Beginning of the condition (ex: {% if ... %})
You can use the same condition on several structures, use the same name and the other elements will be filled in automatically.
In the case of a condition in a text block, the > and < symbols are not supported on the Email Composer.
Modifying any element of the condition other than its name will modify all the conditions with the same name.
There are two possible types of condition, if and for:
These conditions allow a structure to be displayed or not, depending on the value of a user attribute or an event attribute.
For example, if you want to condition the display of your structure based on a boolean attribute indicating whether or not the user has a premium account:
Code before module
{% if is_premimum == true %}or{% if trigger_event.is_premimum == true %}(if the attribute is attached to the trigger event)
Code after module
{% endif %}
Several types of logical operators can be used in if conditions to compare the value of a user attribute:
==: equal to
!=: not equal to
>: strictly greater than
The if and else structures can be used to manage a case and its opposite. If the if condition is satisfied, the first block of code is executed; otherwise, the else block is executed.
For example, if you want to display a different structure depending on a customer attribute indicating a promotion:
Block 1 (condition met):
Code before module
{% if has_discount == true %}
Code after module
No code
Block 2 (condition not met):
Code before module
{% else %}
Code after module
{% endif %}
It is also possible to link several if-else loops together to handle more complex cases:
Block 1 (condition 1 met):
Code before module
{% if condition1 == true %}
Code after module
No code
Block 2 (condition 1 not met, condition 2 met):
Code before module
{% else if condition2 == true %}
Code after module
No code
Block 3 (condition 1 and 2 not met):
Code before module
{% else %}
Code after module
{% endif %}
These conditions are used to retrieve data from object arrays. They will browse all the data present in all the objects in the array to display them in your structure.
For example, if you want to display the product information linked to the add_to_cart event, in the case where the array of objects has the name article_infos:
Code before module
{% for $item in trigger_event.article_infos %}
$item: Iteration variable you create that retrieves data from the object array for display on your structure in this way:item.product_name
trigger_event.article_infos: Indicates the name of the array of objects attached to the trigger event in which the data you want to retrieve can be found.
Code after module
{% endfor %}
There are three types of user data:
[]: Formerly called Tag collections, arrays can contain only a list of strings (String). You can only display:
All elements present in the array: {{ c.interests }}
The first element: {{ c.interests|first }}
You can refer to object properties using the following notation:
You live in {{ address.street }}, {{ address.zip_code }} {{ address.city }}
Object array [ {} ]: Object arrays are simply a list of objects. An array of objects can have up to three levels of nesting, i.e. an array of objects can contain an array of objects which itself contains an array of objects.
Data in arrays of objects can only be accessed using a for loop.
The for loop will display all the objects in the array: it is not possible to choose which object to display.
This type of data is often found for retail customers attached to purchase validation or order confirmation events.
Here is an example of a table of purchase validation objects containing two products:
Here is an example of a case where you want to display a block if the user is premium.
Context
There is an is_premium attribute attached to the user profile and you want to display the block if the value of this attribute is equal to true:
Code before module
There are several options:
Option 1:
{% if is_premium %}Option 2:
{% if is_premium == true %}
Code after module
{% endif %}
Let's imagine that you want to display a block based on the user's region.
Context
You offer different baskets depending on the user's region, and the display depends on the value of the custom region_fr attribute:
Code before module
{% if region_fr =='Région Auvergne-Rhône-Alpes’ %}
Code after module
{% endif %}
Here, you want to display a block according to the number of loyalty points a user has.
Context
The fid_points attribute is of type int and you want to display the block if the user has more than 500 loyalty points:
Code before module
{% if fid_points >= 500 %}
Code after module
{% endif %}
Let's say you want to display a block based on the values in an array of strings (tag collections).
Context
You sell trackers for animals and a single customer can have several animals and therefore several trackers. You want to display the block if the string array favorite_category contains ‘hats’ or ‘sunglasses’:
Code before module
{% if t.favorite_category|contains('hats')ort.favorite_category|contains('sunglasses')%}
Code after module
{% endif %}
If you want to send an email containing a single piece of information, but adapted according to several conditions without making it too complicated to manage, using an if, else if, else block is ideal.
Let's imagine you want to send a personalized email to your customers, offering them trips based on their last trip or, failing that, their age:
Block 1:
Code before module
{% if last_purchased_trip == 'mountain' %}
Code after module
No code
Block 2:
Code before module
{% else if last_purchased_trip == 'beach' %}
Code after module
No code
Block 3:
Code before module
{% else if age >= 30 %}
Code after module
No code
Block 4:
Code before module
{% else %}
Code after module
{% endif %}
This ensures that a single block is displayed while maintaining a flexible structure.
Adding a new condition, whether it relates to the same attribute or another, can be done without impacting the existing conditions.
The following use cases have been implemented for transactional email automations. These templates combine conditions and object personalization loops.
Here, let's say you want to display the list of items canceled for the user's order as follows:
{{item name}} x {{item quantity}} {{item price}}€
Conditions:
Code before module
{% for $articles in trigger_event.order %}
Code after module
{% endfor %}
Data display in the template:
{{$articles.product_name}} x {{$articles.quantity}} {{$articles.total_price}}€
Here is an example of an order validation email automation, which is based on the validated_order event composed of an array of objects with two levels of nesting:
1st level: array of orders objects containing order information
2nd level: array of product objects containing product information
Here, orders can be split up at different times, as the products ordered by a user can be sent by several shippers. In the case of multiple shippers, you would like the orders to be sent one after the other.
Split command: is_splitted attribute set to true
The template will contain two structures, the first with the order information and the second with the products in the orders. As a result, the display condition will be spread over both structures.
1st structure
Code before module
{% if trigger_event.is_splitted %}
{% for $order in trigger_event.orders %}(we browse the array of orders)
Code after module
No code
2nd structure
Code before module
{% for $articles in $order.product %}(we browse the array of lines objects present in the array of orders objects)
Code after module
{% endfor %}(closes the for loop initialized in the 2nd structure)
{% endfor %}(closes the for loop initialized in the 1st structure)
{% endif %}
To test your display conditions in real conditions, you can click on your email, select ‘...’ then Preview as:
Then add a Custom ID and click on Update preview:
The content of your email will appear with the user's personal details instead of the conditions.
Note that the email address you want to preview must be associated with a profile that has values for the conditions to be tested.
You can then test how the email looks, by using the Send test button on the email message window and typing your email address:
The email is immediately sent, with the right conditions applied! ✨


<: strictly less than=: greater than or equal to
<=: less than or equal to
The last element: {{ c.interests|last }}
Object {}: Objects make it possible to group several pieces of information that are linked in a single piece of user data together.
For example, a user's address will no longer be divided into three string attributes (street, zipcode, city):













address : {
"city":"Paris",
"zip_code":"75003",
"street":"43 rue Beaubourg"
}articles :[
{
"name":"Lord of the Rings",
"category":"film",
"price":14.99,
"quantity":1,
},
{
"name":"Brol Vinyle - Angèle",
"category":"music",
"price":31.99,
"quantity":1,
}
]
Product names (e.g., productA.domain.com): This strategy can lead to subdomain proliferation if you have multiple products. We recommend consolidating your email activity around a few stable subdomains.
Configuration
From: sub.domain.com
Return-path: sub.domain.com
From: sub.domain.com
Return-path: x.sub.domain.com
What Must Match
Exact subdomain match
Organizational domain (domain.com)
Advantages
Simpler setup - single subdomain to manage
Easier to troubleshoot delivery issues
Allows custom MX records setup (e.g., to route bounces to your helpdesk tool)
More flexible for complex infrastructure needs
Once you have chosen the sending domain names and made sure they meet all the requirements described above, share the list with your Batch contact:
A Solutions Engineer if an implementation project is ongoing
Or our Custom Care team through support@batch.com
You will first be provided with DNS records that you will need to add on your main domain's DNS zone. Below is an example of what these records might look like:
Here is more context on the records examples:
[name]: This is the name you chose for your subdomaine name (e.g. news, if you chose news.domain.com).
DMARC:
p=quarantine: This is the declared DMARC policy of your subdomain. You can choose between quarantine and reject. Feel free to adjust that value depending on your company's security policy (see more here: )
Aggregated DMARC reports: Feel free to add an address that will be used to receive aggregated DMARC reports.
MX records:
In strict alignment mode, you will use Batch's default MX records, provided to the mailbox providers via eu.sparkpostmail.com.
In relaxed alignment mode, you can either use explicitly Batch's default MX records or use the MX records of your choice.
Now, add your DNS records to your company's DNS zone.
Once done, let your contact at Batch know so we can verify the configuration.






Everything you need to know to evaluate your recipients base hygiene and the way you are collecting new subscribers.
List hygiene refers to the process of maintaining an email recipient list to ensure it remains clean and qualified. The primary objectives of good list hygiene are to prevent delivery issues and optimize the results of marketing campaigns.
Maintaining a correctly managed recipient base reduces the risk of:
Harming your sender reputation, which can result in deliverability issues or blocks from inbox providers
Receiving negative feedback from recipients who may not expect or want to receive your emails anymore (e.g., bounces, unsubscribes, spam complaints)
Facing legal issues due to poor consent collection and data deletion processes
In this article, we will go through:
Solutions to clean your current recipients base
Solutions to keep your recipients base clean
Approaches to qualify your recipients list
Exclude the following types of email addresses from your subscriber base:
Accept-all email addresses: These email addresses may not exist per se, but their domain is set up to accept every email sent to it. While they don't represent a high risk, they tend to reduce engagement generated by your campaigns since no one receives your emails and damage your reputation in the long run.
Disposable email addresses: Disposable email addresses are used temporarily by users to sign up and access a resource/service. They have no value by themselves and may cause hard bounces.
Role-based email addresses: These are generic email addresses created by companies for specific missions or internal services (e.g., , , etc.). Role-based addresses usually generate multiple unsubscribes for the same email address, spam complaints, in addition to generating very low engagement.
By excluding these risky email addresses from your subscriber base, you can maintain a healthy sender reputation and improve overall campaign performance.
In order to check the quality of your current recipients base, you can:
Remove hard bounces: If it's not the case yet, remove all the recipients that returned a hard bounce in the past. See if your current provider can provide a "suppression list" that will match your need.
Remove inactive recipients: Remove recipients who haven't opened a single email in 6+ months.
Use lists of throwable domains: Allows you to exclude domains known to be unreachable, mistyped or with no added value. .
As a sender, you can implement several improvements to your sign-up/subscription form to limit the risk of collecting invalid or risky email addresses.
Ask users to re-type their email address without allowing copy-paste or double-check the email address they just typed.
You can also reduce the risk of errors by helping your users to type the rest of their email address, as follows:
Offer domain suggestions as they type
Auto-complete common domains
Users should only be allowed to use valid addresses, not longer than 256 characters. They must match the following pattern:
You should not allow users to use an email domain that is tied to:
Known typo domains
Disposable email addresses
Role-based addresses
Third-party solutions provide APIs allowing you to check the validity of email addresses. This comes in handy to decide if you should accept an email address.
Offer users the option to sign up using single sign-on options (e.g., Google, Apple, Facebook, etc.) to significantly reduce the risk of collecting invalid or incorrect email addresses. We recommend displaying the single sign-on option first and only offering the "type an email address" option as a secondary choice.
By promoting single sign-on options, you can improve the overall quality of your email list and maintain a healthy sender reputation.
Double opt-in (DOI) is a robust anti-spam technique used in email marketing campaigns to ensure that users validate their subscription to receive emails from your brand.
After users sign up or subscribe to a newsletter, send them a confirmation email asking them to "opt-in" again by clicking a link. Once they have confirmed the subscription, you can store the consent and add them to your subscribers' base.
Double opt-in is legally required in some countries and strongly recommended for all users. This technique offers numerous benefits, including:
Collecting only valid email addresses, reducing the hard bounce rate
Ensuring that users who subscribe really want to subscribe and increase engagement rates
Providing an additional layer of proof that your contacts gave consent to inbox providers and authorities
Subscription bombing or subscription spamming is a significant risk for most senders who have an exposed subscription/sign-up form on their website and apps. Subscription bombing is a malicious practice where attackers subscribe large amounts of email addresses (real or fake) to a list, often using automated scripts.
This can be done by collecting email addresses without permission, which can lead to:
Bounced emails: If the email addresses are no longer active, this may cause a sudden increase in bounces
Spam traps: Some email addresses may be spam traps, leading to reputation issues and potentially harming your sender reputation
Poor engagement: Subscribers added to your list will likely not react to your emails, reducing the engagement rate of your campaigns
Spam complaints
Subscription bombing can significantly harm your email marketing efforts and negatively impact your sender reputation. To prevent this, it's essential to:
Add a reCAPTCHA to your form to limit the risk of getting fake subscribers
Add trap fields, invisible to normal users but visible to bots (e.g., additional checkboxes, fields, etc.). Bots tend to tick checkboxes and fill in fields, which can prove the email address is not from a legitimate subscriber
Monitor your subscription form for unusual activity
Keep an eye on your bounce rate and engagement rates
Inbox providers are increasingly focusing on the quality of a recipient's email address base and engagement metrics. Subscribers are also receiving more and more messages across various channels. In this environment, senders need to reassess their list hygiene strategy to ensure compliance with new constraints.
Leads, newsletter subscribers, and your service users didn't share their email address with you for the same reason.
As a consequence, sending the same emails to very different audiences can generate positive engagement for some and irritation for others. In case you have different types of subscribers, attach a subscription source so you can exclude some categories of subscribers.
We strongly advise against running contests or other strategies to incentivize sign-ups. This approach can have negative consequences, including:
Unengaged subscribers: Many of these subscribers will likely unsubscribe as soon as they can, ignore your content, leave spam complaints, and damage your reputation
Email validity: Some of these subscribers may use email addresses dedicated to contests only. They won't open your emails or will return an inbox full bounce, wasting your time and resources
If you still decide to run a contest for sign-ups, make sure to identify these subscribers and onboard them with special communications, such as:
Welcome emails that set expectations
Targeted content that aligns with their interests
Clear instructions on how to interact with your brand
However, we strongly recommend against using contests or other manipulative tactics to grow your email list. Instead, focus on building relationships with genuine subscribers who are genuinely interested in your content and offers.
Make sure you are exclusively targeting users who are active and expect your emails.
From a technical point of view, this implies:
Sunset recipients who never opened a single email: Remove or deactivate accounts that have never engaged with your emails
Sunset recipients with recurring inbox full issues: Address and resolve issues with users' inboxes being consistently full, as required by inbox providers to prevent bounces and complaints
Unsubscribe or exclude inactive users: Remove inactive subscribers who have not interacted with your content or services for a prolonged period (e.g., 3 months of no usage). This ensures that only engaged and active users remain on your email list
Make sure subscribers always find a way to unsubscribe from your emails. This is key to avoid getting spam complaints, which is worse than a simple unsubscribe:
All marketing emails must include an unsubscribe link in the footer
The unsubscribe link must be visible and easy to understand for the recipient (e.g., "Unsubscribe" vs "If you want to stop receiving emails, click HERE").
If in the footer you have a link to a subscription center subscribers must visit to stop receiving certain emails (e.g., different newsletters, etc.), also add a link to unsubscribe from all marketing emails
Batch will honor the unsubscribe in near real-time. If you handle the unsubscribe on your end, please honor it as soon as possible. Never take more than 24 hours to apply changes. Batch will automatically exclude from your marketing communications users who filed a spam complaint.
By default, Batch includes a list-unsubscribe header to marketing emails, allowing recipients to unsubscribe with a single click.
As a sender, you can be proactive and send an email to your subscribers after 2-3 newsletters without any opens. Simply send an email asking them if they are still interested, allowing them to:
Option A: Confirm they want to keep receiving emails
Option B: Unsubscribe with one click
This will be useful to stop losing engagement on your marketing emails and avoid getting spam complaints.
Accepted rate
>98%
Global bounce rate
<2%
Soft bounce rate
<0.60%
Hard bounce rate
<0.40%
Unsubscribe rate
<0.50%
Spam rate
<0.3% (better if <0.1%)
[name] 3600 IN CNAME eu.sparkpostmail.com.
_dmarc.[name] 3600 IN TXT "v=DMARC1;p=quarantine;aspf=s;"
scphxxxx._domainkey.[name] 3600 IN TXT "v=DKIM1; k=rsa; h=sha256; p=[DKIM KEY]"bounce.[name] 3600 IN CNAME eu.sparkpostmail.com.
_dmarc.[name] 3600 IN TXT "v=DMARC1;p=quarantine;aspf=r;"
scphxxxx._domainkey.[name] 3600 IN TXT "v=DKIM1; k=rsa; h=sha256; p=[DKIM Key]"
[name] 3600 IN MX 10 rx1.eu.sparkpostmail.com.
[name] 3600 IN MX 10 rx2.eu.sparkpostmail.com.
[name] 3600 IN MX 10 rx3.eu.sparkpostmail.com.Dissatisfaction rate
<30%
Email addresses with typo domains: These are email addresses mistyped by legitimate subscribers (e.g., gamil.com instead of gmail.com, etc.). This causes two issues:
Your users cannot receive emails related to your service and newsletters
These addresses will bounce or can be spam traps, causing email reputation issues
If your email is long and may be clipped by some inbox providers, add the unsubscribe link in the top part of your email too
^[^\r\n\t@]+@[A-z0-9\-\.]+\.[A-z0-9]+$











