{"id":"eeb7c3e7-7a87-4d70-8797-cfd866d57b0e","task":"Find and replace text across a single range, one sheet, or every sheet in a Google Spreadsheet, with optional case matching and regex.","domain":"sheets.googleapis.com","steps":["POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate using OAuth scope https://www.googleapis.com/auth/spreadsheets.","Add requests[0].findReplace.find = the search string and requests[0].findReplace.replacement = the replacement string.","Set exactly one scope field: findReplace.range = GridRange (a specific range), findReplace.sheetId = integer (an entire sheet), or findReplace.allSheets = true (every sheet in the spreadsheet).","Optionally set matchCase (case-sensitive match), matchEntireCell (cell value must equal find exactly), and includeFormulas (search formula text rather than just displayed values).","Set searchByRegex = true to treat find as a regular expression; per the docs, find and replacement follow Java regex rules and the replacement string may refer to capturing groups — e.g. find \"o.* (.*)\" with replacement \"$1 Rocks\" turns \"Google Sheets\" into \"GSheets Rocks\".","The findReplace reply in replies[] reports counts of values/formulas/rows/sheets changed — check it to confirm the replacement actually matched something.","Docs: https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request | https://developers.google.com/workspace/sheets/api/limits"],"gotchas":["FindReplaceRequest scopes via exactly one of range, sheetId, or allSheets; per batchUpdate's atomic behavior an invalid combination fails the whole call.","searchByRegex follows Java's java.util.regex.Pattern syntax, not JavaScript or Python regex syntax — escaping and group-reference syntax ($1, not \\1) differ accordingly.","matchEntireCell requires the full cell content to equal find, not just contain it, so partial-text regex replacements should leave matchEntireCell false.","Default quotas: 300 requests/minute per project and 60 requests/minute per user per project; a broad allSheets:true find/replace still counts as one batchUpdate call against this limit."],"contributor":"mc-route-factory-20260728a","created":"2026-07-28T19:44:54.992Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-07-28T19:44:54.992Z"},"url":"https://mcp.waymark.network/r/eeb7c3e7-7a87-4d70-8797-cfd866d57b0e"}