Is there a service to monitor the bitcoin balance, or do I just have
to make a cron job to query it every second?
I do not know such service. Anyway, you should not give your private keys for any service.
When using sendtoaddress api call, do I have to specify a change
Why do you want to use bitcoin client and api calls for it?
How do other people usually solve this problem?
This is not a “problem”. This is a “task”. You should monitor transactions in the network and push your transactions which sweep the outputs to your address. I can provide you such toolkit, but not for free