Budibase/budibase · error · Error

Column type: ${column.type} not allowed for GSheets integrat

Error message

Column type: ${column.type} not allowed for GSheets integration.

What it means

updateTable adds new columns to a sheet by mapping table.schema field types to spreadsheet headers. Google Sheets only supports a subset of field types (strings, numbers, dates, booleans, etc. in ALLOWED_TYPES); if any column in the schema has a disallowed type (e.g. LINKED, JSON, ATTACHMENT), it throws before touching the sheet.

Source

Thrown at packages/server/src/integrations/googlesheets.ts:514

        if (header === table._rename.old) {
          headers.push(table._rename.updated)
        } else {
          headers.push(header)
        }
      }
      try {
        await sheet.setHeaderRow(headers)
      } catch (err) {
        console.error("Error updating column name in google sheets", err)
        throw err
      }
    } else {
      const updatedHeaderValues = [...sheet.headerValues]

      // add new column - doesn't currently exist
      for (let [key, column] of Object.entries(table.schema)) {
        if (!ALLOWED_TYPES.includes(column.type)) {
          throw new Error(
            `Column type: ${column.type} not allowed for GSheets integration.`
          )
        }
        if (
          !sheet.headerValues.includes(key) &&
          column.type !== FieldType.FORMULA &&
          column.type !== FieldType.AI
        ) {
          updatedHeaderValues.push(key)
        }
      }

      try {
        if (updatedHeaderValues.length > sheet.gridProperties.columnCount) {
          await sheet.resize({
            rowCount: sheet.rowCount,
            columnCount: updatedHeaderValues.length,
          })

View on GitHub (pinned to a81a902e9a)

Solutions

  1. Remove or convert unsupported columns (attachments, relationships, JSON, etc.) from the table schema before running UPDATE_TABLE
  2. Change the column type to one of the allowed GSheets types (string, number, boolean, datetime) in the builder
  3. Split the data: keep unsupported fields in a different table/datasource
  4. Check ALLOWED_TYPES in googlesheets.ts to see exactly which types are permitted

Example fix

// before
schema: { Avatar: { type: 'attachment', name: 'Avatar' } } // throws
// after
schema: { AvatarUrl: { type: 'string', name: 'AvatarUrl' } }
Defensive patterns

Strategy: validation

Validate before calling

const ALLOWED_TYPES = ['string','number','boolean','datetime','barcode','barcodeqr']
function assertSchemaAllowed(schema) {
  for (const [key, col] of Object.entries(schema)) {
    if (!ALLOWED_TYPES.includes(col.type)) {
      throw new Error(`Column '${key}' type '${col.type}' is not supported by Google Sheets`)
    }
  }
}

Type guard

function isGSheetsCompatibleColumn(col) {
  return ['string','number','boolean','datetime'].includes(col?.type)
}

Try / catch

try {
  await integration.query({ operation: 'UPDATE_TABLE', table })
} catch (err) {
  if (err.message.startsWith('Column type:')) {
    // strip or convert the offending column, then retry
  } else throw err
}

Prevention

When it happens

Trigger: Calling query({ operation: 'UPDATE_TABLE' }) where the new schema contains a column whose type is not in ALLOWED_TYPES — checked for every entry of table.schema before adding missing headers.

Common situations: Syncing a Budibase table that has relationship/attachment/formula columns into Google Sheets; schema auto-derived from another datasource including GSheets-incompatible types; user manually added a rich type to the schema.

Related errors


AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29). Data as JSON: /api/errors/fcdbabfa5c15b733. Report an issue: GitHub.