Since you require a proactive scan, Scheduled Apex would be the recommended approach.
You could have a hidden
Date field on
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
This now signifies that those fields were updated on the Date stamped in the
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.