Weekly
Chase stories with unpublished edits
Every Monday you see stories whose changes have waited more than a month to be published.
- Runs
- Weekly
- Apps
- Storyblok
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every Monday at 9am, email me Storyblok stories that have unpublished changes older than 30 days, with who last edited them.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
On a Storyblok site, an editor saves a change to the pricing page in March, intending to publish after legal signs off. Legal replies, the editor moves on, and the story keeps its unpublished changes flag for three months. Visitors see the old prices while the correct version sits in draft, and nobody remembers it exists until a customer points it out.
Every week, ClickRuntime lists your stories, keeps the ones that have unpublished changes and were last updated more than 30 days ago, and emails you the list with names and last-edit dates. Nothing is published or changed for you. The email is simply a prompt to decide: ship it, finish it or discard it.
It is most useful for content leads who manage several editors and spaces, where abandoned drafts are easy to lose track of.
What you get out of it
Old drafts stop hiding in the space
Storyblok does not nag about stories that have been waiting for weeks. A weekly list brings them to the surface, so a half-finished landing page gets a decision instead of silently aging.
Live pages stay accurate
When a correction sits unpublished, the public page is wrong for as long as it waits. Catching a 30-day-old draft early shortens the time visitors see outdated copy, prices or product details.
Editors get a gentle accountability loop
The list names each story and when it was last touched. A content lead can forward it with one question, who owns this, which is easier than auditing every folder by hand.
Cleanup of abandoned work gets easier
Drafts that no longer matter can be deleted or archived with confidence once you see them together. Fewer dead stories means a tidier tree and less confusion when new editors join.
Reviews and handovers have a baseline
When an editor leaves, the list shows exactly which of their stories were never finished. You can reassign them or close them out instead of discovering orphans months later. Nobody inherits a mystery pile of half-done pages.
How it works
What happens, step by step
Every Monday, ClickRuntime goes through all the stories in your Storyblok space.
It picks out stories that have unpublished changes and were last edited more than 30 days ago.
You get an email listing each one with the date it was last edited and who edited it.
Before it runs live
- Connect Storyblok
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Storyblok steps into one automation
Under the hood
The code that runs this automation
from datetime import datetime, timedelta, timezone
from clickruntime import on_trigger, credentials, http, notify
SPACE_ID = "your-space-id"
@on_trigger
def run(event):
h = {"Authorization": credentials.secret("STORYBLOK_MANAGEMENT_TOKEN")}
cutoff = datetime.now(timezone.utc) - timedelta(days=30)
stale, page = [], 1
while True:
stories = http.get(f"https://mapi.storyblok.com/v1/spaces/{SPACE_ID}/stories", headers=h,
params={"per_page": 100, "page": page}).json()["stories"]
for s in stories:
if s.get("unpublished_changes") and datetime.fromisoformat(s["updated_at"].replace("Z", "+00:00")) < cutoff:
who = (s.get("last_author") or {}).get("friendly_name", "unknown")
stale.append(f"{s['full_slug']}: last edited {s['updated_at'][:10]} by {who}")
if len(stories) < 100:
break
page += 1
notify.email_me(f"{len(stale)} Storyblok drafts waiting over 30 days", "\n".join(stale) or "None.")
return {"stale": len(stale)}FAQ
Common questions
What counts as a stale draft?
Does it include every space in my Storyblok account?
Can I use a 14-day or 60-day cutoff instead?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Get a Slack message for each published story
When a story goes live, Slack shows its name, who published it and where it lives on the site.
See how it worksGet a Friday round-up of Storyblok activity
Each Friday you get one email grouping the stories published and changed during the week.
See how it worksKnow the moment your website goes down
Your team hears in Slack when the site stops responding or slows down, and again when it's back.
See how it worksKeep exploring
Set up “Chase stories with unpublished edits” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.