anchor.diff:          'true' ->
               lager:debug("IAM onbill crawler saving account ~s as dirty", [AccountId]),
               kz_services:save_as_dirty(AccountId),
  -            'ok';
  +            {'ok', 'marked_dirty'};
           'false' ->
  -            'ok'
  +            {'ok', 'no_need_to_mark'}
       end.
  
positive.code: 
  -spec handle_info(any(), state()) -> handle_info_ret_state(state()).
  handle_info('crawl_accounts', _) ->
      _ = case kz_datamgr:get_results(?KZ_ACCOUNTS_DB, ?CB_LISTING_BY_ID) of
              {'ok', JObjs} ->
                  self() ! 'next_account',
                  {'noreply', kz_util:shuffle_list(JObjs)};
              {'error', _R} ->
                  lager:warning("unable to list all docs in ~s: ~p", [?KZ_ACCOUNTS_DB, _R]),
                  self() ! 'next_account',
                  {'noreply', []}
          end;
  handle_info('next_account', []) ->
      kz_couch_compactor:compact_db(<<"services">>),
      NextDay = calendar:datetime_to_gregorian_seconds({erlang:date(),{0,45,0}}) + ?SECONDS_IN_DAY,
  
negative.code: %%% Internal functions
  %%%===================================================================
  
  -spec maybe_mark_account_dirty (ne_binary()) -> {'ok', 'marked_dirty'}|{'ok', 'no_need_to_mark'}|{'error', _}.
  maybe_mark_account_dirty(<<AccountId:32/binary>>) ->
      case kz_datamgr:open_doc(?KZ_ACCOUNTS_DB, AccountId) of
          {'ok', AccountJObj} ->
              case not kz_doc:is_soft_deleted(AccountJObj)
                       andalso kz_datamgr:db_exists(kz_util:format_account_id(AccountId, 'encoded'))
              of
                  'true' ->
                      process_account(AccountId);
                  'false' ->
                      {'error', 'deleted_or_no_db'}
              end;
          _ ->
              {'error', 'invalid_accounts_doc'}
      end;
  maybe_mark_account_dirty(_) ->
      {'error', 'invalid_doc_id'}.
  
  -spec process_account (ne_binary()) -> 'ok'.
  process_account(AccountId) ->
  