Assuming that the api supports pagination a solution couldbe like;
- create a process queue mechanism (see appstore) for the 50k of data, whereby each queued action retrieve 1k over the api or per city (or what your system could handle) and persist it to your db, whereafter you can do your own custom processing
You could also try retrieving the cities data via OData. That technique can usually handle a larger dataload.