Merge desk for duplicate and conflicting Confluence pages

Group look-alike wiki pages into clusters, see exactly where they disagree, and pick one source of truth without deleting anything.

App
ConfluenceAI GenerationOperationsDocument ProcessingContent Generation
PromptCreate

Build me a merge desk for duplicate and conflicting Confluence pages. We have six pages that are some version of "onboarding" and nobody knows which one is true. The app is a review queue I work through one cluster at a time. It must be strictly non-destructive: it never deletes a page, a comment, or a space. Do not use any delete operation from the Confluence catalog, even though the catalog has them.

The main screen has a search bar where I either type a topic or pick a Confluence space. Running it calls Search Content (CQL) to pull candidate pages, restricted to type=page, using a title and text match for the topic plus a space filter when I picked one. Cap the candidate set at a few hundred pages and paginate through results rather than trying to pull an entire site in one go.

Group the candidates into clusters of likely duplicates. Normalize titles first (lowercase, strip punctuation and filler words like draft, copy, old, new, final, v2) and group by title similarity, then use AI Generation to confirm or split the borderline groups by weighing title, space, and labels together. A cluster needs at least two pages; do not show singletons.

The queue lists one row per cluster showing the cluster name, the number of pages in it, the newest and oldest edit dates, and the people who last touched those pages. Pull the edit dates and last editors from Get Page Versions for each page in the cluster, and the rest of the page metadata from Get Page by ID.

Opening a cluster shows the pages side by side, each column with its title, space, last editor, last edit date, and body. Page bodies are not returned by default, so call Get Page by ID with body-format=storage (atlas_doc_format also works, and in that case the value field is a JSON encoded string rather than a raw object). Above the columns, show a plain English summary of where the pages actually disagree, produced in the app with AI Generation from the fetched bodies. The summary must name concrete differences, for example "Page A requires manager approval and Page B requires manager plus finance approval" or "Page A says Greenhouse and Page C says Lever", so I can tell a stale copy from a genuine variant. Cache the summary per cluster so reopening a cluster does not regenerate it.

In each cluster I pick one page as canonical and the rest get marked superseded. Confirming that decision runs three writes. Add Labels (v1 API) tags the canonical page and the superseded pages with distinct labels. Create Footer Comment posts a comment on each superseded page telling readers the page is superseded and linking to the canonical page. Update Page puts a short "this page has moved" banner at the top of each superseded page body.

Updating a page requires sending version.number as the current version plus one, so the banner edit must always fetch the page first with Get Page by ID using body-format=storage, prepend the banner to the existing body, and send the full body back with the incremented version. Never replace a body, always prepend, because the original content has to survive intact.

Remove Label undoes a decision if I change my mind. Undo takes the labels off the canonical and superseded pages with Remove Label (v1 API), runs Update Page again to strip the banner block back out of the superseded bodies, and returns the cluster to the queue as undecided. Leave the original footer comment in place and post a short follow-up comment saying the decision was reversed, so the app never has to call a delete operation.

A cluster I dismiss as "not duplicates" stays dismissed and does not resurface next session. Store dismissals and decisions in app storage shared across everyone in the workspace rather than per user, since the labels and comments they produce are shared anyway. Key each dismissal on the exact set of page IDs in that cluster, so that if a new page later joins the group it surfaces again as a new cluster instead of staying hidden forever.

Show the decision state on every row (undecided, decided, dismissed) and let me filter down to just the undecided ones. Before running any writes, show me exactly what is about to happen: which page gets the canonical label, and which pages get the banner and the comment. Confluence enforces points-based rate limits and returns 429 with a Retry-After header, so if a batch of writes fails partway, report which pages succeeded and let me retry only the failures rather than redoing the whole cluster.

What does this prompt do?

  • Type a topic or pick a space and get back groups of pages that look like copies of each other, each showing how many pages are in the group, the newest and oldest edit dates, and who last touched them.
  • Open a group to read the pages side by side with a plain-English summary of where they actually disagree, like different approval steps or different tool names, so you can tell a stale copy from a genuine variant.
  • Pick the one page that should be the source of truth. The rest get tagged as superseded, a comment pointing readers to the right page, and a short "this page has moved" note at the top.
  • Nothing is ever deleted. Change your mind and the decision comes undone, and any group you mark as "not duplicates" stays out of your queue.

What do I need to use this?

  • A Confluence account with permission to edit the pages you want to tidy up, since the app adds labels, comments, and a short banner
  • The spaces or topics you want to review, for example one team space or everything called some version of "onboarding"
  • Nothing else to set up. The side-by-side comparison summaries are written for you inside the app.

How can I customize it?

  • Loosen or tighten how closely titles have to match before pages get grouped together, so you can cast a wide net or only catch near-identical copies.
  • Reword the banner and the comment left on superseded pages, and rename the labels used to tag the canonical and superseded pages.
  • Narrow the review to certain spaces, or only to pages edited within a certain time window.

FAQs

Will this delete any of our pages?
No, and it cannot. The app only adds labels, posts a comment, and puts a short banner at the top of a page. Every page keeps all of its original content, which matters because deleting other people's pages is how documentation cleanups get abandoned.
What happens if I pick the wrong page as the source of truth?
Undo it. The labels come off, the moved banner is stripped back out of the pages, and the group returns to your queue as undecided. The original comment stays in place with a short follow-up noting the decision was reversed, so there is a clear trail of what happened.
What if the pages only look similar but are genuinely different?
Mark the group as not duplicates. It stays dismissed and will not resurface the next time you open the app. If a brand new page later joins that same group, it comes back so you can take a fresh look.
Does everyone on the team see the same queue?
Yes. Decisions and dismissals are shared across your workspace rather than kept per person, which matches the fact that the labels and comments they create are visible to everyone in Confluence.
Can I review more than one space at a time?
Yes. You can search by topic across everything you have access to, or narrow the review down to a single space when you want to clean up one team's documentation at a time.

Related templates

Assign owners to stale Confluence pages, space by space

Work through one wiki space at a time: see what has gone stale, give every page an accountable owner, and record it somewhere that survives.

Confluence
Google Sheets
Slack Bot
App
See every open Confluence action item on one board

Pull every unfinished task out of your meeting notes and project pages into one screen, sorted oldest first, and tick them off without leaving the board.

Confluence
Jira
Slack
App
Documentation ownership register for your Confluence wiki

See every page in your Confluence spaces with its last editor, revision count and review date, then assign owners that save onto the page itself.

Confluence
Google Sheets
Slack
App
Track who has read every onboarding page in Confluence

People Ops sees every new starter's reading progress on one screen, and each new hire gets their own role based list they tick off as they go.

Confluence
BambooHR
Slack Bot
App
HubSpot prospecting desk for personalized first-touch emails

Open one screen each morning to see the contacts you own, read the facts behind every draft, and send first-touch emails you actually approved.

HubSpot
Gmail
AI Generation
App
Hiring content studio for job descriptions and interview kits

Turn a bare Greenhouse role into a polished job description and a full interview kit your panel can actually use, reviewed by a recruiter before anything ships.

Greenhouse
AI Generation
Google Docs
+1
App

Stop guessing which onboarding page is the real one.

Set up your merge desk and turn six competing pages into one source of truth, without deleting a thing.