Changelog

changelog

Every week we summarize what happened in Ecomail. New features, minor and major improvements or bug fixes.

Fixes for forms, campaign API filtering, click statistics and the performance chart

Fix for filling in duplicated preference groups in a form, fix for filtering in the campaign listing API endpoint, fix for unsubscribes being counted in click statistics, and fix for the campaign performance chart.

FIX

Forms: duplicated preference groups can be filled in independently

If a form contained a preference group created by duplicating another group, the two groups could not be filled in independently ‑ any change to the copy was written back to the original group and vice versa. Preference groups now behave independently in forms regardless of whether they were created by duplication.

FIX

API: campaign listing filters by date correctly

The GET /campaigns endpoint returned no results when filtering by the updated_at parameter, because it compared the date for an exact match including time. At the same time, the date_from and date_to filters operated on a column that was not populated for campaigns, so some campaigns were silently missing from the results. Filtering by date now returns the correct campaigns, and the response also includes a created_at field.

FIX

Automations: unsubscribes are no longer counted as clicks

Clicking the unsubscribe link in an email from an automation was counted among clicks, which skewed the click rate and made it impossible to accurately evaluate performance. Unsubscribes are no longer counted in click statistics.

FIX

Campaigns: the performance chart shows correct data

The campaign performance chart did not match the actual delivery and open data ‑ the timing of the first events was shifted, and the open counts both per hour and in total were lower than reality. The chart now shows the correct values at the correct time.

Automation unsubscribes in activities, granular trigger and fixes

New overview of contacts unsubscribed from automations in activities, granular Contact update trigger conditions for preference groups, fix for the verification email sent when manually adding a contact, and fix for the active contact recalculation.

IMPROVEMENT

Automation activities: overview and export of automation unsubscribes

The Unsubscribed tab in automation activities now has a toggle between two unsubscribe sources ‑ From email (unsubscribed via the link in the email) and From automation (unsubscribed by an automation step). The record count is shown for each source. The main tab shows their total sum. We also fixed a bug where the Unsubscribed tab showed a non‑zero count but the table and export were empty. Both views now display the correct data and can be exported separately.

IMPROVEMENT

Contact update trigger: conditions at the level of a specific preference

The Contact update trigger now lets you react to a change in a specific preference group, not just any change to a contact's preferences. Preferences are shown in the trigger in a clear tree structure (group ‑> category), and for each one you can choose a condition: any change, change to a specific value, transition from empty to filled in, or from filled in to empty. The automation therefore fires only on the change you're actually targeting, without needing to add further condition steps.

FIX

Contacts: manually adding a contact no longer sends a verification email

When adding a contact with the Add contact button in the contact list, the contact was set as unconfirmed and sent a verification email (double opt‑in). Manually adding a contact by the user now works the same as an import ‑ the contact is subscribed right away and no verification email is sent.

FIX

Contacts: the active contact count matches reality

After bulk contact operations (for example deletion and re‑import), the active contact count in the admin and in the overview could remain lower than the actual state. The active contact count is now recalculated correctly.

New unassigned templates filter, individual notification fix and API

New unassigned templates filter in the overview, fix for individual subscribe and unsubscribe contact notifications, fix for the bell notification when the contact limit is exceeded, new sGTM tag version and two API fixes.

IMPROVEMENT

Templates: new Unassigned filter in the overview

The templates overview now has an Unassigned item in the dropdown menu. It shows only templates that are not assigned to any folder. The item displays the count of such templates and the selection stays active even after refreshing the page. Users with many templates can easily find and organise templates outside the folder structure.

FIX

Contacts: individual notifications can be set up separately

For individual subscribe and unsubscribe contact notifications, the notification was only sent when both addresses were filled in at once. Now it's enough to fill in just one of them ‑ the subscribe notification address separately, the unsubscribe one separately, or both together. The notification is sent based on which addresses are filled in.

FIX

Campaigns: the bell shows the correct reason for non‑delivery when the contact limit is exceeded

Plan‑based accounts whose sending was blocked due to exceeding the contact limit were incorrectly shown a message about insufficient email credits in the bell notification. Now the correct information is shown ‑ that the number of contacts exceeds the plan limit, with a recommendation to upgrade the plan or reduce the number of active contacts.

IMPROVEMENT

Server‑side GTM: new version of the Ecomail tag

We've released a new version of the Ecomail tag for server‑side Google Tag Manager. We fixed the data assembly when unsubscribing a contact. For unsubscribing to work correctly, the Update existing option must be enabled in the Data about user section of the tag template.

FIX

API: creating an already existing domain returns a readable error

The POST /domains endpoint returned a generic 500 error with an HTML response when attempting to create a domain that already exists in the account. It now returns status code 422 with a readable JSON body that clearly states the domain already exists.

FIX

API: overly long web event parameters are trimmed instead of failing

The web events endpoint (tracker/events) could fail if an incoming parameter exceeded the length allowed by the database. The value is now automatically trimmed to the allowed length and returned in that form in the response, so the request completes without an error.