Value is not a valid record ID

Hi everyone,

I think I’m losing my mind on this one.

I’ve been trying to make an Airtable Upsert work for hours and I’ve literally tried everything.

I keep getting the same error, even after completely removing the field it refers to.


:puzzle_piece: The error

Your request is invalid or could not be processed by the service
Value “https://example.com” is not a valid record ID.

The weird thing is:

  • The field I’m mapping this value to is a plain text field (not a linked record).

  • The error still complains about “record ID”.

  • Even after removing the mapping for this field, n8n continues to show the same error — like it’s cached somewhere.

  • I even switched the column used in “Columns to match on” and refreshed the table schema, but the issue persists.


:gear: Context

Here’s roughly what I’m doing:

  • Operation: Create or Update (Upsert)

  • Base: (generic Airtable base)

  • Table: (generic table)

  • Columns to match on: a text field (Key)

  • Values being sent:

    • Key → canonical URL (string)

    • Client → { id: client_id } (linked record)

    • Project → { id: project_id } (linked record)

    • URLs → JSON string array

    • Hreflangs → JSON string array of objects

I’ve already tried:

  • Wrapping the expression in String()

  • Adding a Set node before the Upsert to force the value as plain text

  • Changing the table and switching back to force a schema refresh

  • Creating a new text column to match on

Still, I get exactly the same Value “https://…” is not a valid record ID message.

:sos_button: What I need help with

  • Has anyone else seen this “not a valid record ID” issue when using Upsert on a text field?

  • Is there a way to force n8n to send the value as a string, or clear cached Airtable field types?

  • Could this be a bug in how the Airtable node handles custom “Columns to match on”?


Thanks in advance — I’m really stuck on this and starting to go insane :sweat_smile: