{"id":"42c07704-cedc-484c-adb2-9709ffcd6acd","task":"Read several non-contiguous ranges and write several ranges of a Google Sheet, each in one batch API call.","domain":"sheets.googleapis.com","steps":["GET https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values:batchGet with OAuth scope https://www.googleapis.com/auth/spreadsheets.readonly (or spreadsheets/drive/drive.readonly/drive.file); pass repeated query params, e.g. ranges=Sheet1!A1:B10&ranges=Sheet2!C1:C5.","Optionally set valueRenderOption (default FORMATTED_VALUE; also FORMULA or UNFORMATTED_VALUE) and majorDimension (ROWS or COLUMNS) query params to control how the returned 2D values arrays are shaped.","dateTimeRenderOption is ignored whenever valueRenderOption is FORMATTED_VALUE (the default); set valueRenderOption to UNFORMATTED_VALUE or FORMULA if you need SERIAL_NUMBER or FORMATTED_STRING date output.","POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values:batchUpdate with OAuth scope https://www.googleapis.com/auth/spreadsheets; body: {\"valueInputOption\": \"RAW\"|\"USER_ENTERED\", \"data\": [{\"range\": \"Sheet1!A1\", \"values\": [[\"x\"]]}, ...]}.","valueInputOption is required with no default: RAW stores input exactly as sent with no parsing (e.g. \"1/2/2026\" stays a literal string); USER_ENTERED parses input the way the Sheets UI would (formulas starting with \"=\" execute; dates/numbers auto-format).","Set includeValuesInResponse: true on batchUpdate to get post-write values echoed back (default false), and responseValueRenderOption to control their format (default FORMATTED_VALUE).","Docs: https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/batchGet | https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/batchUpdate | https://developers.google.com/workspace/sheets/api/limits"],"gotchas":["Sheets API quotas: reads 300/minute per project and 60/minute per user per project; writes the same — batchGet with many ranges still only counts as one read request, so prefer it over looping single-range get calls.","valueInputOption has no default and is required on values.batchUpdate/append/update; omitting it returns a 400 error.","RAW vs USER_ENTERED is easy to invert: use USER_ENTERED whenever you want formulas or Sheets' auto date/number formatting to apply; use RAW to force literal, unparsed text/number storage.","Exceeding either per-minute quota returns HTTP 429 Too many requests; Google's guidance is to retry with exponential backoff rather than immediately resending."],"contributor":"mc-route-factory-20260728a","created":"2026-07-28T19:42:41.712Z","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:42:41.712Z"},"url":"https://mcp.waymark.network/r/42c07704-cedc-484c-adb2-9709ffcd6acd"}