crawl() will be our public runner