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.
- Find — the text or the pattern you are looking for.
- Replace with — what goes in its place. Leave it empty to delete the matches.
- Pick a scope, then press Find. Nothing has been written yet.
- 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.
- 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
- Change the page body, the title, the text of a link and the address behind it.
- Reach text a plain search misses: expand titles, status labels, code blocks, macro bodies, synced blocks.
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
- Replace a word or a phrase across hundreds of pages in one pass.
- Search with a regular expression, and put the groups back with
$1,$2. - Run a whole list of pairs — old > new, one per line — in a single pass.
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
- Keep a run inside a scope — spaces, a page tree, a label or an author — and save that scope under a name.
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
- Undo a whole run afterwards, page by page, however long ago it was.
- Look back at earlier runs and start again from their patterns.
- Take any list out as CSV, with or without page titles.
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:
- Rename a label
- Merge several into one
- Delete labels
- Add a label to a range of pages
- Remove a label from a range of pages
- Count where each label is used, and find the ones no page uses any more.
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 editor | What it puts on the page |
|---|---|
| Incoming links | Pages that link here |
| Macro inventory | Macros used across the wiki |
| Words and reading time | How many words each page has and how long it takes to read |
| Untouched pages | Untouched pages in this tree |
| Report on a page | The result of any report, kept on a page |
| Abbreviations | Abbreviations 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:
| Permission | What it is for |
|---|---|
| read:page | Reading the pages in your scope |
| write:page | Writing a replacement you approved |
| read:content-details | Page versions, for the preview and the undo |
| write:content | Restoring a version when you undo a run |
| search | Narrowing a run to the pages that can match |
| read:label · write:label | The label manager |
| read:space | The list of spaces you pick a scope from |
| read:attachment | The unused attachments report — reading only |
| read:user | Asking 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
- Not covered in this version: attachments (beyond the report), page restrictions, drafts, and page properties. Each is a different data model with a different risk, and none of them is worth doing badly.
- Case is not carried over. With Match case off, a match written with a capital is replaced by exactly what you typed. The app writes what you asked for, not what it guessed you meant.
- Undo lives in the run panel. The history list lets you start again from an old run's patterns, but the undo button belongs to the run you have on screen.
- A regular expression reads every page in scope, because the search index cannot help with one. See the note under Patterns.
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.