Block reference / Online services

Google Sheets

Read rows from a Google Sheet, keep only the ones you want, or write, append and clear cells.

In both appsWarpX BrowserWarpX Phone

Use this block to take input from a spreadsheet, or to hand results back to one. Public reads a sheet anyone with the link can view, with no sign-in. Private signs in as a Google service account and can also update, append and clear. When reading, you can filter the rows in the block itself, so a large sheet does not travel through the rest of the run.

The Google Sheets block's settings, filled in as in the example below.

Settings

Public / Private

The two choices at the top of the block. Public reads a sheet shared as "Anyone with the link" and only offers Get. Private signs in with a service account key and offers every action.

ExamplePrivate
Service accountwhen Private is selected

Press Select file (json) and choose the JSON key you downloaded for the service account. The button then shows the file's name, and the bin icon beside it removes the key.

Exampleacme-sheets-bot-4f2a9c1e7b3d.json
Action

The menu under the sign-in choice. Get spreadsheet values reads cells, Update spreadsheet cell values overwrites a range, Append spreadsheet cell values adds rows after the data, and Clear spreadsheet cell values empties a range. Public shows Get only.

ExampleGet spreadsheet values
Spreadsheet Url or ID

Paste the sheet's whole address or just its id. The block keeps only the id, the part after /spreadsheets/d/. You can use a reference such as {{variables.sheetId}}.

Example1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms
Range

The cells to work on, in A1 notation: the tab's name, !, then the cells. Orders!A1:E is columns A to E of the Orders tab, every row. Required for every action.

ExampleOrders!A1:E
Reference key (optional)when Action is Get spreadsheet values

A name for the rows this block reads. Later blocks read them as {{googleSheets.orders}}, and Loop data can loop over them with Loop through set to Google Sheets.

Exampleorders
Use the first row as keyswhen Action is Get spreadsheet values

On, each row becomes an object named by the header row, such as {"Order ID": "1042", "Status": "paid"}, and the header itself is not returned. Off, each row is a list of cells and the header comes back as the first row.

ExampleChecked
Rows must matchwhen Action is Get spreadsheet values

In the Conditions dialog. all conditions keeps a row only if every condition passes. any condition keeps it if one passes.

Exampleall conditions
Only keep rows wherewhen Action is Get spreadsheet values

Press Conditions, then Add condition for each rule: a column, an operator and a value. With Use the first row as keys on, the column is the header name, in any letter case. Off, it is a column letter (A, B, AA) or a number counting from 1.

Example
Status | is | paid
Total | greater than | 100
Email | is not empty
Value input optionwhen Action is Update or Append

RAW stores each value exactly as given. USER_ENTERED treats it as if you typed it into the sheet, so =SUM(C2:C9) becomes a formula and 2026-09-19 a date.

ExampleUSER_ENTERED
Insert data optionwhen Action is Append

INSERT_ROWS inserts new rows below the existing data. OVERWRITE writes into the empty cells after the data without inserting rows.

ExampleINSERT_ROWS
Data fromwhen Action is Update or Append

Where the rows to write come from. Table is the workflow's table. Variable is a variable holding a list of objects or a list of rows. Custom is JSON you write in the block.

ExampleTable
Variable namewhen Data from is Variable

The variable that holds the rows. Write the bare name or {{variables.newOrders}}. A variable holding JSON text is read as JSON.

ExamplenewOrders
Insert datawhen Data from is Custom

Opens the Custom data editor. Write a list of rows, as above, or a list of objects such as [{"Order ID": "1043", "Status": "paid"}]. References like {{variables.email}} are filled in when the block runs.

Example
[
  ["1043", "[email protected]", "paid", 129.5],
  ["1044", "[email protected]", "refunded", 0]
]
Match columns to the sheet headerwhen Action is Append

Puts each value under the header cell with the same name, ignoring letter case. Keys with no matching column are skipped. An empty sheet gets the keys as its header row.

ExampleChecked
Use keys as the first rowwhen Action is Update

When the data is a list of objects, writes their keys as a header row above the values. Leave it off to write the values alone.

ExampleChecked

Every block also has the shared block settings — a description, Disable block and what to do on an error. Fields that take text accept data from earlier blocks.

What it hands on

Get hands the rows it kept to the next block, which reads them as {{prevBlockData}}. With a Reference key (optional) they are also kept as {{googleSheets.<key>}} for the rest of the run, for example {{googleSheets.orders.0.Email}}. When a filter is set, the run log line says how many rows it kept, such as 3 of 120 rows. Update, Append and Clear hand nothing on. The block leaves by its single output.

Example: Read today's paid orders and fill a form for each

  1. Start
  2. Google Sheets
  3. Loop data
  4. Forms
Where Google Sheets sits in the example workflow.
  1. In Google Cloud, open your project, enable the Google Sheets API, create a service account and download a JSON key for it.
  2. Open the key file and copy its client_email, for example [email protected]. In the spreadsheet, press Share and add that address as a Viewer.
  3. In the editor, add Google Sheets after Start. Choose Private and press Select file (json) to pick the key.
  4. Leave the action on Get spreadsheet values. Paste 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms into Spreadsheet Url or ID and Orders!A1:E into Range.
  5. Set Reference key (optional) to orders and tick Use the first row as keys.
  6. Press Conditions, then Add condition: Status, is, paid. Close the dialog and press Preview data. It shows the rows and a line such as 3 of 120 rows kept.
  7. Add Loop data after it, set Loop through to Google Sheets, Reference key to orders and Loop ID to order.
  8. In the Forms block inside the loop, set the value to {{loopData.order.Email}}.

Good to know

  • Private mode signs in only with a service account key. It does not use the Google account you connect in WarpX Browser's Settings, which is for profile backups.
  • The service account can only open sheets shared with its email address, the client_email in the key file. Share as Viewer to read, or as Editor to update, append or clear. The Google Sheets API must be enabled in the key's project.
  • The key file's whole contents are stored in the block. Anyone you give an exported copy of the workflow also gets the key. The WarpX Browser assistant never sees the key and cannot set it, so you pick the file yourself.
  • In Public mode the sheet must be shared as "Anyone with the link". Always write a range with !, such as Orders!A:E: a bare tab name like Orders is not read as a tab in Public mode. Values arrive as the text the sheet displays.
  • Without Use the first row as keys, a condition's column letter counts from the first column of Range, not of the sheet. With Orders!C1:E, A means column C.
  • Operators: is, is not, contains, does not contain, starts with, ends with, greater than, greater than or equal, less than, less than or equal, matches regex, is empty, is not empty. Text comparisons ignore letter case, except matches regex. When both sides are numbers they compare as numbers, and 1,299 counts as 1299.
  • A condition's column and value can both be references, such as {{variables.status}}. Preview data cannot know a variable's value, so it skips those conditions and says how many it skipped. They apply when the workflow runs.
  • A condition with no column, or no value for an operator that needs one, is ignored. A regular expression that does not compile matches no row.
  • The filter works after the range is downloaded. It keeps the unwanted rows out of the run, not out of the download, so a tight Range is still faster.
  • Nested objects are written into a cell as JSON. 0 and false are written as values, and only a missing value leaves a cell empty.

See also

  • Loop data — Run the blocks after it once for each row, number, list item or element.
  • BigQuery — Run SQL against BigQuery, or insert and upsert rows into a table, signed in with a service account.
  • HTTP request — Sends an HTTP request to a URL and can store the response.