Answers.Body: <p>Better to use SearchKit than Search Builder, which is old and sometimes does strange things. I think you want to search for Contacts with (required) Memberships in the old types and without Memberships in the new types, then you'll get just contacts who only have the old types. Definitely verify before using, NOT IN can be tricky.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-06-13T15:28:59.060Z
Answers.LastActivityDate: 2023-06-13T15:28:59.060Z
Answers.UserDisplayName: Lars SG
Body: <p>We introduced a new set of membership types and are naturally phasing out the old types (they will expire, on a rolling basis, but can not be renewed). We want to send people of the old types a scheduled reminder with a notice to renew at the new levels (X days before expiry), but only if they have not already renewed at the new levels. I thought I could do a Search Builder to make a smart group of all contacts who were &quot;not in&quot; the current levels and restrict it to that, but it is encountering some silly logic error and continued to send them reminders. How would you approach this?</p>
  <p>Recap. Send renewal reminders to old membership types, but only if they have not renewed.</p>
  <p>Thank you. Latest Civi and D7.</p>
  <p>Worst case, I can add text to reminder that says &quot;If you have already renewed, please ignore&quot; but that is annoying.</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-06-09T01:43:09.277Z
Comments.Text: Is the problem in the smart group or in the scheduled reminders? As in, if you check the contacts who received the reminder, are they in the smart group, but they shouldn't be? Or are the contacts not in the smart group, but they are still receiving the reminders?
Comments.UserDisplayName: Lars SG
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-06-09T03:20:43.713Z
Comments.Text: By the way, Search Builder is definitely the old way and it makes sense to use SearchKit for this kind of thing now.
Comments.UserDisplayName: Lars SG
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-06-09T20:02:22.950Z
Comments.Text: I'll try to Search Kit. The search builder criteria just said "not in" the old types. But, the contact was still in the group. The contact had both the old expiring membership type and the new membership type.
Comments.UserDisplayName: Zachary
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-06-09T20:37:18.740Z
Comments.Text: This can be tricky. I think you want to search for Contacts with (required) Memberships in the old types and without Memberships in the new types, then you'll get just contacts who only have the old types. Definitely verify before using, NOT IN can be tricky.
Comments.UserDisplayName: Lars SG
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-06-09T20:55:59.940Z
Comments.Text: how about using the Include/Exclude search option? https://dmaster.demo.civicrm.org/civicrm/contact/search/custom?csid=4&reset=1
Comments.UserDisplayName: petednz - fuzion
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-06-10T01:36:54.793Z
Comments.Text: These are both great suggestions! I'll see what works the best and then comment back shortly and then someone can have an accepted answer for super cool points.
Comments.UserDisplayName: Zachary
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-06-12T22:36:04.353Z
Comments.Text: @LarsSG I used SearchKit with success. If you want to write up a more formal answer, I'm happy to accept it. But, basically I searched for members with a current status and then the old membership types and status in the NOT group. This is essentially what petenz suggested too, I believe?
Comments.UserDisplayName: Zachary
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2023-06-13T19:44:15.143Z
Comments.Text: Great - mine was more of a pre-searchkit approach. Make two groups then just do a (B - A) to get C.
Comments.UserDisplayName: petednz - fuzion
Tags: <civimember><scheduled-reminders>
Title: How to send renewal reminder but only to people who have not bought a new membership type
ThreadText: # How to send renewal reminder but only to people who have not bought a new membership type
  
  (Asked by: username_0 on 2023-06-09)
  
  We introduced a new set of membership types and are naturally phasing out the old types (they will expire, on a rolling basis, but can not be renewed). We want to send people of the old types a scheduled reminder with a notice to renew at the new levels (X days before expiry), but only if they have not already renewed at the new levels. I thought I could do a Search Builder to make a smart group of all contacts who were "not in" the current levels and restrict it to that, but it is encountering some silly logic error and continued to send them reminders. How would you approach this?
  
  Recap. Send renewal reminders to old membership types, but only if they have not renewed.
  
  Thank you. Latest Civi and D7.
  
  Worst case, I can add text to reminder that says "If you have already renewed, please ignore" but that is annoying.
  
  **Tags:** civimember, scheduled-reminders
  
  > **Comments:**
  > **username_1**: Is the problem in the smart group or in the scheduled reminders? As in, if you check the contacts who received the reminder, are they in the smart group, but they shouldn't be? Or are the contacts not in the smart group, but they are still receiving the reminders?  
  > **username_1**: By the way, Search Builder is definitely the old way and it makes sense to use SearchKit for this kind of thing now.  
  > **username_0**: I'll try to Search Kit. The search builder criteria just said "not in" the old types. But, the contact was still in the group. The contact had both the old expiring membership type and the new membership type.  
  > **username_1**: This can be tricky. I think you want to search for Contacts with (required) Memberships in the old types and without Memberships in the new types, then you'll get just contacts who only have the old types. Definitely verify before using, NOT IN can be tricky.  
  > **username_2**: how about using the Include/Exclude search option? https://dmaster.demo.civicrm.org/civicrm/contact/search/custom?csid=4&reset=1  
  > **username_0**: These are both great suggestions! I'll see what works the best and then comment back shortly and then someone can have an accepted answer for super cool points.  
  > **username_0**: @LarsSG I used SearchKit with success. If you want to write up a more formal answer, I'm happy to accept it. But, basically I searched for members with a current status and then the old membership types and status in the NOT group. This is essentially what petenz suggested too, I believe?  
  > **username_2**: Great - mine was more of a pre-searchkit approach. Make two groups then just do a (B - A) to get C.  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_1 on 2023-06-13. Score: 1 | Accepted answer
  
  Better to use SearchKit than Search Builder, which is old and sometimes does strange things. I think you want to search for Contacts with (required) Memberships in the old types and without Memberships in the new types, then you'll get just contacts who only have the old types. Definitely verify before using, NOT IN can be tricky.
  
  
  ---
  
  