A real-world approach to identifying stale pages, notifying owners, and working around the limitations of Atlassian Cloud automation
As a Confluence Cloud admin, I appreciate the power and flexibility of Confluence, Jira, and Automation for Cloud. However, building automations that seem straightforward can sometimes reveal unexpected complexities. I want to share the automation setup I developed to notify Confluence page owners when their content becomes stale, along with the lessons learned and adjustments made to achieve the desired functionality.
Before implementing automation, we established criteria to define outdated content. This content health system guides our expectations and flags pages accordingly:
Health State | Last Updated Within |
---|---|
✅ Healthy | 0–6 months |
⚠️ Stale | 6–12 months |
❌ Inactive | 12+ months |
Because a knowledge base is only useful when it’s accurate, relevant, and trusted:
Accuracy prevents bad information from spreading.
Relevance ensures your content reflects the tools and processes today—not three years ago.
Trustworthiness shows users you care about quality and reliability.
This small effort pays off in a big way: fewer support tickets, better onboarding, and a more empowered workforce.
On the last day of every month at 9:00 AM, an automation runs that:
Identifies all pages not updated in 6+ months
Groups them by owner using {{pagesPerOwner}}
Sends each owner a personalized email listing their pages
Adds the label needs-review to each stale page
When an owner edits their page, a second automation removes the label
This cycle continues monthly until the page is updated.
Trigger: Scheduled (Monthly)
Branch: For pages last updated more than 6 months ago
Then Branch: For each page in {{pagesPerOwner}}, variable name: ownerStalePages
If Condition:
{{ownerStalePages.first().owner.emailAddress}}
Condition: Does not equal
Value: Empty
Then:
Send Email To: {{ownerStalePages.owner.emailAddress}}
Subject: (Your choice)
Content: Includes HTML table listing pages (see below)
If: {{page.labels}} does not contain needs-review
Then: Add label needs-review
Trigger: When a page is edited
If: {{page.labels}} contains needs-review
Then: Remove label needs-review
If you are new to Automation, a quick tip here. Whatever you make the variable is up to you. I chose ownerStalePages. However, whatever you choose here is case sensitive, and you will need to type it exactly the same in the other places.
ie: {{ownerStalePages.owner.emailAddress}}
If this was {{OwnerStalePages.owner.emailAddress}} instead it would not function properly because the O is capital and not lowercase.
One key thing to know—if you want to display a list of multiple pages (or items) in an email, you need to use this structure:
{{#smartValue}} … content you want repeated … {{/}}
This tells Confluence Automation to repeat whatever is inside those brackets for each item in the list. Think of it like saying,
“For every page this person owns, show me a row with the page info.”
In my automation, I used this with the pagesPerOwner smart value, like this:
{{#ownerStalePages}} … details for each page here … {{/}}
Without this, your email would only show a single page (or nothing at all).
With it, you can build dynamic tables, bulleted lists, etc., that include every page needing review.
This isn’t always well-documented, so it’s a good trick to keep in mind for any smart value that returns more than one result.
Default Automation emails are plain text, which can be hard to read. To improve clarity, I used HTML to structure the message and page list:
<p>These pages haven’t been updated for a while. Please review them to determine if they need updating or should be archived.
</p>
<table style="width:100%; border-collapse:collapse;
font-family:Arial, sans-serif; font-size:14px;
border:1px solid #dfe1e6;">
<tr style="background:#f4f5f7; color:#172b4d; line-height:1.2;">
<th style="text-align:left; padding:6px 10px; border-bottom:1px solid #dfe1e6;">Page</th>
<th style="text-align:left; padding:6px 10px; border-bottom:1px solid #dfe1e6;">Space</th>
<th style="text-align:left; padding:6px 10px; border-bottom:1px solid #dfe1e6;">Last Updated</th>
</tr>
{{#ownerStalePages}}
<tr style="line-height:1.2;">
<td style="padding:6px 10px; border-bottom:1px solid #dfe1e6;">
<a href="{{url}}" style="color:#0052cc; text-decoration:none;">{{title}}</a>
</td>
<td style="padding:6px 10px; border-bottom:1px solid #dfe1e6;">{{dateLastUpdated.shortDate}}</td>
</tr>
{{/}}
</table>
<p style="margin-top:16px;"> For more details on page health expectations, see: <a href="LINK_TO_DOC">this page</a>.
</p>
đź’ˇ Replace "LINK_TO_DOC" with your actual documentation link.
Initially, I considered updating a page's status to “Needs Review” when it became stale. However:
âť— Changing the status counts as an edit, updating the last modified timestamp.
This resets the automation tracking and removes the page from future notifications—even if no substantial content was changed.
To maintain accurate tracking, I opted to use labels instead.
For teams that prefer managing tasks within Jira, I developed an alternative automation:
Trigger: Scheduled (same as above)
Then: Create a new work item in their Jira project
Summary: Review stale Confluence page: {{title}}
Description:
The page [{{title}}|{{url}}] hasn’t been updated in over 6 months. Please review it and decide if it needs updating or should be archived. Last Updated: {{dateLastUpdated.shortDate}}
This approach integrates content review into the team's existing Jira workflow, facilitating better tracking and prioritization.
If you’re trying to build a reminder system based on update activity, ignore the word “inactive” entirely.
According to Atlassian:
“An inactive page is any page that has not been viewed in the specified time period. The view history includes updates and comments.”
— Branches in Confluence automation
This means even a brief view or comment marks a page as active, regardless of content updates. For tracking maintenance, rely on Branch: For pages last updated more than * months ago instead.
Atlassian's documentation also notes:
“Inactive parent pages are excluded […] as a security measure.”
— Smart values in Confluence automation
Top-level pages may not be included in inactivePages, potentially omitting important content from your automation.
In the email table originally I was using {{space.name}} to show which space each page belongs to. Unfortunately, this doesn't currently work—even though it's documented as a supported value.
This is a known issue Atlassian has tracked under this bug report:
đź”— CONFCLOUD-79794 Smart Values for spaces are not working on Confluence Automation
📅 This bug has been open since February 2023, but as of today, the official documentation still lists space.name and many other space properties as functional—even though they are not.
Atlassian’s documentation here still shows the following space properties as available smart values:
🔗 Smart values in Confluence automation – Space properties
Property | Description |
---|---|
{{space.url}} | Link to the space overview |
{{space.id}} | Unique ID of the space |
{{space.key}} | Unique space key (URL identifier) |
{{space.name}} | Name of the space |
{{space.isPersonal}} | Boolean: is it a personal space? |
{{space.creator}} | Full creator object with sub-properties: |
{{space.creator.accountId}} | Account ID of creator |
{{space.creator.emailAddress}} | Email of creator |
{{space.creator.fullName}} | Full name of creator |
{{space.creator.publicName}} | Public name (Community profile) |
{{space.creator.timeZone}} | Time zone of creator |
In reality, none of these space-related smart values currently work in Automation for Confluence Cloud. If you're seeing blank fields in your emails or automation actions, this is why.
For now, consider removing space-specific data from your email templates and focusing on page-level details (like title, URL, and last updated date). Alternatively, I created a separate Automation for each space, Its not a good work-around, but it is what we are left with at the moment.
Implementing batched email notifications in Confluence automation can streamline communication. Atlassian introduced batch notifications and lookup capabilities to enhance automated emails, allowing multiple notifications to be grouped into a single email.
For detailed guidance on setting up batched email notifications, refer to Atlassian's documentation: New batch notifications and look-up capabilities.
Atlassian provides powerful tools, but navigating automation requires careful consideration. I hope this breakdown assists others in implementing effective content review processes.
If you're working on similar initiatives, feel free to connect—I'm always open to exchanging ideas with fellow admins striving to enhance Confluence for their teams.
Guess_ Brandi N_
Digital Product Owner
Franklin County Ohio
1 accepted answer
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
5 comments