Enterprise Project Exports
The Project Export feature allows Enterprise customers to export all content and assets from their DatoCMS project to their own AWS S3 bucket. This export provides a structured snapshot of your data in JSON format, along with all uploaded assets.
Our ISO 27001 certification ensures that our architecture incorporates internal backups, delivering a dependable safeguard against data loss. In other words, you can be confident that we adhere to best practices for keeping your data secure.
This Enterprise functionality serves as an additional layer of protection to ensure your safety and should be utilized as a last resort.
Key Points to Consider
Enterprise Only: This feature is available exclusively to Enterprise customers.
Not a Backup Solution: The export does not offer a one-click restoration process.
Primary Environment Only: Only the primary project environment is included in the export.
Automated and Scheduled: Exports occur on a predefined schedule, with a minimum frequency of once per month and a maximum of once per day.
AWS S3 Storage Required: Customers must configure their own S3 bucket to receive the exported data.
What is Included in the Export?
The exported data includes:
Schema Models: Fields and fieldsets.
Schema Blocks: Block definitions and fields.
Records: Current and published versions, including block records.
Uploads: Metadata and references for uploaded assets.
Project Settings: Locales, SEO settings, workflows, and installed plugins.
Asset Files: All uploaded files from the media area.
JSON Snapshots vs. Asset Syncing
While JSON snapshots are periodic and remain unchanged once created, assets are simply synced to their latest versions in the same directory every time. This is why bucket versioning is recommended—if an asset is removed from the project, it will also be deleted from the bucket. However, with versioning enabled, you can still retrieve previous versions of deleted assets.
What is NOT Included?
The export does not include:
Record revision history
API tokens, webhooks, and build triggers
Collaborators, roles, and permissions
Audit logs and usage statistics
SSO settings and user accounts
Any additional metadata not explicitly listed
How to enable Project Export
This feature cannot be enabled by customers directly. To set up an export, you must contact DatoCMS support and provide the following AWS S3 details:
S3 Bucket Name
AWS Region
S3 Access Key ID
S3 Secret Access Key
Additionally, you must configure your AWS S3 bucket with:
Public access blocked (mandatory for security)
Bucket versioning enabled (recommended for data recovery)
Lifecycle rules (optional, for automatic cleanup of old snapshots)
Our support team will give you detailed instructions on how to setup everything correctly.
Export structure
Once configured, each export generates a timestamped snapshot in your S3 bucket. The structure is as follows:
assets/ project_<ID>/ file1.png file2.mp4
content/ project_<ID>/ snapshot_<TIMESTAMP>/ models/ records/ uploads/ workflows/ site.jsonThe presence of a canary.txt file in a snapshot directory confirms that the export was completed successfully.
JSON files format
JSON files in the snapshots are similar to the JSON content you can fetch from our Content Management API, with some changes to reduce scattering across multiple files.
Schema
For each schema model/block model, a file following this path is present in the bucket:
content/project_<ID>/snapshot_<TIMESTAMP>/models/<api_key>.json
For instance:
content/project_999/snapshot_1721033044/models/article.json
The data key contains the item_type resource. Fields and fieldsets are referenced by their IDs, and their full payload is present in the included key.
{ "data": { "id": "UVP2y5QPToWPXqJbMszyFg", "type": "item_type", "attributes": { "api_key": "article", "name": "Article", // ... the rest of item_type attributes }, "relationships": { "fields": { "data": [ { "id": "InMbgf7BSo2TDG4HYGb2Ug", "type": "field" } ] }, "fieldsets": { "data": [ { "id": "bwk17lanRYCOvXKztPp5PA", "type": "fieldset" } ] }, "workflow": { "data": { "id": "MQLtfJv4Q22nKUoHEQ3b9A", "type": "workflow" } } }, "meta": { "has_singleton_item": false } }, "included": [ { "id": "InMbgf7BSo2TDG4HYGb2Ug", "type": "field", "attributes": { "label": "Content", // ... the rest of field attributes }, "relationships": { "item_type": { "data": { "id": "UVP2y5QPToWPXqJbMszyFg", "type": "item_type" } }, "fieldset": { "data": { "id": "bwk17lanRYCOvXKztPp5PA", "type": "fieldset" } } } }, { "id": "bwk17lanRYCOvXKztPp5PA", "type": "fieldset", "attributes": { "title": "Group 1", // ... the rest of fieldset attributes }, "relationships": { "item_type": { "data": { "id": "UVP2y5QPToWPXqJbMszyFg", "type": "item_type" } } } } ]}Records
For each schema model, multiple files following this template are present in the bucket:
content/project_<ID>/snapshot_<TIMESTAMP>/records/<schema_model_api_key>/current/batch_<batch_increment_number>.jsoncontent/project_<ID>/snapshot_<TIMESTAMP>/records/<schema_model_api_key>/published/batch_<batch_increment_number>.jsonFor instance:
content/project_999/snapshot_1721033044/records/article/current/batch_000.jsoncontent/project_999/snapshot_1721033044/records/article/current/batch_001.jsoncontent/project_999/snapshot_1721033044/records/article/published/batch_000.jsoncontent/project_999/snapshot_1721033044/records/article/published/batch_001.jsonThe current prefix contains the records' current versions (the latest version available, as seen in the admin interface). The published prefix contains records' published versions.
The same record ID can be present in both trees (current and published) if it has both a current and a published version. The same version can be present in both trees if it's at the same time the current and published version of the record.
Versions include their block records, similar to using the nested=true query parameter in our Content Management API.
Each batch_XXX.json contains several versions under the data key and their order is not predictable.
{ "data": [ { "id": "ZrKQnn5AQBiZ4CTX8eyu8Q", "type": "item", "attributes": { "title": "A trip to Florence!", "content": { "en": [ { "type": "item", "attributes": { "text": "Beautiful!" // ... the rest of block record attributes }, "relationships": { "item_type": { "data": { "id": "JfkKRx-FRJONbco_hHOS5Q", "type": "item_type" } } }, "id": "afzDcUT0RHOduJbr8L_ZmA" } ] } // ... the rest of record attributes }, "relationships": { "item_type": { "data": { "id": "UVP2y5QPToWPXqJbMszyFg", "type": "item_type" } }, "creator": { "data": { "id": "24527", "type": "account" } } }, "meta": { // ... } }, { // .. other current versions } ]}