appsmithorg/appsmith · error · AppsmithPluginException
PE-ARG-5000
PE-ARG-5000
Error message
Missing required field 'Spreadsheet Url'
What it means
Thrown by RowsUpdateMethod.validateExecutionMethodRequest (the 'Update Rows' / Update Many action) when MethodConfig.spreadsheetId is null or blank. spreadsheetId is parsed from the spreadsheet URL, so a missing/blank value almost always means the URL was empty or did not match the expected pattern. Message: MISSING_SPREADSHEET_URL_ERROR_MSG = "Missing required field 'Spreadsheet Url'".
Source
Thrown at app/server/appsmith-plugins/googleSheetsPlugin/src/main/java/com/external/config/RowsUpdateMethod.java:50
/**
* API reference: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/update
*/
public class RowsUpdateMethod implements ExecutionMethod, TemplateMethod {
ObjectMapper objectMapper;
public RowsUpdateMethod(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
public RowsUpdateMethod() {}
@Override
public boolean validateExecutionMethodRequest(MethodConfig methodConfig) {
if (methodConfig.getSpreadsheetId() == null
|| methodConfig.getSpreadsheetId().isBlank()) {
throw new AppsmithPluginException(
AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR, ErrorMessages.MISSING_SPREADSHEET_URL_ERROR_MSG);
}
if (methodConfig.getSheetName() == null || methodConfig.getSheetName().isBlank()) {
throw new AppsmithPluginException(
AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR,
ErrorMessages.MISSING_SPREADSHEET_NAME_ERROR_MSG);
}
if (methodConfig.getTableHeaderIndex() != null
&& !methodConfig.getTableHeaderIndex().isBlank()) {
try {
if (Integer.parseInt(methodConfig.getTableHeaderIndex()) <= 0) {
throw new AppsmithPluginException(
AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR,
ErrorMessages.INVALID_TABLE_HEADER_INDEX);
}
} catch (NumberFormatException e) {
throw new AppsmithPluginException(
AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR,View on GitHub (pinned to 8cd9021c24)
Solutions
- Bind 'Spreadsheet Url' to the full Google Sheets URL (https://docs.google.com/spreadsheets/d/<id>/edit).
- Use the spreadsheet picker so Appsmith stores the URL correctly in formData.
- If binding dynamically, gate the run: {{ !!urlInput.text && urlInput.text.includes('/spreadsheets/d/') }}.
- Trim whitespace in the binding: {{ urlInput.text.trim() }}.
Example fix
// Before
{{ formValues.url }}
// After
{{ formValues.url?.trim() }}
// and conditional run
{{ !!formValues.url && formValues.url.includes('/spreadsheets/d/') }} Defensive patterns
Strategy: validation
Validate before calling
const url = (formValues.url || '').trim();
const isSheetsUrl = /\/spreadsheets\/d\//.test(url);
if (!url || !isSheetsUrl) {
showAlert('A valid Google Sheets URL is required', 'error');
} else {
runQuery();
} Type guard
function isGoogleSheetsUrl(v) {
return typeof v === 'string' && /^https:\/\/docs\.google\.com\/spreadsheets\/d\/.+\/.*/.test(v.trim());
} Prevention
- Always use the spreadsheet picker to populate the URL.
- Trim whitespace and validate the /spreadsheets/d/ segment.
- Make the query run conditional on a valid URL.
When it happens
Trigger: Running an Update Rows query with the 'Spreadsheet URL' field unbound or bound to an empty variable; the URL was a full URL but the upstream URL-to-id parser produced blank (e.g. malformed URL); user picked a sheet via the old picker but the URL field did not populate.
Common situations: Datasource configured but the per-query URL binding is empty; URL pasted without https://docs.google.com prefix; copy-paste included trailing spaces the parser rejected; the bound URL widget returned '' on first load.
Related errors
AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12).
Data as JSON: /api/errors/d3bfa499e75fef7f.
Report an issue: GitHub.