NetSendo
Platform Updates

NetSendo v2.11.3: Birthday & Date Automations Fixed

NetSendo Team6 min read

Birthday emails are some of the best-performing messages in email marketing. They are personal, they arrive at the right moment, and once you set them up they need no further work. That only holds if the automation actually runs. In NetSendo versions before v2.11.3, birthday, subscription-anniversary and "date reached" automations never fired.

This maintenance release fixes the whole date-trigger pipeline from start to finish. It also fixes a CRM follow-up bug that filled your logs with an error every five minutes. If you use date-based automations or CRM sequences, this update is important for you.

TL;DR: NetSendo v2.11.3 fixes birthday, anniversary and "date reached" automations. Birthdays now come from a custom date field, list-limited rules now match, and each "date reached" rule runs only on its own date, once per subscriber. CRM follow-up enrollments for deleted contacts or sequences are now cancelled automatically instead of failing forever.

🚀 What's New in v2.11.3

Date-Based Automations Now Actually Run

A background job checks date triggers every minute. Before this release, it requested a contactList relation that the subscriber model does not have. Every run threw this error:

DateTriggerService error: Call to undefined method App\Models\Subscriber::contactList()

On one client installation, this error appeared about 60 times an hour. Fixing that error alone would not have been enough. The queries behind it read a birth_date column and a custom-field slug that do not exist. The birthday condition was also joined with OR, so it was not limited to the account. Think of a car with a dead battery that also has no fuel and a broken steering wheel: a new battery alone would not get you anywhere.

Version 2.11.3 fixes all of these problems:

🎂

Birthdays from Custom Fields

The birthday is read from a custom field of type date whose name or label mentions it (birth…, urodzin…).

🎯

Correct Audience

Only deliverable subscribers of the account who are active members of at least one of its lists are included.

📋

List-Limited Rules Match

Date events now carry the subscriber's active lists, so rules limited to a list finally fire.

📅

One Date, One Run

Each "date reached" rule runs only on its own date, and only once per subscriber.

How Birthdays Are Detected

Subscribers in NetSendo have no built-in birthday field. The birthday now comes from a custom field that meets these conditions:

  • It is of type date.
  • Its name or label mentions a birthday, for example birthday, birth_date or data_urodzin.
  • Values are stored as YYYY-MM-DD (e.g. 1990-04-17) or DD.MM.YYYY (e.g. 17.04.1990).

The subscriber's age is calculated from the same field, so you can use it in birthday messages.

⚠️ Important: If you don't have such a custom field, birthday automations have no one to run for. Make sure the field exists and that your signup forms or imports fill it in.

List-Limited Rules and "Date Reached" Fixes

When you schedule a message for "the subscriber's birthday" or "the anniversary", NetSendo creates a rule tied to a list. Previously, date events did not include the subscriber's lists, so these rules never matched. The events now include the subscriber's active lists.

"Date reached" rules also had a scheduling bug. Whenever any rule in an account was due, the job ran every "date reached" rule in that account. Rules set for other days ran too, and two rules on the same day triggered each other twice. Now each rule runs on its own date only, once per subscriber.

CRM Follow-Up Sequences for Deleted Contacts

CRM contacts are soft-deleted, so their sequence enrollments stayed active. Every five minutes, crm:process-follow-ups tried to process them, failed with "Attempt to read property "id" on null" and reported a failure. This never stopped on its own.

In v2.11.3:

  • ✅ Enrollments of deleted contacts are cancelled automatically.
  • ✅ Enrollments whose sequence no longer exists are cancelled too.
  • ✅ Cancelling no longer collides with an earlier cancelled enrollment of the same contact and sequence.

💼 Benefits & Use Cases

🛒

E-commerce: Birthday Discounts

Collect the date of birth at checkout or signup and store it in a date custom field. NetSendo can then:

  • Send a personal discount code on the customer's birthday
  • Target only customers on your "VIP" list with a premium offer
  • Use the subscriber's age to adjust the message
🚀

SaaS: Anniversary Retention

Subscription-anniversary automations help you reduce churn:

  • Thank users on the anniversary of their signup
  • Highlight features they haven't tried yet
  • Offer a renewal discount shortly before the annual plan ends using a "date reached" rule
🏢

Agencies: Clean CRM Pipelines

Agencies managing many clients' CRM data often delete contacts in bulk. Follow-up sequences for those contacts are now cancelled automatically, so scheduler logs stay clean and real failures are easy to spot.

🛠️ Step-by-Step Guide

  1. Back Up and Update

    Back up your database, then pull the latest image and restart your containers:

    docker compose pull
    docker compose up -d
  2. Create or Check the Birthday Field

    In your custom fields settings, make sure a field of type date exists and that its name or label contains "birth" (or "urodzin" in Polish), for example "Birthday" or "Data urodzin".

  3. Check Your Data Format

    Check that stored values use YYYY-MM-DD or DD.MM.YYYY. If your imports use other formats, such as MM/DD/YYYY, convert them first.

  4. Review Your Date Automations

    Open your birthday, anniversary and "date reached" rules. List-limited rules will now match, so check the content and target lists before they start sending.

  5. Check the Logs

    After a few minutes, confirm that the DateTriggerService error and follow-up errors no longer appear. Adjust the service name to match your setup:

    docker compose logs --since 15m | grep -E "DateTriggerService|Follow-up processing error"
ℹ️ Note: Automations that were silently broken may start sending right after the update. Review your messages first so subscribers don't receive outdated content.

Common Pitfalls

  • Field type is text, not date: the field won't be detected. Change the type or create a new date field.
  • Unclear label: a field named "DOB" won't match. Rename it to include "birth".
  • Inactive list membership: subscribers who aren't active members of at least one list are skipped.

🎯 Expert Tips

1
Use One Birthday Field

Keep a single date field for birthdays. Several similar fields make your data harder to manage and harder to keep consistent across imports.

2
Test with a Seed Subscriber

Add a test subscriber with today's date as their birthday and an active list membership. Confirm that the automation fires before you rely on it in production.

3
Monitor Your Scheduler

Set up an alert for repeated errors from scheduled commands. Problems like this one are easy to miss when they don't stop the app.

4
Respect Privacy

Date of birth is personal data. Collect it only with clear consent and say why you need it. Because NetSendo is self-hosted, this data stays on your own infrastructure.

✅ Conclusion

NetSendo v2.11.3 is a small release with real impact. It brings back some of the most valuable automations in email marketing:

  • Birthday, anniversary and "date reached" automations now run correctly.
  • Birthdays come from a date custom field, and the age is calculated from it.
  • List-limited rules match, and "date reached" rules run once, on their own date.
  • CRM follow-ups for deleted contacts or sequences are cancelled cleanly.

Update today, check your birthday field and review your date-based campaigns. Learn more in our documentation or explore the available integrations.

Ready to Celebrate Your Subscribers?

Update to NetSendo v2.11.3 and get your date-based automations running.

#automation#birthday-emails#crm#bug-fix#custom-fields#release-notes
Share