pipeline.py: use recursive crawl