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

  1. Bind 'Spreadsheet Url' to the full Google Sheets URL (https://docs.google.com/spreadsheets/d/<id>/edit).
  2. Use the spreadsheet picker so Appsmith stores the URL correctly in formData.
  3. If binding dynamically, gate the run: {{ !!urlInput.text && urlInput.text.includes('/spreadsheets/d/') }}.
  4. 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

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.