How to deal with elimination of duplicate logic vs. cost of complexity increase?
Why not something like...

static void Main(string[] sargs)
{
    try
    {
        var urls = new DirectTrackRestUrls();
        var restCall = new DirectTrackRestCall();
        var logger = new ConsoleLogger();
        Args args = (Args)Enum.Parse(typeof(Args), string.Join(",", sargs));
        if (args.HasFlag(Args.Campaigns))
        {
            GetAndSaveResources(urls.ListAdvertisers, true);
        }       
        if (args.HasFlag(Args.Advertisers))
        {
            GetAndSaveResources(urls.ListAdvertisers, true);
        }
        if (args.HasFlag(Args.CampaignGroups))
        {
            GetAndSaveResources(urls.ListCampaignGroups, false);
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e.InnerException);
        Console.WriteLine(e.StackTrace);
    }
}

void GetAndSaveResources(IList list, bool setAccessId) {
    var getter = new ResourceGetter(logger, list, restCall);
    if (setAccessId)
        restCall.UriVariables.Add("access_id", 1);
    getter.GotResource += new ResourceGetter.GotResourceEventHandler(getter_GotResource);
    getter.GetResources();
    SaveResources();
}