Evernote Family Remembers

On long car journeys one of the favourite games for my grandaughter to play is something she calls “family remembers”. What she wants is for us to tell her interesting stories from our family past and mainly from our son, her father, and her uncle. These stories are all taken from memory and made me wish that I had recorded them somewhere for future prosperity. This in turn led me to start collecting interesting stories about my grandchildren and recording them in Evernote.

I thought that it would be nice to be able to turn these little stories locked away in Evernote into something that I could share with all the family and so “Evernote Family Remembers” was born.

To PDF or not to PDF, that is the question

A while back I wrote a script that allowed me to export my WordPress blog posts to a PDF file and, initially, I thought I could use the same route for this project. The reason I thought that the same might be possible is that Evernote under the hood uses a form of HTML to store notes. The format is called ENEX but if you look at the following, slightly modified, snippet you will see that it has HTML content within it.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-export SYSTEM "http://xml.evernote.com/pub/evernote-export4.dtd">
<en-export
  export-date="20250526T073318Z"
  application="Evernote"
  version="10.138.6">
  <note>
    <title>Check-in at The Plough Inn</title>
    <created>20250524T125446Z</created>
    <note-attributes> </note-attributes>
    <content>
      <![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
        <!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
        <en-note>
          <div style="display:none;--en-chs:&quot;eyJ...9fQ==&quot;"> </div>
          <div>Checked in to <a href="http://foursquare.com/v/4b291e9cf964a5201c9924e3" rev="en_rl_none">The Plough Inn</a> on May 24, 2025 at 01:01PM.
          </div>
          <div> </div>
          <img src="https://ifttt.com/map_image?lng=-1.7246&amp;lat=51.52196&amp;zoom=18&amp;size=640x640&amp;scale=2x"/>
          <div> </div>
          <div> </div>
          <hr/>
          <div>
            <br/>
          </div>
        </en-note>
      ]]>
    </content>
  </note>
</en-export>

My initial version once again used FPDF to take my raw html and export it to pdf. However, I quickly discovered that as images in Evernote are embedded, and FPDF doesn’t seem to be able to deal with that it wasn’t going to be possible. Well, not easily at any rate.

Having abandoned FPDF I decided that the simplest approach would be to write out the file as HTML and then use the browser’s native save to PDF function to get the result I desired.

Not so fast!

Turns out that HTML is designed for output on screen and not designed for print – who knew! For example, getting titles in headers and page numbers in the footer is more challenging that it would be in, say, Word. In the end, what I did was manually keep a note of the page and write the number out to the bottom of every page but it was a real pain. Also, handling images that might go over a page boundary was a nightmare.

Evernote API

In addition to the formatting and output issues I outlined above I face a slightly more challenging issue in the form of the Evernote API.

But first, some background

In early 2023, the note-taking and productivity platform Evernote was acquired by Bending Spoons, an Italian app development company known for mobile-focused products such as Splice and Remini. This acquisition came after years of stagnation and financial instability for Evernote, which had struggled to maintain its early lead in the productivity space amid increasing competition from platforms like Notion, Microsoft OneNote, and Apple Notes. Evernote’s user base remained loyal but was shrinking, and the company had undergone several leadership changes and layoffs prior to the sale. For Bending Spoons, the acquisition represented an opportunity to revitalize a well-known but underperforming brand, leveraging its own technical and product development expertise to modernize and streamline the platform.

Since Bending Spoons took over Evernote, the app has undergone a significant technical overhaul aimed at improving performance, stability, and user experience. One of the most notable changes has been a complete rebuild of the app’s underlying infrastructure, replacing legacy code with a modern, unified codebase across all platforms. This shift has resulted in faster sync speeds, fewer crashes, and a more consistent experience between desktop and mobile. Additionally, Bending Spoons has introduced a range of usability improvements, including enhanced search functionality, a more responsive editor, and streamlined navigation. These updates reflect the company’s mobile-first development philosophy, bringing Evernote more in line with modern productivity tools while laying the foundation for future features and scalability.

And now, the bad news

My personal view on the changes are that they have been largely positive. The app has received regular updates in the few years since the Bending Spoons acquisition each bringing both new functionality as well as stability improvements. This has also come with a shift toward more aggressive monetisation — including limiting free-tier functionality.

What it has not come with is any changes to the accompanying API which remains riddled with bugs and warnings. The most recent commit was five years ago and most of it is nine years old. A lot has happened in that time – versions of PHP have been released, Evernote has moved from the legacy client to V10, there’s a new note database.

I can understand why Bending Spoons have prioritised the client over the SDK but not making any changes to it means that you will run into issues such as this:

Fortunately, some kindly soul has posted a fix to this particular issue which you can find here. You MUST patch the Evernote SDK with this fix before your code will work.

If you do manage to get past the bugs and warnings then the next challenge are the low API rates assigned to your API key by Evernote. Initially, my key was allowed to make 60 requests per hour – yes sixty. After some to and fro with Evernote support mine was doubled to 120 requests. To put that into some sort of context BlueSky allows 1,666 writes an hour and a maximum of 3,000 reads per five minutes (assuming that you don’t do any writes). The icing on the cake is that there is no way of telling how close you are to the limit until you have breached it and have to sit quietly until your hour is up!

As I said, I understand the rationale for prioritising the client over the API, but with the API as it is, it is discouraging developers from making extensions to Evernote. Maybe this is by design, but I doubt it. I can only hope that Bending Spoon do turn their attentions to the API soon.

Where’s the code?

At this point I would normally point you towards the code for the project but I’m not going to in this case for a couple of reasons:

  1. this is such a niche project that I can’t imagine it appealing to anyone else; and
  2. formatting to HTML is so awful I really wouldn’t recommend it!

So, if you do want the code it is available on request. I don’t expect any callers.

Leave a Reply

Your email address will not be published. Required fields are marked *