factor out a fetcher and parser