Backups app for Contentful
Software Development
Project overview
ExaGrowth is a digital transformation agency that builds websites, apps and AI products for clients in five countries. Many of those websites are powered by Contentful, a headless CMS where all of a site's pages, articles and images live. ExaGrowth needed a safety net for that content: a way to back up a whole Contentful space automatically, and to roll it back to an earlier point in time if something went wrong.
I designed and built the Backups app for Contentful from scratch, both the app that runs inside Contentful and the backend behind it, in two to three weeks.
At a glance
Client: ExaGrowth
Industry: Digital Agency & Content Management
My role: Full-Stack Developer
Scope: Contentful app (frontend) and backup service (backend), built from scratch
Timeline: 2–3 weeks
Tech stack: React, Contentful App Framework, Forma 36, Node.js, Express, MySQL, AWS S3, cron
Impact
One-click backups of an entire Contentful space
Automatic backups every 6, 12, 18 or 24 hours
One-click restores to any earlier backup
A fresh safety backup taken before every restore
Built end to end in 2–3 weeks
The problem
One wrong click can wipe out months of content
In a CMS, everything lives in one shared space. An editor can accidentally delete an entry, a bulk change can overwrite hundreds of pages, or a content model change can break things across the whole site. When that happens, the team needs to get back to how things were, fast.
No undo for a whole space: Contentful keeps versions of individual entries, but there was no simple way to take a snapshot of the entire space and restore it.
Developer-only tools: Contentful's export and import tools run from the command line, so editors and project managers couldn't use them on their own.
Backups depended on memory: Without automation, a backup only existed if someone remembered to make one.
Nowhere safe to keep them: Exported files ended up on individual laptops instead of in secure, central storage the agency controlled.
The approach
The goal was a tool that anyone on the team could trust without reading a manual. Four principles guided the build:
Live where the content lives. The app runs inside Contentful itself, so there's no separate tool to log in to.
Set it and forget it. After a one-time setup, backups happen on schedule with no one needing to remember.
Your data, your storage. Backups go to the client's own AWS S3 bucket, not to a third-party service.
Make restores safe. Rolling back should never make things worse, so every restore starts with a fresh backup of the current state.
What was built
A two-minute setup inside Contentful
Once the app is installed in a space, a configuration screen asks for the AWS details of the storage bucket, a Contentful access token and how often backups should run: every 6, 12, 18 or 24 hours. Before saving, the app checks that it can actually reach the bucket with those details, so a typo is caught straight away rather than when a backup fails days later.
Backups and restores in one click
The Backups page lists the most recent backups with the date each one was created. Creating a new backup takes one click. Restoring an older one takes one more: the app first saves a fresh backup of the space as it is now, then imports the chosen backup. If the restore turns out to be the wrong call, the team can simply restore the backup taken moments before.
Automatic backups on a schedule
On the backend, a scheduled job runs every hour. It finds every space whose next backup is due, exports all of its content, uploads it to that space's S3 bucket and books the next backup based on the chosen frequency. Each backup file is named with its date and time, and every backup is logged, so there's always a clear record of what was saved and when.
A small, focused backend
I kept the backend deliberately simple: an Express API with three actions, to save the settings, create a backup and restore a backup, plus the scheduled job. Exports and imports use Contentful's official export and import libraries, so a backup captures the full space, including content types, entries, assets and locales, in the same format Contentful's own tools use.
Under the hood
For technical readers, a summary of how it fits together:
Frontend: A React app built on the Contentful App Framework, with a configuration screen and a full-page app location, styled with Contentful's Forma 36 design system
Backend: Node.js and Express with save, export and import endpoints
Backups: contentful-export and contentful-import, with timestamped JSON snapshots stored in AWS S3
Scheduling: An hourly cron script that runs every backup due that hour and schedules the next one
Database: MySQL tables for each space's backup settings and a log of every backup
Validation: An S3 bucket access check before any settings are saved
Deployment: Contentful app bundles uploaded with the Contentful app scripts, including a CI-ready upload command
Results
In two to three weeks, ExaGrowth went from manual, developer-only exports to a backup system that runs itself and lives right inside Contentful.
Peace of mind by default. Every connected space is backed up automatically on a schedule the team chooses.
Mistakes are reversible. Any earlier version of a space can be restored in one click, with a safety backup taken first.
No command line needed. Editors and project managers can back up and restore content themselves.
Data stays in-house. Backups live in the client's own AWS account, under their control.
Have a project like this?
Let's talk ↓