I didn't bother with async as I assumed the rate limit would make it redundant, but maybe it's worth doing and then handling the rate limit explicitly