You can use Duplicati, Duplicacy, restic, just rclone or uplink to upload a compressed zfs snapshots for example (TrueNAS).
It’s not difficult to use existing bindings, but requires either use a different tool, which already have a native integration (like mentioned above), or implement your own.
In case of S3 you likely do not need to code anything, just change a few config values.