Guides / n8n × Airtable / Data Validation

Fix Airtable 422 INVALID_VALUE_FOR_COLUMN in n8n

Fix Airtable 422 field-value errors in n8n by matching each field's API shape, checking select choices, using typecast deliberately, and validating IDs.

Diagram tracing n8n values through Airtable select, linked-record, number, and date field validation.
422 INVALID_VALUE_FOR_COLUMN — "Field <name> cannot accept the provided value" (single/multiple select)
Short answer: Start by inspecting the field type and the exact JSON value n8n sent. `INVALID_VALUE_FOR_COLUMN` is not a generic permission error: it usually means Airtable could not parse the value for that field. For selects, distinguish a wrong payload shape from an unknown choice; unknown choices may surface as `INVALID_MULTIPLE_CHOICE_OPTIONS`. Send multiple-select values as an array, linked records as record-ID arrays, numbers as JSON numbers, and dates in an accepted ISO 8601 form. Use `typecast: true` only when you intentionally want Airtable to coerce or create permitted select choices.

Identify the field and the actual JSON shape first

Airtable's 422 family tells you that the request reached a valid endpoint but the body could not be applied as sent. Do not begin by regenerating credentials: a token that can reach the table and receive a field-validation 422 has already crossed the authentication layer. Capture the Airtable response body from the failed n8n execution and identify the field named in the message. Then inspect the item entering the Airtable node, not the pretty value you expected upstream. Expressions can turn numbers into strings, collapse arrays into comma-separated text, or pass an entire object where Airtable expects one scalar.

For select fields, keep two error families separate. `INVALID_VALUE_FOR_COLUMN` can appear when the value is the wrong type or cannot be parsed for that column. When a single- or multiple-select value is syntactically the right type but names a choice Airtable does not accept, Airtable commonly reports `INVALID_MULTIPLE_CHOICE_OPTIONS`. That distinction determines the fix. A bad array or date needs normalization. A legitimate new select option may need exact spelling or deliberate typecasting. Logging the outgoing item and the full Airtable error body prevents blindly toggling Typecast around a structural problem.

Common Airtable field shapes to verify before retrying

Field typeTypical write shapeFrequent n8n mistake
Single selectString choice nameObject such as {name: ...} or unintended whitespace
Multiple selectArray of choice-name stringsComma-separated string
Linked recordArray of rec... record IDsDisplay names instead of IDs
Number / percent / currencyJSON numberFormatted string such as "$1,250"
Date / date-timeAccepted date or ISO 8601 date-time stringLocale-formatted text Airtable cannot parse

Normalize select values before deciding that Typecast is required

Existing select options should be treated as controlled vocabulary. Trim upstream whitespace, normalize the source value deliberately, and map external labels to the exact Airtable choice you intend. Do not silently lowercase everything: if two upstream labels have different business meaning, a normalization step can merge data that should stay distinct. For a multiple-select field, the API-facing value is an array of strings. If a source system emits `"Red,Blue"`, split and trim it before the Airtable node; passing one comma-containing string asks Airtable for one choice literally named `Red,Blue`. Treat the configured choice as an exact string contract: preserve intended case and spaces, and do not rely on Airtable to normalize a near-match into the existing option.

`typecast: true` is useful when Airtable can safely coerce an input or when you intentionally allow a new select choice to be created. Airtable's current troubleshooting guidance notes that a missing select choice can be created with typecast when the caller has sufficient permission. It is not a schema bypass. An invalid date, malformed linked-record value, or fundamentally wrong JSON type can still fail. For stable production flows, many teams prefer an explicit mapping table in an n8n Code or Edit Fields node so unexpected labels fail visibly instead of expanding a select vocabulary by accident.

const raw = $json.status;
const map = { "in progress": "In Progress", "done": "Done" };
const key = String(raw ?? "").trim().toLowerCase();
return [{ json: { ...$json, airtableStatus: map[key] ?? raw } }];

Use n8n Typecast or the Web API body deliberately

The current n8n Airtable node implementation exposes a Typecast option for record writes. Enable it when that behavior is part of your data contract, not as a first-response checkbox for every 422. If your installed n8n version does not expose the option where you expect it, confirm the node version and n8n release before assuming Airtable changed. An HTTP Request node is the deterministic fallback because the Web API accepts the Boolean `typecast` property in the request body.

For direct Web API writes, keep `typecast` at the request level rather than nesting it inside `fields`. For example, a create or update body can contain `fields` plus `typecast: true`. If a new choice must be created, the credential also needs the permission required to change that select's options. A 422 after enabling typecast can therefore mean permission or value parsing, not that the flag was ignored. Re-run one known record with the smallest possible payload so the field under test is isolated from unrelated columns.

{
  "fields": {
    "Status": "In Progress",
    "Tags": ["Priority", "API"]
  },
  "typecast": true
}

Remove presentation formatting from numbers and dates

n8n often receives values already formatted for people. Airtable's number-like fields should receive JSON numbers, not strings with currency symbols, percent signs, grouping commas, or explanatory text. Convert the value before the Airtable node and reject `NaN` rather than writing a misleading zero. The same rule applies to checkboxes and other typed fields: send the API representation, not whatever label the source UI displayed.

For dates, prefer an unambiguous ISO 8601 value when a date-time is involved, including an offset or `Z` when you mean an instant in time. Airtable community examples show `INVALID_VALUE_FOR_COLUMN` when typecast cannot parse a nonstandard date string. Do not rely on a locale such as `03/09/2026`, because day/month interpretation changes across systems. If the Airtable field is date-only, normalize to the intended calendar date; if it carries time, make the timezone conversion explicit in n8n before the write.

Prove one corrected record before replaying the batch

When a batch fails, take one representative item and write only the suspect field plus a stable identifier. This reveals whether the failure belongs to the field value or another column in the original request. Once that succeeds, restore fields in small groups. In n8n, pinning test data can help reproduce the transformation, but do not confuse pinned editor data with the payload a production trigger actually produced. Compare the JSON from the real failed execution.

After the single-record write succeeds, decide what should happen to novel values. For controlled select taxonomies, route unknown options to a review branch and stop the write. For intentionally extensible tags, Typecast may be appropriate if permissions permit new choices. That policy belongs in the workflow rather than in a human memory of which checkbox to enable. The result should be deterministic: the same upstream value produces the same Airtable shape every time.

Verification checklist

  • The Airtable error body identifies the same field you are testing, and the request reaches the intended base and table.
  • Single-select values are strings and multiple-select values are arrays of strings after n8n expressions run.
  • Linked-record writes use resolved `rec...` IDs rather than display names in the normal deterministic path.
  • Numeric fields receive JSON numbers without display formatting, and date-time values are normalized to an unambiguous ISO 8601 representation.
  • Typecast is enabled only when coercion or new choice creation is intentional and the credential has the required permission.
  • A one-record, one-field test succeeds before the corrected transformation is replayed across the full batch.

Documentation and community threads cited

These fixes follow current Airtable API documentation, n8n node docs, and community threads. Primary sources:

Frequently asked questions

Why does Airtable still return 422 after I turn on Typecast in n8n?

Typecast can coerce some values and can allow permitted new select choices, but it does not repair every invalid JSON shape. Check the exact field type, outgoing value, permissions, and the full error body first.

Should an Airtable multiple-select value be a comma-separated string?

No. Send an array of choice-name strings. Split and trim comma-separated source text in n8n before the Airtable node if the upstream system does not already provide an array.

Can I send a linked-record name instead of its Airtable record ID?

For a deterministic integration, resolve the linked row and send its `rec...` ID in an array. Typecasting can infer some values in some contexts, but explicit record IDs avoid ambiguity and are easier to validate.