You can track it easily by watching the chain transactions and look for contract events regarding AEX-9 and only fetch the balances for the corresponding accounts.
Statically (dry-run) calling the balances()
will not generate any extra onchain data, you can call this without any limits.