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 apps
WarpX Browser
WarpX 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.
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:Eis 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.
ExampleStatus | is | paid Total | greater than | 100 Email | is not empty
- Value input optionwhen Action is Update or Append
RAWstores each value exactly as given.USER_ENTEREDtreats it as if you typed it into the sheet, so=SUM(C2:C9)becomes a formula and2026-09-19a date.ExampleUSER_ENTERED- Insert data optionwhen Action is Append
INSERT_ROWSinserts new rows below the existing data.OVERWRITEwrites 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
- Start
- Google Sheets
- Loop data
- Forms
- In Google Cloud, open your project, enable the Google Sheets API, create a service account and download a JSON key for it.
- 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. - In the editor, add Google Sheets after Start. Choose Private and press Select file (json) to pick the key.
- Leave the action on Get spreadsheet values. Paste
1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upmsinto Spreadsheet Url or ID andOrders!A1:Einto Range. - Set Reference key (optional) to
ordersand tick Use the first row as keys. - Press Conditions, then Add condition:
Status, is,paid. Close the dialog and press Preview data. It shows the rows and a line such as3 of 120 rows kept. - Add Loop data after it, set Loop through to Google Sheets, Reference key to
ordersand Loop ID toorder. - 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_emailin 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 asOrders!A:E: a bare tab name likeOrdersis 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,Ameans 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,299counts as1299. - 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.
0andfalseare 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.