Hi @lcdelgado
For easy explanation, i have developed a sample flow along with a list (which can be considered as AED list)
List

It has two products with their respective expiration date.
Now the flow is designed like this

Let's go through each step one by one,
1. Use get items to get all items from AED list [ remember, by default, get item can pull upto 100 items by default, but you can change via trigger settings :)]
2. Next loop through each item, inside the loop, follow below steps
2a. Use condition with condition like below

expression:
div(sub(ticks(formatDateTime(items('Apply_to_each')?['ExpiryDate'])),ticks(formatDateTime(utcNow(),'yyyy-MM-dd'))),864000000000)
this expression calculates the difference between dates in terms of days
if it is equal to 30, in yes branch we can set to send an email.
Email format i have used


So by single flow you can send expiration emails for different products 🙂
Hope this helps 🙂
Mark it as solution if it resolves your query