
Confluence's built-in page approvals are only on Premium and Enterprise. Atlassian's own help page says "Approvals are available only on Premium and Enterprise plans." SignOff adds page sign-off to Confluence Standard. You ask named people or groups to approve a page, they approve or send it back with a comment, and every step lands in an audit log.
The part people get wrong most often is what happens after someone edits an approved page. In SignOff an approval belongs to one page version. Publish a new version and the approval stops counting, the page shows "Awaiting approval" again, and the people who had approved get a comment asking them to look again.
It's a Forge app built with UI Kit. It runs on Atlassian's infrastructure and makes no calls outside Atlassian. Everything the panel shows is read with the viewer's own Confluence permissions. The app identity does three jobs only. It reads the new version number after an edit, posts the "please review again" comment, and checks whether each named approver can view the page.
The byline panel also has a History tab with every request, decision, withdrawal and reset, newest first. A CSV copy dialog sits under it for audits. Blog posts work the same way as pages.
Who can do what.
How decisions count.
If a site admin uses app access rules to hide a space from SignOff, the app can't read pages there after an edit. The byline still checks the version as the viewer and shows "Awaiting approval" on the new version. But the reset itself waits until someone opens the Approval panel, and the "please review again" comment may not post. Approvers can't approve the old version either way, because every decision re-checks the version.
Due dates are informational, and SignOff doesn't send reminder emails. A pending request gets an Overdue badge once its due date has ended in every time zone, which is 12:00 UTC on the next day. The form accepts any date that's still today somewhere, so a date you can pick is never overdue the moment you save it.
SignOff doesn't send its own email. It posts a footer comment that mentions people, and Confluence handles delivery the way it does for any mention. You can turn this off per request.
Groups can't be @mentioned in Confluence, so group members don't get a personal notification. They'll find the request on the Approvals page and in the page byline.
| Item | Limit |
|---|---|
| Approvers per request (people plus groups) | 20 |
| Request note | 500 characters |
| Approve or reject comment | 1,000 characters |
| Due date | up to 366 days ahead |
| Group memberships checked per person | 1,000 |
| History page size | 50 entries, with Load more |
| CSV export | newest 1,000 entries, 2 MB |
| Names in the CSV | looked up for the first 500 people |
| Decisions read per round | 300 |
| Approvals page | scans 500 open requests, shows up to 50 |
The input limits come back as an error that names the limit. The CSV dialog says when entries were cut or names are missing, the Approvals page says when its list is cut, and the panel warns if a round ever holds more than 300 decisions. One limit is silent. A person in more than 1,000 groups may not be recognised as a member of a listed group.
Scopes, and why each one is there.
| Scope | Used for |
|---|---|
read:page:confluence, read:blogpost:confluence | Page title and current version, as the viewer |
read:confluence-content.summary | Receiving page and blog post update events |
read:confluence-content.permission | Checking whether you can edit a page (as you) and whether each approver can view it (as the app) |
read:confluence-groups, read:confluence-user | Group search, group names, group membership, names in the CSV |
write:comment:confluence | The optional notification comments |
storage:app | Requests, decisions and the audit log |
report:personal-data | The daily personal data report to Atlassian |
SignOff never edits page content and has no scope that could. It stores Atlassian account IDs, group IDs and names, the request note, decision comments and timestamps in Forge storage, which Atlassian hosts.
Once a day it reports the stored account IDs to Atlassian with the Forge personal data reporting API. When Atlassian says an account is closed, SignOff swaps that ID for a "Closed account" placeholder everywhere it's stored and deletes the notes and comments that person wrote. Their decisions still count. Each run reports up to 4,500 accounts (90 per call) and saves its place after every call. Closed accounts go on an erase list right away. The run works through that list until it hits a 10-minute limit, and anything left is first in line the next day. At 4,500 a day, a site with up to 31,500 stored accounts gets a full pass within Atlassian's 7-day cycle.
One side effect. If a named approver's account is closed before they decide, an "Everyone listed" request can't finish, because nobody can approve in their place. Withdraw it and request again without them. See PRIVACY.md.
It doesn't lock or restrict a page while it's under review, and it doesn't build multi-stage workflows with states like Draft, Review and Published. It doesn't send reminders or digests, and it doesn't produce signed PDFs. If you need those, the bigger workflow apps on the Marketplace cover them.
Zovo builds and maintains this app. If it saves you time, you can support the work on GitHub Sponsors. Sponsorship is optional, and the tool works the same without it.
Zovo is made by theluckystrike on GitHub.
MIT. See LICENSE.
If this app saves you time, you can support the work on GitHub Sponsors. Monthly tiers start at $5, and one-time tiers start at $15. Sponsorship is optional, and the tool works the same without it.