@Dwayne_Taylor on the typeVersion bump — open the affected workflow, click the ... menu (top right of canvas) → Download. open the downloaded JSON file in a text editor and find ur Google Sheets node, then change typeVersion from 3 to 4.7 and add the matching mode field. before/after looks like:
{
"before": {
"parameters": {
"operation": "append",
"documentId": "...",
"sheetName": "...",
"dataMode": "autoMapInputData"
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 3
},
"after": {
"parameters": {
"operation": "append",
"documentId": "...",
"sheetName": "...",
"columns": {
"mappingMode": "defineBelow",
"matchingColumns": ["row_id"],
"value": {}
}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.7
}
}
then Import the edited JSON back (top-right ... → Import). the v4 node uses defineBelow mapping where u explicitly bind each input field to a sheet column, so duplicate headers + 150-col-wide sheets stop being a footgun.
on ur first Q (does it apply without dupes) — yes, the same matching logic underlies all 4 of the patterns @nguyenthieutoan listed (wide sparse sheets, special chars in headers, nested objects). dupes are just the most obvious one. if some of ur affected sheets dont have dupes, ur probably hitting one of the others — most likely the nested-object case since u said v3 was reading correctly but writing wrong (the JSON blob serializer in v3 leaks into adjacent columns when fields are sparse).