Automations
Use DriveMate SheetsApex Actions to manage Google Sheets spreadsheets and their data from Flows or Apex code.
DriveMate Sheets Apex Actions
Create Spreadsheet
Action Name
Create Spreadsheet
Description
Create a new, empty Google Sheets spreadsheet.
Input Parameters
- Spreadsheet Title (required): Title of the new spreadsheet.
- Parent Folder Id (optional): ID of the Google Drive folder where the spreadsheet will be created. If not specified, it will be created in the root of Google Drive.
Output
- Spreadsheet ID: ID of the newly created spreadsheet.
- Spreadsheet URL: Direct URL to open the created spreadsheet in Google Sheets.
Apex Code Sample
List<GDCreateSpreadsheetInvocable.CreateSpreadsheetPayload> payloads = new List<GDCreateSpreadsheetInvocable.CreateSpreadsheetPayload>();
GDCreateSpreadsheetInvocable.CreateSpreadsheetPayload payload = new GDCreateSpreadsheetInvocable.CreateSpreadsheetPayload();
payload.title = 'My Spreadsheet';
payload.parentFolderId = '<Parent Folder ID>';
payloads.add(payload);
List<GDCreateSpreadsheetInvocable.CreateSpreadsheetResponse> responses = GDCreateSpreadsheetInvocable.createSpreadsheet(payloads);
String spreadsheetId = responses[0].spreadsheetId;
String spreadsheetUrl = responses[0].spreadsheetUrl;
Create Spreadsheet with Data
Action Name
Create Spreadsheet with Data
Description
Create a new Google Sheets spreadsheet together with a named sheet and its initial row data - all in a single API call.
Each row is passed as a comma-separated string of cell values (e.g. "Alice,30,Engineer"). The rows are written to the sheet in the order they are provided.
Input Parameters
- Spreadsheet Title (required): Title of the new spreadsheet.
- Sheet Name (required): Name of the sheet (tab) to create inside the spreadsheet.
- Rows (required): List of rows to populate. Each row is a comma-separated string of cell values (e.g.
"Alice,30,Engineer"). - Parent Folder Id (optional): ID of the Google Drive folder where the spreadsheet will be created. If not specified, it will be created in the root of Google Drive.
Output
- Spreadsheet ID: ID of the newly created spreadsheet.
- Spreadsheet URL: Direct URL to open the created spreadsheet in Google Sheets.
Apex Code Sample
List<GDCreateSpreadsheetWithDataInvocable.CreateSpreadsheetWithDataPayload> payloads = new List<GDCreateSpreadsheetWithDataInvocable.CreateSpreadsheetWithDataPayload>();
GDCreateSpreadsheetWithDataInvocable.CreateSpreadsheetWithDataPayload payload = new GDCreateSpreadsheetWithDataInvocable.CreateSpreadsheetWithDataPayload();
payload.title = 'My Spreadsheet';
payload.sheetName = 'Employees';
payload.rows = new List<String>{ 'Name,Age,Role', 'Alice,30,Engineer', 'Bob,25,Designer' };
payload.parentFolderId = '<Parent Folder ID>';
payloads.add(payload);
List<GDCreateSpreadsheetWithDataInvocable.CreateSpreadsheetResponse> responses = GDCreateSpreadsheetWithDataInvocable.createSpreadsheet(payloads);
String spreadsheetId = responses[0].spreadsheetId;
String spreadsheetUrl = responses[0].spreadsheetUrl;
Create Sheet
Action Name
Create Sheet
Description
Create a new sheet (tab) inside an existing Google Sheets spreadsheet. Optionally populate the new sheet with initial row data.
If rows are provided, two API calls are made: one to create the sheet and a second to append the rows. Without rows, only a single API call is made.
Input Parameters
- Spreadsheet ID (required): ID of the spreadsheet to add the sheet to.
- Sheet Title (required): Title of the new sheet.
- Rows (optional): List of rows to populate. Each row is a comma-separated string of cell values (e.g.
"Alice,30,Engineer").
Output
- Sheet ID: Numeric ID of the newly created sheet.
- Sheet Title: Title of the newly created sheet.
- Sheet Index: Zero-based position of the sheet within the spreadsheet.
Apex Code Sample
List<GDCreateSheetInvocable.CreateSheetPayload> payloads = new List<GDCreateSheetInvocable.CreateSheetPayload>();
GDCreateSheetInvocable.CreateSheetPayload payload = new GDCreateSheetInvocable.CreateSheetPayload();
payload.spreadsheetId = '<Spreadsheet ID>';
payload.sheetTitle = 'Q1 Results';
payload.rows = new List<String>{ 'Month,Revenue,Expenses', 'January,10000,8000' };
payloads.add(payload);
List<GDCreateSheetInvocable.CreateSheetResponse> responses = GDCreateSheetInvocable.createSheet(payloads);
Integer sheetId = responses[0].sheetId;
String sheetTitle = responses[0].sheetTitle;
Integer sheetIndex = responses[0].sheetIndex;
Append Row to Sheet
Action Name
Append Row to Sheet
Description
Append a single row of data to a Google Sheets spreadsheet. When used inside a Flow loop, multiple payloads targeting the same sheet are automatically combined into a single API call.
Cell values can be provided either as a list of strings (Values) or as a single comma-separated string (Comma-Separated Values). If both are provided, the list takes precedence.
Input Parameters
- Spreadsheet ID (required): ID of the target spreadsheet.
- Sheet Name (required): Name of the sheet (tab) to append the row to.
- Values (optional): Cell values as a list of strings. Provide either this or Comma-Separated Values.
- Comma-Separated Values (optional): Cell values as a single comma-separated string (e.g.
"Alice,30,Engineer"). Provide either this or Values.
Output
None
Apex Code Sample
List<GDAppendRowInvocable.AddRowPayload> payloads = new List<GDAppendRowInvocable.AddRowPayload>();
GDAppendRowInvocable.AddRowPayload payload = new GDAppendRowInvocable.AddRowPayload();
payload.spreadsheetId = '<Spreadsheet ID>';
payload.sheetName = 'Sheet1';
payload.commaSeparatedValues = 'Alice,30,Engineer';
payloads.add(payload);
GDAppendRowInvocable.appendRow(payloads);
Append Rows to Sheet
Action Name
Append Rows to Sheet
Description
Append multiple rows of data to a Google Sheets spreadsheet in a single API call. When multiple payloads target the same sheet, they are automatically combined.
Use this action instead of Append Row to Sheet when all rows are available at once, to minimise API calls.
Input Parameters
- Spreadsheet ID (required): ID of the target spreadsheet.
- Sheet Name (required): Name of the sheet (tab) to append rows to.
- Rows (required): List of rows to append. Each row is a comma-separated string of cell values (e.g.
"Alice,30,Engineer").
Output
None
Apex Code Sample
List<GDAppendMultipleRowsInvocable.AddRowsPayload> payloads = new List<GDAppendMultipleRowsInvocable.AddRowsPayload>();
GDAppendMultipleRowsInvocable.AddRowsPayload payload = new GDAppendMultipleRowsInvocable.AddRowsPayload();
payload.spreadsheetId = '<Spreadsheet ID>';
payload.sheetName = 'Sheet1';
payload.rows = new List<String>{ 'Alice,30,Engineer', 'Bob,25,Designer', 'Charlie,35,Manager' };
payloads.add(payload);
GDAppendMultipleRowsInvocable.appendRows(payloads);
Delete Row from Sheet
Action Name
Delete Row from Sheet
Description
Delete a single row from a Google Sheets spreadsheet. Row numbers are 1-based, so row 1 is the first row (e.g. a header), and row 2 is the first data row.
When used inside a Flow loop, multiple payloads targeting the same sheet are automatically combined into a single API call.
The sheet can be identified either by Sheet Name or by Sheet ID. Using Sheet ID is more efficient as it avoids an extra API lookup callout.
Input Parameters
- Spreadsheet ID (required): ID of the target spreadsheet.
- Sheet Name (optional): Name of the sheet (tab). Provide either this or Sheet ID.
- Sheet ID (optional): Numeric ID of the sheet. Provide either this or Sheet Name. Skips an extra API lookup callout.
- Row Number (required): 1-based number of the row to delete (e.g.
2= first data row after a header).
Output
None
Apex Code Sample
List<GDDeleteRowInvocable.DeleteRowPayload> payloads = new List<GDDeleteRowInvocable.DeleteRowPayload>();
GDDeleteRowInvocable.DeleteRowPayload payload = new GDDeleteRowInvocable.DeleteRowPayload();
payload.spreadsheetId = '<Spreadsheet ID>';
payload.sheetName = 'Sheet1';
payload.rowNumber = 2;
payloads.add(payload);
GDDeleteRowInvocable.deleteRow(payloads);
Delete Rows from Sheet
Action Name
Delete Rows from Sheet
Description
Delete multiple rows from a Google Sheets spreadsheet in a single API call. Row numbers are 1-based, so row 1 is the first row (e.g. a header), and row 2 is the first data row.
When multiple payloads target the same sheet, their row numbers are combined and deleted together. Rows are always deleted in descending order to prevent row index shifting.
The sheet can be identified either by Sheet Name or by Sheet ID. Using Sheet ID is more efficient as it avoids an extra API lookup callout.
Input Parameters
- Spreadsheet ID (required): ID of the target spreadsheet.
- Sheet Name (optional): Name of the sheet (tab). Provide either this or Sheet ID.
- Sheet ID (optional): Numeric ID of the sheet. Provide either this or Sheet Name. Skips an extra API lookup callout.
- Row Numbers (required): List of 1-based row numbers to delete (e.g.
[2, 5, 7]).
Output
None
Apex Code Sample
List<GDDeleteMultipleRowsInvocable.DeleteRowsPayload> payloads = new List<GDDeleteMultipleRowsInvocable.DeleteRowsPayload>();
GDDeleteMultipleRowsInvocable.DeleteRowsPayload payload = new GDDeleteMultipleRowsInvocable.DeleteRowsPayload();
payload.spreadsheetId = '<Spreadsheet ID>';
payload.sheetName = 'Sheet1';
payload.rowNumbers = new List<Integer>{ 2, 5, 7 };
payloads.add(payload);
GDDeleteMultipleRowsInvocable.deleteRows(payloads);
Edit Row in Sheet
Action Name
Edit Row in Sheet
Description
Update specific cells in Google Sheets rows that match the given filter criteria. Only the columns specified in Updates are changed; all other columns are left untouched.
Criteria is a JSON object that defines which rows to match:
{
"conditions": [
{ "column": "A", "operator": "=", "value": "Alice" },
{ "column": "B", "operator": ">", "value": "25" }
],
"conditionLogic": "1 AND 2"
}
conditions: list of individual filter conditions. Each condition references a column by its letter (A,B,AA, …), a comparison operator, and a value.conditionLogic: optional expression combining condition numbers (e.g."(1 OR 2) AND 3"). When omitted, all conditions must match (AND logic).
Supported operators: =, !=, >, <, >=, <=, CONTAINS, STARTS_WITH.
Numeric comparisons are attempted automatically - if both the cell value and the condition value can be parsed as numbers, a numeric comparison is used. Otherwise, string comparison applies.
Updates is a semicolon-separated string specifying which columns to update and with what value (e.g. "B=31;C=Manager"). To include a literal = in a value, the first = in each segment is used as the delimiter.
If no rows match the criteria, the action succeeds silently without making an update call.
Input Parameters
-
Spreadsheet ID (required): ID of the target spreadsheet.
-
Sheet Name (required): Name of the sheet (tab) to search and update.
-
Criteria (required): JSON string defining the filter criteria (see format above).
-
Updates (required): Semicolon-separated column update string (e.g.
"B=NewValue;C=OtherValue"). -
Matching Option (optional): Controls which matching rows are updated. Accepted values (case-insensitive):
all(default) - update all matching rows.first_only- update only the first matching row.last_only- update only the last matching row.
Invalid values are silently ignored and fall back to
all.
Output
None
Apex Code Sample
List<GDEditRowInvocable.EditRowPayload> payloads = new List<GDEditRowInvocable.EditRowPayload>();
GDEditRowInvocable.EditRowPayload payload = new GDEditRowInvocable.EditRowPayload();
payload.spreadsheetId = '<Spreadsheet ID>';
payload.sheetName = 'Sheet1';
payload.criteria = '{"conditions":[{"column":"A","operator":"=","value":"Alice"}]}';
payload.updates = 'B=31;C=Senior Engineer';
payload.matchingOption = 'first_only';
payloads.add(payload);
GDEditRowInvocable.editRow(payloads);