first_coordinator = YelpApiFirstPassCoordinator(api_interfacer = api_phone_interfacer, start_read = offset)


    # first pass

    extracts = first_coordinator.read_next_n(n = n_pull)
    matched_extracts = ByPhoneExtractMatcher().match_all(extracts)

    if create_table:

        yelp_restuarants_tb.create_table()
        yelp_categories_tb.create_table()
        yelp_neighborhoods_tb.create_table()

    yelp_restuarants_tb.add_records(matched_extracts)
    yelp_categories_tb.add_records(matched_extracts)
    yelp_neighborhoods_tb.add_records(matched_extracts)            

    # second pass

    api_address_interfacer = YelpApiAddressInterfacer(limit = limit, sort = 1, report_interval = report_interval)
    second_coordinator = YelpApiSecondPassCoordinator(api_interfacer = api_address_interfacer, start_read = offset)
    
    extracts = second_coordinator.read_next_n(n = n_pull)
    matched_extracts = ByAddressExtractMatcher().match_all(extracts)


    yelp_restuarants_tb.add_records(matched_extracts)
    yelp_categories_tb.add_records(matched_extracts)
    yelp_neighborhoods_tb.add_records(matched_extracts)