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
- Remove or convert unsupported columns (attachments, relationships, JSON, etc.) from the table schema before running UPDATE_TABLE
- Change the column type to one of the allowed GSheets types (string, number, boolean, datetime) in the builder
- Split the data: keep unsupported fields in a different table/datasource
- 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
- Filter schema to allowed types before syncing tables into GSheets
- Keep attachments/relationships/JSON fields out of GSheets-backed tables
- Check ALLOWED_TYPES in googlesheets.ts whenever adding new field types
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
- TableImportError(errors)
- Please run in a plugin directory - must contain schema.json
- Datasource does not have entities
- Unable to lookup relationships - undefined column properties
- Cannot make field "${key}" required, it has a default value.
AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29).
Data as JSON: /api/errors/fcdbabfa5c15b733.
Report an issue: GitHub.