Hi @Bones52,
Do you mean that the flow would fail when the Contract End column of an item is empty?
If you want to skip the item whose Contract End column is empty within your flow, you could consider take a try to add a condition to check if the Contract End column is empty. If the Contract End column is empty, don't send an expiring email to you.
I have made a test on my side and please take a try with the following workaround:

- Within "Apply to each" action, add a Condition, click "Edit in advanced mode", type the following formula:
@empty(items('Apply_to_each')?['Contract_x0020_End'])
or
@empty(item()?['Contract_x0020_End'])
- Within "If/no" branch of Condition, add a "Condition 2" action, click "Edit in advanced mode", type the following formula:
@less(formatDateTime(item()?['Contract_x0020_End'], 'yyyy-MM-dd'), formatDateTime(addDays(utcNow(), 30), 'yyyy-MM-dd'))
Within "If/yes" branch of Condition 2, add a "Send an email" action.
Please take a try with above solution that I provided, then let me know if it could solve your problem.
Best regards,
Kris