Spreadsheet as a service
August 2025
As an author of a content management system, sometimes you don’t have the time to wait for a development team to build an API. Even when they set up the API endpoint, every update requires a database change request or some synchronization job to occur.
What if, as an author, you could create your own JSON output without the complexities of building out an API?
To learn by doing, I embarked on a proof of concept: I wanted a page to track my progress through Minnesota’s State Parks. I needed to capture the location, title, and whether or not I had visited each park. So, I quickly coded a little app.
The results ended up here:
https://www.craigantolick.com/mn-state-parks
The Google Sheet manages all the content for the service:
Once published, it is cached and performant:
https://www.craigantolick.com/parks.json
AEM Edge Delivery allows you to use multiple sheets with query parameters to pull in specific content. You can access them by appending query parameters such as ?sheet=visited, ?sheet=yet, or ?sheet=visited&sheet=yet.
A wonderful feature is the ability to create Google Sheet functions to build out queries, enabling centralized management.
In the image below, I have a QUERY function that filters data from columns A-O in "Sheet" to show only rows where column O equals TRUE. It returns all columns for the matching rows while treating the first row as headers. This setup allows me to reuse content and manage it from one place.
Since I have the sheet named shared-visited, I can use the query parameter ?sheet=visited to retrieve the relevant content:
https://www.craigantolick.com/parks.json?sheet=visited