You can use a script written by fracai on the Freenas forums. The script is hosted on github, it's called zfs-rollup. You only need the rollup.py file. Links at the end.
I've used it for years and it works very well. You specify a few parameters on the comandline, 1) the prefix (filter) for the snapshot names it should look to delete, 2) the Dataset you want it to look under (it will recurse), and 3) the intervals for each that you want to keep.
The below example will remove snapshots prefixed with 'auto', under the BACKUP/nas dataset, that do not meet 7 daily, 4 weekly, and 3 monthly timeframes.
rollup.py -i daily:7,weekly:4,monthly:3 -p auto -r BACKUP/nas
You can cron that up in the Freenas GUI without issue. I personally specify different cron jobs for different datasets so I can keep a varying amounts of backups based on my data types.
Freenas forum/resource describing the scripts intent
Github source for the script