Bulk Scheduled Publishing in DATO CMS

EDIT: Actually, please see the next post instead. It has an easier and more reliable workaround.

This blurred post lists several other inferior workarounds, just in case. But my recommendation is to use the one in the next post.

Unfortunately, I don’t believe we have that functionality built-in, but there are a few workarounds I can think of…

Option 1: Incremental builds
What framework are you using for your frontend?

If it’s Next.js or something similar, you should be able to use Incremental Static Regeneration (Pages router) or Data validation (App router) to just rebuild the affected page or component, instead of the whole app. IMO that would be the cleanest route and not require any changes to your workflow or build triggers.

Option 2: CMA API

Would you be able to make an external script (or maybe plugin) that does the bulk publishing for you using the Content Management API? Publish items in bulk - Record - Content Management API

You can run it on a cron job, or maybe a serverless worker on a schedule?

Option 3: Manually publish

In the dashboard, you can change the build trigger to ignore scheduled publications:

Then when you’re ready, you can manually start a build in the UI.

You can also semi-automate this by creating a separate model, let’s call it “Release groups”. Make a record in that group and have it scheduled publish a few minutes after all the other ones:

Use a webhook:

To trigger your build via the CMA API.

Roundabout, I know =/

Option 4: Custom webhook on a build debounce (not recommended)

This is probably overkill and fragile. I wouldn’t recommend this, but it most closely matches your original request so I’m mentioning it just in case…

Instead of a build trigger connecting directly to Vercel/Netlify/etc. and building on every publish, you can make it a custom webhook request to an external handler that you’d have to write. That handler could receive X number of build requests over time, but debounce them (like keep a record in an external database or key-value store) and only publish a maximum of once every 5 min/1 hour/whatever you set.

(Or alternatively, just have it re-build every hour on a timer. Maybe add a simple diff to see if it detects any changes, like by hashing a graphQL response.)

Again, this isn’t recommended… it introduces a lot of unnecessary complexity and fragility.

I know none of these are simple solutions, but might any of them work for you? If not, I’m afraid it might be a Feature Request instead?