Bot that selects web reviews based on spreadsheet entries
I will only comment on the "getting rid of the repeating ifs part".  A way to avoid writing the same condition in different places is to move the check entirely into a separate piece of code.  Some may refer to this as "state pattern".  Below is an example:

class StateExample(object):

    class State(object):

        def __init__(self, example):
            self.example = example

        def __str__(self):
            return self.__class__.__name__

    class Cities(State):

        def query_limits(self):
            self.example.do_one_thing(self)

    class Reviews(State):

        def query_limits(self):
            self.example.do_something_else(self)

    def __init__(self):
        self.state_factories = {
            'cities': self.Cities,
            'reviews': self.Reviews
        }

    def do_one_thing(self, state):
        print 'doing one thing with %s' % state

    def do_something_else(self, state):
        print 'doing something else with %s' % state

    def interact(self, city_or_review):
        self.state = self.state_factories[city_or_review](self)

    def interact_more(self):
        self.state.query_limits()


And an example usage, to illustrate the usage:

&gt;&gt;&gt; example = StateExample()
&gt;&gt;&gt; example.interact('cities')
&gt;&gt;&gt; example.interact_more()
doing one thing with Cities
&gt;&gt;&gt; example.interact('reviews')
&gt;&gt;&gt; example.interact_more()
doing something else with Reviews
&gt;&gt;&gt; 


You may or may not need all of the machinery here.  The important part is to notice how this would be equivalent to testing repeatedly for the same condition inside interact and interact_more, which in the example above happens only once.

You can read more about this technique here: https://en.wikipedia.org/wiki/State_pattern

As an aside: it is not necessary to use classes and objects to achieve the same goal, but I want to keep this answer short.