Since you require a proactive scan, Scheduled Apex would be the recommended approach.
You could have a hidden Date
field on Account
called FieldsLastUpdated__c
Have a workflow that fires each time the record is created or edited, check if the fields you're interested in are updated (using ISCHANGED()
) and if they have been updated, set this date to TODAY()
This now signifies that those fields were updated on the Date stamped in the FieldsLastUpdated_c
Have a simple batch class that runs each night, and scans for Account records where FieldsLastUpdated__c < Date.today().addDays(-14)
i.e. 2 weeks using the QueryLocator
Now in your execute cycle through these Account and for each create an email for the owner, and the finally bulk send.