Elixir has concurrency built in as an easy to use concept. There is the concept of processes running within the runtime, which is called the BEAM. Think of the runtime as a mini OS where you can create lightweight processes as needed to do things asynchronously. You can use a simple Task module[0] to do things async or implement GenServer[1] which is a process running and has state.
An example is calling an API that has a paginated response where it indicates the number of pages (like ?page=X in GET request), you can async call each page and accumulate the responses using a map_reduce function[2]. You could fire up like 1000 (or 10k or as many as you like really) of these processes calling an API with different params/creds and handling paginated responses concurrently, each with their own state. I found that Elixir will let you quickly exhaust any rate limit budget/threshold you have in a scenario like this, that is more the limiting factor.
[0] https://hexdocs.pm/elixir/1.13.4/Task.html