Tidy Find & Replace documentation

Tidy Find & Replace for Confluence

User guide

On this page

Where to find it

  • Confluence admins: Confluence administration → Apps → Tidy Find & Replace. Works on the whole site, chosen spaces (up to 50), one space, a page and every page below it, or one page.
  • Space admins: Space settings → Integrations → Tidy Find & Replace. Works in that space: the whole space, a page and every page below it, or one page. The app checks on every action that you are an admin of that space; if you are not, it says "Space admins only".
  • Anyone who can edit a page: the page's ••• menu → Apps → Find & replace in this page tree. Works on that page and every page below it, or only on that page. According to Atlassian's documentation, Confluence shows this menu item only to people who can edit the page. Page trees start at a page: to change text in blog posts, ask a space admin to use Find & replace in space settings.

A Confluence admin can turn off the space settings entry and the page menu entry in the Settings tab. A screen that is turned off shows only "Your Confluence admin has turned this off." and a sentence on how a Confluence admin can turn it on again, and no job can be run there. A job that has started and not finished can still be cancelled in a window that was already open on it, and paused while that window runs it. From Activity in Confluence administration, a Confluence admin can open any job, cancel one that has started and not finished, or discard one that has not started.

Your own permissions apply

Tidy Find & Replace does everything in Confluence as you, with your permissions.

  • It reads only pages and blog posts you can see, and changes only the ones you can edit. A page you can see but can't edit is skipped when the job runs, with the reason "You don't have permission to edit this page".
  • The preview and the report list only pages you can open in Confluence right now, with their titles as you see them now. Pages you can't open (deleted or restricted) are only counted, with no title.
  • Undo, resume, pause and cancel run as whoever clicks them, with that person's permissions.

The Find & replace form

  • Find and Replace with. An empty replacement deletes what is found.
  • Replace several things at once. Turns the two fields into one box, Pairs to replace: one pair per line, the text to find, a tab, then the replacement. You can paste two columns from a spreadsheet. The form says how many pairs it read and names any line it could not read.
  • Options: Match case · Whole words only · Regular expression (see "Regular expressions").
  • Also change: Page titles · Link addresses · Code. Page text is always changed; these three only when you tick them.
  • Where: the places your screen offers (see "Where to find it"). For the whole site there is Include personal spaces: personal spaces are searched only when you tick it.
  • Content: Pages · Blog posts (for the whole site, chosen spaces or one space; a page tree holds pages only).
  • The pickers find a space by its name or key, and a page by its title or a pasted page ID. They use Confluence's search, so, as the form says, "New and changed pages can take about two minutes to appear in this search."
  • More filters: Label · Title contains · Advanced CQL (Confluence admins only). Advanced CQL runs with your permissions and is combined with the choices above. It can have up to 2,000 characters, its parentheses must balance, and it may not contain ORDER BY.
  • Find matches starts the job.

Wait two minutes before a filtered job. A job with a filter finds its pages through Confluence's search, and Confluence lists new and changed pages in its search only after a delay. If you have just created or changed pages, wait two minutes before you start a job that uses a label, a title or CQL. Jobs without a filter read the pages directly and are not affected.

When Find matches cannot start a job. First the app asks Confluence how many pages are in the place you chose; nothing is made until Confluence answers.

  • A place with more than 50,000 pages is refused: "Too many pages to read". Narrow the place, or add a filter.
  • If Confluence asks the app to wait a moment: "Wait {n} seconds, then press Find matches again."
  • If the app's hourly allowance is used up: "Confluence's hourly API allowance for this app is used up. Press Find matches again at {time} or later."
  • If Confluence refuses to count: "Confluence didn't let you count these pages" and "Check that you can open the spaces and pages you chose, or choose another place to look."

How text is matched

  • Find text: 1 to 500 characters; replacement: up to 2,000 characters. Neither can contain a line break or another control character; a tab is allowed in both. Spaces at the start or end are kept exactly as typed.
  • Match case off ignores upper and lower case, in every alphabet.
  • Spaces and quotes. A space in the find text also matches a non-breaking space, and a straight quote or apostrophe also matches its curly forms (‘ ’ “ ”).
  • Whole words only: the characters just before and after a match must not be a letter, digit or underscore, in any script.
  • Where a match can be. A match stays inside one paragraph, heading, list item, cell or other block, and it never runs across a line break, a mention, an emoji, a date, a status, an inline card, an inline macro, an image or placeholder text. Within that it can cross formatting: "ACME Corp" is found. The replacement takes the formatting of the start of the match.
  • Several pairs. In each place the earliest match wins; for equal starts, the longest; for equal length, the pair listed first. Matches never overlap, and replaced text is not searched again. Two pairs with the same find text are refused.
  • Pairs per job. Up to 100 pairs. The pairs, options, place and filters of one job also have a total size limit. In practice all 100 pairs fit when each pair's find text and replacement together are up to about 1,170 characters of plain English, or about 390 characters in scripts such as Chinese or Devanagari. Ordinary pairs are far inside it. A list that is too long is refused with "These pairs are too long to keep together in one job. Use fewer pairs, or shorter ones."

Regular expressions

Tick Regular expression to use a pattern instead of plain text. Patterns use RE2 syntax, whose engine never backtracks, so no pattern can hang a job: one search takes time in proportion to the text, and a page whose matches take too long to find is skipped as too slow to search.

  • Not available: look-around ((?=, (?!, (?<=, (?<!) and back-references (\1, \k<name>).
  • \d, \w, \s and \b match ASCII characters only. Use \p{L} for a letter in any script. A non-breaking space on the page is read as a space, so a space or \s matches it. Don't write \x{00A0} or put one in […]: it is refused.
  • Spellings: a script is \p{Greek}, a code point is \x{e9}.
  • Groups in the replacement: $1 to $99, and ${name} for a named group, (?P<name>…) or (?<name>…). $$ writes a dollar sign. Without Regular expression, $ is just a dollar sign.
  • ^ and $ mean the start and end of the place a match can be (see "Where a match can be"), not of the page.
  • Match case and Whole words only apply to patterns too, and spaces and straight quotes relax as in plain text.
  • Refused when you start the job:
    • a pattern that can match nothing at all, an empty string (for example a*): it must always match at least one character;
    • a pattern with an invisible character in it (zero-width space, joiner, soft hyphen and the like);
    • a curly quote or non-breaking space inside […] or written as an escape (type a straight quote or a plain space: it matches both forms);
    • a replacement that names a group the pattern does not have;
    • pairs that take more than a second to prepare ("This pattern takes too long to check").

Every job follows the same steps

  1. Reading pages. The app reads every page in the place you chose and finds the matches. The screen says "Reading pages: X of about Y · M pages with matches so far" ("Reading pages: X read · …" while an undo is prepared). Nothing has changed. Stop ends it. Keep the page open: if you close it, Activity says Preparing for about three minutes and then Stopped. Open the job from Activity to go on.
  2. Review the changes. The preview (below). Nothing has changed yet. Start the job, or Discard it.
  3. Running the job. Pages are changed in batches by the open page, so keep it open until the job ends (see "While a job runs").
  4. Report. The changed pages and the pages that need a look, with the totals of the rest (see "The report").

If nothing matches, you see "No matches" and "No matches in N pages."

Too big to finish. If reading finds more than the app can take in one job, the job is removed and the screen offers only a new search: "Too many pages to read" (more than 50,000 pages read), "Too many pages to change" (more than 10,000 pages to change), or "This page tree is too big" (a tree with too many levels). Narrow the place and search again.

The preview

  • The summary: "N matches on M pages · P pages read", then where they were found:

    • "Found in the places you chose": page text, and the titles, link addresses or code you ticked;
    • "Also found, not selected": matches in titles, link addresses or code you did not tick. Turn that option on under Also change and search again to include them;
    • "Found where the app does not change text": expand titles, status labels, macro settings, placeholder text and image descriptions, and text and link addresses inside Confluence's legacy content macro (content from the old editor that the cloud editor cannot hold). These are counted so you are not surprised; they are never changed;
    • pages skipped while reading: live docs, archived pages, pages larger than 4.5 MB, and pages the app cannot safely change (a format it cannot read or check after a save, more than 10,000 matches, or too slow to search).
  • The estimate: "The run can take about N minutes, and longer if Confluence's hourly API allowance for this app runs out." It counts the pages the run will save, with the ticks as they are. It is left out while the page list is being read again after a change, and when the run would save no page.

  • Warnings, when they apply:

    • Confluence may tell the watchers of each changed page about the change, by e-mail or in its daily digest, depending on their notification settings. The app cannot switch this off;
    • a large job (over 1,000 pages with matches), with the estimate and "Keep this page open while it runs.";
    • a replacement that contains its own find text: running the job again may change the same pages twice;
    • pages where a match touches an inline comment. A match inside a commented stretch keeps its comment; a match that crosses the edge of a comment is left for you to edit by hand;
    • matches that need a manual edit and will be left as they are;
    • titles that will change. Links made with Confluence's link tools keep working; old addresses that contain a page's title (/wiki/display/…), in links or bookmarks, will no longer open the page;
    • a site-wide job: "This job looks at every current space on the site (not archived ones), and at personal spaces only if you included them. Check the pages below before you start.";
    • a job with advanced CQL: "This job uses an advanced CQL search. Check the preview carefully.";
    • "Pages you can't edit, pages with unpublished changes, and pages with a link that Confluence would remove or rewrite if the app saved them are skipped when the job runs." (see "Good to know");
    • "Pages made in Confluence Server or Data Center take the Cloud editor's format when the app saves them, as they do on their next edit in Confluence (for example, a panel's title becomes bold text inside it). Their text and links stay."
  • The page list: 25 pages to a screen, each with a tick box, its title, space ("Personal space" for a personal space), match count and notes. Tick all and Untick all act on the whole job, not only the pages on screen. A page archived since the scan says "archived since the scan; the job will skip it", and one moved to the trash since says "deleted since the scan; the job will skip it".

  • Show matches on a page lists its matches, 50 at a time; Load more adds the next 50 and shows that it is loading. Each match gives the kind of place, the text now ("Now:") and after the change ("After:"), and how the job treats it:

    • a match the job will replace has a tick box and says "Will be replaced";
    • a match you untick says "Unticked: it stays as it is", and shows what ticking it again would do ("If ticked:");
    • a match the job does not change says so in place of a tick box ("Page text, not changed", "Code, not changed", "Title, not changed", "Link address, not changed", "Other places, not changed"), with the reason: its option is not ticked ("Not selected: turn on “Link addresses” under Also change to include it"), it changes nothing ("Changes nothing: the replacement gives the same text"), or it was found where the app does not change text;
    • a match that needs a manual edit keeps its tick box, with the reason (for example "Needs a manual edit: it crosses the edge of a link"); so do title and link-address matches that depend on each other, where unticking one can let another be replaced;
    • on a page you unticked in the list, each match says "Its page is unticked: it stays as it is".

    After you change a tick, the matches are read again in place, as far as you had loaded them. A link address that would have no scheme (like https://) or would contain a space is marked. Above the matches, a note says when the page changed after the preview (its matches will be found again when the job runs), takes too long to search, or was archived or deleted since the scan.

  • Start: the button says "Start" until the page list has come, then "Replace in N pages", the pages that will be saved with the ticks as they are. A job that changes more than 100 pages, or works on the whole site, asks you to type the number of pages to confirm.

While a job runs

  • The screen shows "X of N pages done · Y pages with issues". Pause stops after the batch in progress; Resume goes on; Cancel job stops for good. Pages already changed stay changed, and you can undo them from Activity.
  • Keep the page open. The open page runs the job. If you close it, or leave the page, the job stops where it is: Activity says Running for about three minutes, then Stopped. Open it from Activity and click Resume. Closing the page menu's window (its X, Esc, or a click outside it) pauses the job. No page is changed twice: a resumed job finds the pages it already saved.
  • Waiting. If Confluence asks the app to slow down, the screen says "Waiting a moment before continuing…" and goes on by itself.
  • A paused or stopped job holds its place for 15 minutes after its last batch. After that another job can start in the same place, and yours is marked Interrupted: resume it when the other job has finished.
  • One job at a time per place. Only one job can run in a space at a time, and a job on the whole site or on chosen spaces can't run while any other job runs. If a job can't start, the screen says so; the runner shows who started the job in the way ("Started by").

Confluence's hourly API allowance

Confluence gives each app an hourly allowance of API calls, shared by all the app's customers (Atlassian's documentation). When it is used up, the app waits until the time Confluence gives (when Confluence gives none, until about 30 seconds past the next hour in UTC) and does not keep asking meanwhile. The time is shown in your own time zone, and the screen says what waits:

  • a running job: "Confluence's hourly API allowance for this app is used up. The job continues by itself at {time} if this page stays open, or you can resume it later.";
  • reading pages: "… Reading pages continues by itself at {time} if this page stays open.";
  • a Start, a Pause, a Cancel or a Discard pressed meanwhile: "…so the job cannot start until {time}. This page starts it then if it stays open." (and likewise "cannot be paused", "cannot be cancelled", "cannot be removed"), shown on the preview too for a Discard;
  • a job you opened from Activity that no window runs: "… The job waits until {time}. Resume it to continue by itself after that, for as long as this page stays open."

While it waits, the job keeps its place, and Activity shows it as "Waiting for Confluence", never as Stopped. In Confluence administration and in space settings every action first checks your rights with Confluence, so while the allowance is used up those checks wait too, and opening those screens may fail until it is back. The page menu's window makes no such check.

The report

  • The title says "Done", "Done with issues" or "Cancelled", and a line counts every page of the job: "Pages: N changed · N had nothing to change · N with issues", and "· N unticked" when you left pages out.
  • Pages that need a look come first (pages still waiting for Confluence to answer, then a page whose earlier version could not be put back, are at the top), then Pages the job went through: the changed pages, and pages with nothing to change that carry a note. Pages left out (unticked), and pages with nothing to change and nothing to note, are only counted in the line above. Each row links to the page and its History, and, when the job saved the page, to the saved version and the version before.
  • Reasons you may see:
    • Changed; Nothing to change;
    • You don't have permission to edit this page;
    • The page no longer exists (it was deleted, or moved to the trash); The page was archived, so the job skipped it;
    • The page has unpublished changes, so the job skipped it. Someone has typed changes they have not published; saving the page would lose them, so the app skips such a page. "Good to know" describes a rare case where this check gets it wrong;
    • This page has a link that Confluence would remove or rewrite if the app saved it (a file, macro, emoji, date, placeholder or image from another website inside a link, a link to an attached file, or a shortcut link), so it was skipped. Confluence's editor makes the same change when it publishes the page: after you edit and publish it, check its links and put back any that were removed or changed;
    • This page has content in an older Confluence format (for example from Confluence Server or Data Center) that the app can't check after a save, so it was skipped;
    • This is a live doc, so the job skipped it;
    • The app cannot safely change this page: it is unreadable, too large, has too many matches, or is too slow to search;
    • The page changed after the preview while single matches on it were unticked, so the job did not edit it. Search again;
    • The page kept changing while the job tried to save it;
    • This space requires page approval, so Confluence refused the save;
    • The app's safety check refused the edit, so nothing was saved;
    • Confluence saved something other than the replacement, so the app put the previous version back;
    • Confluence saved something other than the replacement, and the previous version could not be put back. Check this page;
    • Confluence kept failing for this page; Confluence refused the change;
    • Waiting for Confluence to answer for this page; this job's change may already be saved;
    • for an undo: The page was edited after the job, so the undo did not change it.
  • Notes on a page: the title was kept as it was (the new title would be empty or longer than 255 characters, or another page in the space has that title); the page changed after the preview, so its matches were found again; some matches need a manual edit; "Saved; Confluence did not let the app check the save."; and, after a cancel or a failure, "This job's change may be on the page; check its history."
  • Pages you can't open are counted by reason, with no title.

What people see in Confluence

  • Page history. Each changed page gets one new version, made by the person who ran the job, with the message "Tidy Find & Replace job" and the job's ID. Confluence does not mark it as made by an app (there is no "via app" label): the version looks like your own edit, and the message is how you recognise it. An undo adds another version, with "Tidy Find & Replace: undo of job" and the job's ID.
  • Don't put a job's message in a version comment. The app recognises its own saves by their message. If someone gives a version of a page the comment "Tidy Find & Replace job" followed by the ID of a job that has not finished with that page, the job takes that version for its own save. It checks it as its own, and when it is not what the job would have saved and is still the page's latest version, the job saves the version before it back (the person's version stays in the page history).
  • Watchers. Confluence may tell the watchers of each changed page about the change, by e-mail or in its daily digest, depending on their notification settings. The app cannot switch this off.
  • Links to your own site. When the app saves a page, Confluence may store a link to a page, a blog post or a space's home page on your own site in a form of its own: for example, a link to …/wiki/spaces/ENG/overview comes back as …/wiki/spaces/ENG. Such a link opens the same page or space, so the app's check after the save accepts it and puts nothing back.
  • Old versions still hold the old text. If you are removing a password or another secret, the page's history still shows it.

Activity

The Activity tab (My activity in the page menu's window) lists jobs, 20 to a screen: when, who, what, where, status and result. Confluence admins see every job. Space admins see the jobs in their space, page-tree jobs there included. In the page menu's window you see your own jobs for that page. Whoever can see a job can open, resume, pause, cancel or undo it, and what that does runs with the permissions of the person who clicks. A job shows the first pair's find text and replacement to the people who can see it.

  • Where names a personal space in plain words ("a personal space", "a page tree in a personal space"), never by its key.
  • Status: Preparing, Not started, Running, Paused, Done, Done with issues, Cancelled, Interrupted; Stopped for a job that no window has worked on for a few minutes; Waiting for Confluence while the hourly allowance is used up.
  • Open shows the job's preview, progress or report.
  • Run again fills the form with the settings of a find and replace job that has ended; change them if you like, then click Find matches. It makes a new job. A personal space it names shows as "Personal space".
  • Undo (below).

When Atlassian reports a person's account closed, the app removes the link between that person and their jobs, so Who shows "Deleted user", and a job in that person's personal space says "a deleted user's personal space". The jobs stay, so admins can still open and undo them.

Undo

Click Undo on a finished or cancelled job that changed at least one page, then Prepare undo. You see what the undo will do with each page before anything changes, with an estimate of its run, and you can untick pages to undo only some. An interrupted job asks you to resume or cancel it first ("Resume or cancel this job first"), because its record may not show every page it changed yet.

  • Restore: a page whose latest version is still the job's own save (the version with the job's message) gets back the version from before the job, as a new version.
  • Reverse: a page edited since is reversed only when that is safe. Among other checks, the job was one plain-text pair (not a regular expression, not a list, not a deletion), each text it replaced was spelled exactly as the find text, and the page still holds exactly as many copies of the replacement as the job made. Each copy is then replaced with the text the job found, and takes the formatting of its first character. Only the number of copies is checked, not where they are: if one of the job's copies was removed and another copy is on the page, added since or already there before the job, that other copy is reversed. With Whole words only on, a copy of the job's that has since become part of a longer word is not counted. The undo preview shows each copy in context; copies cannot be unticked one by one.
  • Cannot be undone safely: every other page, listed with a link to the page so you can fix it by hand.
  • An undo runs like any job: the same checks before and after each save, pause and cancel.
  • An undo cannot itself be undone, a job that changed nothing has nothing to undo, and a job can be undone once.

Ask Rovo

On sites with Rovo, the Tidy Find & Replace agent is in Rovo's list of agents (Ask Rovo → Change agent). It plans; it never changes a page itself.

  • What to ask: "Replace Acme with Globex in this space, preview first", or "Find pages still linking to our old server". On a page, Rovo uses that page's space; in Atlassian Home, name the space.
  • A find and replace is planned, not run. Rovo asks you to confirm before it plans. The agent then creates the job in one space (its pages and blog posts) and gives you the link to its preview. Nothing changes until you open the preview, check the matches and start the job there, in Tidy Find & Replace. The job is listed in Activity like any other.
  • Texts match literally from Rovo. Match case, whole words only, and changing link addresses are used when you ask for them. Regular expressions, lists of pairs, page titles, code, filters and other places are in the app's form.
  • The same request again. Asking for the same find and replace in the same space with the same options within 15 minutes, before the job is started, gives you the same job and its link, not a second one.
  • The migration scan from Rovo returns the counts of the latest scan of that space, or starts one, with a link to it. It changes nothing. A scan reads while its screen is open: open the link to let it finish. The agent cannot scan again: Scan again is in the app. The day a scan finished is given in the chat as a UTC day ("The scan finished on 2026-10-28 (UTC)."), so it can differ by one from the day the screen shows. A Confluence admin who names no space in Atlassian Home gets a scan of the whole site, without personal spaces.
  • Who may use it: Confluence admins in any space; space admins in their own spaces, when the Settings switch for space admins is on. Anyone else is told who can: "Only Confluence admins and this space's admins can plan a find and replace here." (for the scan: "… can run the migration scan here."). A find and replace needs an active subscription or trial; the scan is free.
  • "Use the request from Rovo". If Confluence asks you to allow Tidy Find & Replace access before it can act for you (as it may until you have opened the app and allowed it), the agent cannot plan for you yet. Your request then waits for up to 24 hours (one request a person; a newer one replaces it), and the app offers it when you open it: on the Find & replace tab, "A find and replace from Rovo is waiting", or on the Migration scan tab, "A migration scan from Rovo is waiting". Use the request from Rovo fills in the form or the scan's place; nothing runs until you choose Find matches, or Estimate then Start scan. Dismiss drops it. A space's settings screen offers only a request for that space.

Settings (Confluence admins)

Two switches, both on until you change them:

  • "Space admins can use Tidy Find & Replace in their spaces";
  • "Page editors can use Tidy Find & Replace from the page menu".

When one is off, the people it names see "Your Confluence admin has turned this off." there and cannot run a job. A job of theirs that has started and not finished can still be cancelled in a window that was already open on it, and paused while that window runs it. From the Activity tab in Confluence administration you can open any of their jobs, cancel one that has started and not finished, or discard one that has not started.

Good to know

  • Limits per job: up to 100 pairs; up to 10,000 pages changed (narrow the place, for example by space, for more); a place with more than 50,000 pages is refused; a page with more than 10,000 matches is skipped; pages larger than 4.5 MB are skipped.
  • Never searched or changed: comments, folders, whiteboards, databases, Smart Links in the content tree, archived pages, pages in the trash, templates and attachments. The app reads a page's unpublished draft only to see whether someone has unpublished changes, and never searches it for matches (the next point says when that check gets it wrong). Text and link addresses inside the legacy content macro are found and counted, never changed.
  • "Unpublished changes" where Confluence shows none. After several saves of the app on a page in a row (a job, its undo, another job), Confluence's shared copy of the page in the editor can stay more than one save behind. The app then reads it as unpublished changes and skips the page. Restoring a version through the page's Version History brings that copy back in step. For an undo, while the job's save is still the page's latest version, restoring the version from before the job does what the undo would have done.
  • Editing a page right after a job. For a while after a job, usually a few minutes but sometimes much longer, Confluence's editor can open a changed page as it was before the job. If you then edit the page and publish, the job's change on it is undone without a warning, and the job's report still counts the page as changed. After a job, wait a few minutes before you edit the pages it changed, and check a page's history after you publish: if the job's change is gone, run the job again on that page.
  • Links Confluence would remove or rewrite. When the app saves a page, Confluence stores it again from the Cloud editor's format, and a few links made in older editors do not survive that: the link around an emoji, a date, a template's placeholder or an image from another website shown in a line of text is dropped, a link to an attached file becomes a file card without its text, and a shortcut link (such as one written [text@google] in an older editor) becomes a plain link that no longer follows the shortcut. The app reads each page before it saves it and skips a page that holds any of these (the report says why), so the app loses nothing. Confluence's editor makes the same change when it publishes such a page: if you edit one by hand, check its links after you publish and put back any that were removed or changed. An image from another website that stands alone in its own paragraph keeps its link at the top of the page and in a table, a list, a quote, a layout column, a panel or an expand; in a task, or anywhere else, the app skips the page. An attached image keeps its link.
  • Pages from Server or Data Center take the Cloud format. When the app saves a page, Confluence stores it in the Cloud editor's format, exactly as it does the next time someone edits the page in Confluence. On a page made in Confluence Server or Data Center that can change how it looks, never the text or links people see: a panel's title becomes bold text inside the panel, a code block's title becomes an expand around it and its line numbers and theme go, a "noformat" block becomes a code block, and some image settings (border, thumbnail, alignment) go. A mention's own link text, which Confluence Cloud never shows (it shows the person's name), is removed. An undo brings back the page's text, not its old format. Confluence marks content its Cloud editor cannot hold, also on pages made in Cloud through its storage format; a page with something to change and a kind of it that the app has not seen survive a save is skipped ("This page has content in an older Confluence format (for example from Confluence Server or Data Center) that the app can't check after a save, so it was skipped.").
  • Search lag. The pickers and filtered jobs use Confluence's search, which can take about two minutes to list new and changed pages.
  • Titles can be 1 to 255 characters. If another page in the space already has the new title, the page text is still changed and the title is kept.
  • Job history is kept for 90 days, up to the newest 500 jobs.
  • If your Tidy Find & Replace subscription isn't active, the screens show a message instead (renew it in Manage apps). The job history is kept, and still expires after 90 days.
  • "Stop and discard" on a migration scan, then leaving at once. While a scan is reading, "Stop and discard" waits for the step the scan is in to end. If you leave the screen before then, the discard may never be sent: the scan stays in the list, unfinished, keeps holding its pages, and reads on when you open it again. If that happens, open the scan from the list and press "Stop and discard" again, or let it finish.

Migration scan

After a move from Confluence Server or Data Center to Cloud, links can still point at the old server. The migration scan finds them, counts them by pattern and fixes the ones Cloud can resolve, through the usual preview, run, report and undo. It changes nothing by itself.

1. Who may run it, and what it counts.

  • Confluence admins, in Confluence administration → Apps → Tidy Find & Replace → Migration scan: the whole site (with Include personal spaces), chosen spaces, or one space. Space admins, in their space's settings, for that space (the Settings switch for space admins applies). Not from the page menu.
  • The scan reads every page and blog post there and looks at every address: in links, smart links and linked images, in page text, titles and code, and in macro settings and legacy content. It counts the links that point at the old server by pattern, with the pages and spaces that hold them, and the pages that also name the old server in text or in other places.
  • Before it starts, Estimate says about how many pages it will read and how long that takes ("About N pages, about M minutes."), and how much of Confluence's hourly allowance it uses ("About N points of the 65,000 every customer shares each hour."); Start scan works once you have seen the estimate of that place. Like any job, it is driven by the open page and waits for Confluence's hourly allowance; if you close the page, open the Migration scan tab again: it opens your scan that is still reading, and goes on (another admin's is listed, with Open). While it reads, Back leaves it as it is, to go on when you open it again from the list, and Stop and discard removes it.
  • The scan is free: it works without an active subscription. Fixing needs an active subscription or trial; without one, the screen says "Fixing needs an active subscription or trial; free for up to 10 users. Open Manage apps to start one." in place of the Fix button.

2. Confirming the old server. The scan finds hosts that look like an old Confluence server from the shape of their addresses (such as /display/… or viewpage.action) and lists them with their links. A label address, and a calendar address other than Team Calendars', make no host a candidate, since ordinary sites have them. Atlassian's own sites, atlassian.com and every address under it (such as Atlassian's documentation at confluence.atlassian.com, which a new space's home page links to), are never offered as old servers either: your old server never ran there. To count links to one anyway, type its host by hand (below). Tick the hosts that were your old server; until you do, the headline reads "{links} links to {n} hosts that look like old servers; confirm them below". For each host choose:

  • an old Confluence server: its page, space and blog post links are resolved by name on Cloud; or
  • a renamed host: every address on it moves to the new host, path unchanged.

You can also type a host by hand: it is counted on the next Scan again. A host can't be moved onto this site's own address: confirm it as an old server instead, so that its old paths are resolved. Candidates are guesses: confirm only hosts you know. The first scan counted the hosts before you confirmed them, and a host typed by hand is counted only by the next scan, so the numbers may miss some links: the screen says "Some links on these hosts may not be counted yet." and offers Scan again for exact numbers.

3. What can be fixed, and why the rest cannot.

  • Fixed: links to a page by space and title (/display/KEY/Title, viewpage.action?spaceKey=…&title=…), to a space's home (/display/KEY), and to a blog post by space, date and title, when exactly one page or blog post of that title is in that space on Cloud (letter case aside; an exact match wins; a blog post also on the date in its address, which must be the post's own); and every address on a renamed host. The fix writes the page's address by its ID, which keeps working after a rename.
  • Reported, not fixed: links by page ID (pageId=), tiny links (/x/…) and attachment links, because Cloud gives new IDs and Atlassian has no self-serve map from old IDs to new ones (MIG-507); links to personal spaces (old user names do not map to Cloud accounts); other Server paths (labels, calendars and the like); and addresses inside macro settings or legacy content, which the app never changes. A title that could not be read safely (for example one holding %2B, which Confluence reads as a space) is left for a manual edit.
  • The scan's table says "Fixable, preview first: up to N, …" for each pattern it can fix, and the line under the button "Up to N can be fixed; M are report-only, see the table; the preview shows exactly which.", because titles are looked up only when the fix plans. Click Fix up to N — preview first: the fix's preview shows exactly which links it changes, and why the others need a manual edit ("Needs a manual edit: the app found no page with this title in the space this address names", "… more than one page has this title in that space", "… the app found no space with the key this address names", and so on). A page moved to another space since the migration is not fixed.
  • A fix changes link addresses only, never text, titles or code. Its undo restores the pages nobody edited since; a fix is never reversed. One fix can change up to 10,000 pages, which is also the most one scan lists, so a fix covers its whole scan.

4. The cap and Tier 2. While the app is on Atlassian's default API tier, where every customer of the app shares one hourly allowance, one scan reads at most 10,000 pages. A larger place is refused: "There are more than 10,000 pages here. Choose spaces: a scan of this size would use most of the hourly allowance every customer shares." A 10,000-page scan uses about 10,200 of the 65,000 points of that allowance, as the estimate says before it starts. The cap goes when Atlassian grants the app its own allowance per customer (Tier 2) and a later version of the app lifts it.

5. Scan again. Scan again makes a new scan of the same place, with the hosts you confirmed already ticked. Earlier scans stay in Activity as "Migration scan" until they expire after 90 days. A host you typed by hand is counted from the next scan on.

6. Old addresses in page text. An address written as text, not as a link, is counted "In page text" and is not changed by the fix. The screen offers Replace the old server's address in page text, which opens Find & replace filled in with each old host and its new one (this site's for an old server), for page text only and whole words, with its own preview. Whole words keep out a host that only ends with the old one's name, but a longer host that holds it between dots or dashes (docs.old-server) is found too: the screen says to check the preview, where you can untick such matches. The offer is not made for a scan of a deleted user's personal space, which cannot be named again (nor can it be scanned again). Cloud opens old-style page addresses only under /wiki: if your text holds addresses like https://old-server/display/ENG/Page, include /display/ on both sides (old-server/display/ → your-site/wiki/display/), so that they become https://your-site/wiki/display/ENG/Page, which Cloud opens by title.

7. The rest, report only. Each list says "Confluence cannot change these by API; here is where they are." A list cut at 2,000 pages says so: "Pages without old links are listed up to the first 2,000."

  • Macros from apps, by name, with how many pages hold each: check each name in the macro browser (the app cannot tell whether an app's macro still works: a macro whose app is not installed shows a placeholder instead of its content).
  • Pages holding Atlassian's legacy content macro, where the cloud editor keeps content from the old editor that it cannot hold.
  • Pages the app could not read.
  • Space shortcuts: "Confluence has no API for space shortcuts; if shortcuts to other spaces vanished (MIG-1608), ask Atlassian Support to restore them in bulk."