All the examples I had seen up until this point (I’ve since found a way) talked about manually entering data or tracking based on time.
My experience with manually entering data is I ignore the goal until 23:55 and then put something in so I don’t derail. With tracking time you can just set the timer and do something else and then attribute the time to reading.
I’ve since set up a Zapier integration:
Read book on Kindle
Share reading progress with Goodreads (integration built into Kindle) - only (semi)manual action
Get Zapier to pull in the new Goodreads feed item from RSS
Scrape for % read and book name
Match up book name (if doesn’t exist create a new item) in Google spreadsheet
Add the new read percentage for the book in separate column
Formula in a separate cell sums that column
Run a regular check on that cell for a change in value
If any change push the new value to Beeminder Odometer goal
The rest…