public void Execute(IJobExecutionContext context)
        {
            var    dataMap     = context.JobDetail.JobDataMap;
            string apiKey      = dataMap.GetString("APIKey");
            int    dayInterval = dataMap.GetIntValue("dayInterval");

            //Check API Key exists
            if (string.IsNullOrWhiteSpace(apiKey))
            {
                return;
            }

            //Check all the custom fields have been created for the SendGrid marketing campaign.
            bool fieldsExist = SyncHelper.CheckCustomFields(apiKey);

            if (!fieldsExist)
            {
                return;
            }

            var rockContext = new RockContext();
            var previouslySyncedPersonAliasIds = new PersonAliasHistoryService(rockContext).Queryable().AsNoTracking().Select(a => a.PersonAliasId);
            var notYetSynced = SyncHelper.FindNotYetSyncedPersonAlises(rockContext, previouslySyncedPersonAliasIds);

            var historicSyncMarker      = RockDateTime.Now.AddDays(-dayInterval);
            var needReSyncPersonAliases = SyncHelper.FindResyncCandidates(rockContext, historicSyncMarker);

            int synCount    = SyncHelper.SyncContacts(notYetSynced, apiKey);
            int reSyncCount = 0;

            if (needReSyncPersonAliases.Any())
            {
                reSyncCount = SyncHelper.SyncContacts(needReSyncPersonAliases, apiKey, true);
            }

            context.Result = string.Format("{0} people synced for the first time, {1} people updated", synCount, reSyncCount);
        }