Documentation · Confluence Cloud

Find and Replace with patterns

Bulk find and replace across Confluence Cloud, with a preview you must approve before anything is written, and an undo for the whole run. Plus a label manager, seventeen reports and six macros built on the same pass over your pages.

Installing and finding the app

Install from the Atlassian Marketplace. No configuration, no account to create, no key to paste: the app runs on Atlassian's own Forge platform and is ready the moment it is installed.

After installing, open it from the left sidebar of Confluence: Apps → Find and replace. It opens on the search screen; the label manager and the reports are the two tabs next to it. The band at the top of the screen names one thing the app can do each time you open it, and See the list opens the full list in a panel.

Find and replace

The order is always the same: search, look, choose, write.

  1. Find — the text or the pattern you are looking for.
  2. Replace with — what goes in its place. Leave it empty to delete the matches.
  3. Pick a scope, then press Find. Nothing has been written yet.
  4. The result is a list of pages, each with its matches in context. Every match has a checkbox, and every checkbox starts ticked. Untick what you do not want. Clear all checks and Check all work on the whole list.
  5. Press Replace in N places. Only what is ticked is written.

Long runs go through a queue with a progress line and a Cancel button, so four hundred pages are one job, not four hundred clicks. Each page that changes gets a new version in Confluence, with a message naming the run.

What can be changed

The four targets are chosen under Advanced options, together with code blocks, macros and link URLs. Rewriting happens on Confluence's own document format, node by node — never as find-and-replace over raw markup. That is why a macro survives a replacement that touches the text next to it.

Patterns and pair lists

Three checkboxes sit under the fields: Regular expression, Match case and Whole words only. With Regular expression on, the syntax is JavaScript's. $1 to $9 put captured groups back, $& puts back the whole match, and $$ writes a literal dollar sign.

A pattern that could take exponentially long to run — a quantifier inside a quantifier, such as (a+)+ or (a+){2,} — is refused before the pass starts, with the reason on screen. This is not a judgement about your pattern: it is the only way to keep a run from hanging.

Regular expressions cost more. A pattern cannot use Confluence's search index, so every page in scope has to be read. The app says so on screen and suggests adding a plain piece of text to search for alongside — that narrows the set of pages first and makes the same run much faster.

Scope

Scope is never implicit. You pick the spaces to search, and, if you want, spaces to leave out. For anything narrower — a page and its tree, a label, an author, a date — write a CQL query under Advanced options → Your own CQL query; that is Confluence's own query language, so anything you can express in Confluence search you can use as a scope here.

A scope you use often can be saved under a name and picked from Saved scope next time.

Undo and history

Every replacement creates a new page version, so nothing is destroyed: undo restores each page to the version it had before the run and records that as a new version too, with a message naming the run it undid. Both the run and its undo are visible in the page history in Confluence.

Undo the whole run sits in the run panel on screen, right under the result. The History section below the form lists earlier runs; from there you can start again from the same patterns.

Label manager

Under the Labels tab, over the same scope you set for a search:

The seventeen reports

Under the Reports tab. Each one reads the pages in your scope once and answers a question you would otherwise answer by hand. Every result can be taken out as CSV, and where a report cannot answer fully, it says so in the report itself — the yellow lines below.

Where a person is mentioned

A mention is not text: it is tied to the person's account, and the displayed name is rendered from the account. That's why a regular search doesn't find it, and why here you search by person.

Broken internal links

Moved or deleted pages leave behind links that lead nowhere. The report says how many each page has, so you know where to start.

Where it stopsOnly links to pages on this site are checked. Links to other sites are left alone: the app makes no request outside your wiki, which is why it can carry the “Runs on Atlassian” badge.

Unused attachments

Files attached to a page stay there even after the image or the link to them was removed from the text. The report says which they are and how much space they take.

Where it stopsThe report shows, it doesn't delete. Deleting an attachment can't be undone, and the app doesn't ask Confluence for permission to delete files — you can check that in the list of permissions shown when you install it. What you delete, you delete yourself, in Confluence.

Images without alt text

People who cannot see the screen hear the alt text. Where it is missing, the image does not exist for them.

Where it stopsA purely decorative image is also marked with empty alt text. The app cannot tell the two apart, so it shows all of them and leaves the choice to you.

Which macros are in use

The answer to “can we drop app X yet?”. Shows which macros are used and on which pages.

Words and reading time

How many words each page has and how long it takes to read. Also good for finding stub pages.

Where it stopsMinutes come from 200 words per minute — a convention, not a measurement. Code blocks are not counted.

Empty or stub pages

Pages with very few words: unfinished starts and headings with nothing under them.

Where it stopsPages with child pages are shown too: a table of contents has few words without being a stub. Finding out which ones have children would take another query per page, doubling the cost of the report.

Links pointing out

Which sites outside the wiki your pages point to, grouped by domain.

Where it stopsLinks are read, not opened: the app sends no request outside Atlassian. So it cannot tell you whether a link still works, only where it goes.

Broken anchors

Links pointing at a specific heading on another page, where that heading no longer exists. The reader lands at the top of the page without being told.

Where it stopsAnchors are compared by letters and digits only, ignoring hyphens and case, because Confluence writes them in more than one way. The possible mistake runs one way only: an odd anchor may pass as fine, but a working one is never shown as broken.

Identical pages

The same text in two or more places. Only pages that have a match are shown.

Where it stopsText is compared, not formatting, images or macros. Pairs appear as the pass goes on: the second page of a pair may only turn up at the end.

Mentions of accounts that no longer answer

Pages mentioning someone Confluence no longer gives us, usually a person who has left.

Where it stopsThe app says only this much: the account no longer answers. Whether the person left, lost their licence, or you simply cannot see them, cannot be known from here.

Abbreviation glossary

Which abbreviations are used across the wiki and where they appear. The starting point for a glossary written by a human.

Where it stopsWords of two to six capital letters are collected. A word written in capitals for emphasis lands in the list too: which ones are real abbreviations is yours to say, not the app's.

Link graph

Walks the wiki once and remembers which page points to which. After that you can ask as often as you like, without reading the pages again.

Where it stops“Nothing points to this page” means nothing in the spaces you chose. A page linked from a space we did not read shows up here as an orphan.

Untouched pages

What has not changed in a long time. The starting point for a spring clean.

Where it stopsThe date is the last version's. An app passing over the page counts as a change too, so a page can look fresh without anyone having written in it.

Who keeps the page

The last person who wrote in each page. The answer to “who do I ask about this space?”.

Where it stopsThe last editor is not necessarily the owner: fixing a comma makes you one. The app shows who wrote last, not who is responsible for the page.

Pages without any label

The natural companion of the label manager: first see what has none, then add.

Pages written by a given person

Filtered by author. Usually you are looking for the pages of someone who has left.

Where it stopsThis searches by who created the page, not by who wrote in it last. On an old page the two are rarely the same person.

The six macros

Type / in the Confluence editor and search for the name. A macro keeps its answer on the page and refreshes it when the page is opened.

Name in the editorWhat it puts on the page
Incoming linksPages that link here
Macro inventoryMacros used across the wiki
Words and reading timeHow many words each page has and how long it takes to read
Untouched pagesUntouched pages in this tree
Report on a pageThe result of any report, kept on a page
AbbreviationsAbbreviations on this page

Permissions and data

The app runs entirely on Atlassian's Forge platform. No page content, no name and no identifier ever leaves Atlassian. There is no server of ours to send it to: the app makes no request to any address outside your Atlassian site, which is what the “Runs on Atlassian” badge on the Marketplace listing certifies.

It asks Confluence for exactly these permissions, and Confluence shows you the list before you install:

PermissionWhat it is for
read:pageReading the pages in your scope
write:pageWriting a replacement you approved
read:content-detailsPage versions, for the preview and the undo
write:contentRestoring a version when you undo a run
searchNarrowing a run to the pages that can match
read:label · write:labelThe label manager
read:spaceThe list of spaces you pick a scope from
read:attachmentThe unused attachments report — reading only
read:userAsking whether a mentioned account still answers

There is no permission to delete anything — not a page, not an attachment, not a space. That is not a promise, it is a list you can check yourself at install time.

Everything the app does, it does as you: it can never read or write a page you could not read or write yourself in Confluence.

Privacy policy

Nothing you have in Confluence leaves Atlassian. The app runs on Atlassian Forge. It makes no request to any host outside your Atlassian site, so there is no third party, no analytics service and no server of ours that could receive your data. This is enforced by the platform, not by our good intentions: a Forge app that egresses data must declare it, and this one declares none.

What is stored, and where. The app keeps a record of your runs — the patterns you searched for, the identifiers of the pages it read or wrote, the counts, and the status — inside Forge storage, which lives in Atlassian's own infrastructure under your installation. It is what makes the history and the undo possible. Page content is read into memory while a run is working and is not kept afterwards.

What is not stored. No page bodies, no attachments, no e-mail addresses, no credentials. The app never builds a profile of anyone.

Who can see it. The app acts as the person using it: it can read or write only what that person could read or write in Confluence themselves. We, as the developer, have no way to read your data — there is no admin console on our side and no copy anywhere else.

Deletion. Uninstalling the app removes its Forge storage, and with it every record of your runs. There is nothing left behind to ask us to delete.

Reports. A report you export leaves as a CSV file that your browser downloads directly from your own site. It does not pass through us.

Questions about any of this: contact@maste.ro.

Limits

Support

Write to contact@maste.ro — a problem, a question, or a feature you need. The same address is in the footer of every screen in the app. Tell us what you were doing and what you saw; if a run is involved, its identifier from the page history helps.