I have a script that gets the last snapshot of the source dataset and using the last snapshot of the destination (changes to bookmark on source, as I do not delete these on the dataset) runs the ZFS send / recv command. To retain all daily snapshots, I cycle through them one-by-one, otherwise I would be stuck with hourly and every 15 mins. Looks cleaner on backup destination. Then the script creates bookmarks for next time. If anyone interested I could share, but you’d be better of using sanoid / syncoid.
I have been using ZFS send for a year or so and very happy with it. Restores and tests have worked great, and I have peace of mind knowing that each block’s checksum is checked after sending to ensure no blocks have become damaged.