appsmithorg/appsmith · error · AppsmithPluginException

PE-ARG-5000

PE-ARG-5000

Error message

Missing required field 'Spreadsheet Url'

What it means

RowsGetMethod.validateExecutionMethodRequest throws when spreadsheetId is null or blank. The read-rows flow needs a target spreadsheet URL. Code PE-ARG-5000; message says 'Spreadsheet Url' to match the datasource field label.

Source

Thrown at app/server/appsmith-plugins/googleSheetsPlugin/src/main/java/com/external/config/RowsGetMethod.java:59

    public RowsGetMethod() {}

    // Used to capture the range of columns in this request. The handling for this regex makes sure that
    // all possible combinations of A1 notation for a range map to a common format
    Pattern findAllRowsPattern = Pattern.compile("([a-zA-Z]*)\\d*:([a-zA-Z]*)\\d*");

    // The starting row for a range is captured using this pattern to find its relative index from table heading
    Pattern findOffsetRowPattern = Pattern.compile("(\\d+):");

    // Since the value for this pattern is coming from an API response, it also contains the sheet name
    // We use this pattern to retrieve only range information
    Pattern sheetRangePattern = Pattern.compile(".*!([a-zA-Z]*)\\d*:([a-zA-Z]*)\\d*");

    @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. Provide a valid Google Sheets URL in the datasource/query.
  2. If dynamic, ensure the binding resolves before the query runs (default the value).
  3. Confirm OAuth2 authorization for the datasource is active.

Example fix

// before
{
  "sheetUrl": ""
}
// after
{
  "sheetUrl": "https://docs.google.com/spreadsheets/d/1AbC.../edit"
}
Defensive patterns

Strategy: validation

Validate before calling

boolean ok = methodConfig.getSpreadsheetId() != null
    && !methodConfig.getSpreadsheetId().isBlank();

Type guard

static boolean hasSpreadsheetId(MethodConfig c) {
    return c != null && c.getSpreadsheetId() != null && !c.getSpreadsheetId().isBlank();
}

Prevention

When it happens

Trigger: A Get Rows / Read query whose Spreadsheet URL binding is empty or whitespace - e.g. datasource not configured, or a dynamic URL field that is empty on first render.

Common situations: Datasource copied without its URL; binding references an unset appsmith.store value; URL field cleared by mistake.

Related errors


AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12). Data as JSON: /api/errors/da4327db414bd059. Report an issue: GitHub.