AutomationFlowsData & Sheets › Automate Gpt-4o Fine-tuning with Google Sheets or Airtable Data

Automate Gpt-4o Fine-tuning with Google Sheets or Airtable Data

ByMatty Reed @mattyreed1 on n8n.io

Anyone curating before/after text examples in a spreadsheet and wanting a push-button path to a fine-tuned GPT model—without touching curl. Works with Google Sheets or Airtable.

Cron / scheduled trigger★★★★☆ complexityAI-powered19 nodesHTTP RequestOpenAIStop And ErrorAirtableGoogle Sheets
Data & Sheets Trigger: Cron / scheduled Nodes: 19 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #4853 — we link there as the canonical source.

This workflow follows the Airtable → Google Sheets recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "n5I2z5PXIENtW9ri",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Fine Tune GPT",
  "tags": [],
  "nodes": [
    {
      "id": "fc478cd0-8d84-4e8a-b0d8-7b2a4bb6b65c",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        1560,
        0
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "4a6895a6-5a5c-48f2-98ea-2c6ed1d428e3",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -180,
        0
      ],
      "parameters": {},
      "typeVersion": 1.2
    },
    {
      "id": "dec836ff-a0fb-4b6c-9ea6-e7a383343a2b",
      "name": "Set GPT Model",
      "type": "n8n-nodes-base.set",
      "position": [
        1020,
        0
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "f349a57b-0720-4ef1-8b0c-4d07c7908c73",
      "name": "Begin Fine-tune Job",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1300,
        0
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "857dd175-1d8b-4b11-aabd-27a9ed9519a8",
      "name": "Upload JSONL File",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        740,
        0
      ],
      "parameters": {},
      "typeVersion": 1.8
    },
    {
      "id": "5b297840-c851-42a0-8490-6b8c2f77e6d2",
      "name": "Create JSONL File",
      "type": "n8n-nodes-base.code",
      "position": [
        440,
        0
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "5270eae1-1218-4ef6-b423-b4267df04c2f",
      "name": "Check Fine-Tune Job",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1740,
        0
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "3a2349ac-836a-4145-b0f9-cf1814db5180",
      "name": "If Succeeded",
      "type": "n8n-nodes-base.if",
      "position": [
        1920,
        0
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "5ab2283c-3c25-4c4a-a786-3bb4c7c68702",
      "name": "If Failed",
      "type": "n8n-nodes-base.if",
      "position": [
        2120,
        100
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "18b2ad15-896b-48b9-a3fd-fc10214172a2",
      "name": "Error: FAILED",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        2300,
        100
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "992ac7d4-c889-4d5c-8359-e85f82068144",
      "name": "Add Fine-Tuned Model to Airtable",
      "type": "n8n-nodes-base.airtable",
      "disabled": true,
      "position": [
        2620,
        80
      ],
      "parameters": {},
      "typeVersion": 2.1
    },
    {
      "id": "b0af9c97-b6e2-466d-9961-925685a6eb9d",
      "name": "Add  Fine-Tuned Model to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2620,
        -120
      ],
      "parameters": {},
      "typeVersion": 4.6
    },
    {
      "id": "abd193e2-472b-4bee-a4d5-8d78327eebe9",
      "name": "Get Examples from Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        120,
        -100
      ],
      "parameters": {},
      "typeVersion": 4.5
    },
    {
      "id": "cc556207-aa3f-4eaa-a8f6-1bec94c055fc",
      "name": "Get Examples from Airtable",
      "type": "n8n-nodes-base.airtable",
      "disabled": true,
      "position": [
        120,
        120
      ],
      "parameters": {},
      "typeVersion": 2.1
    },
    {
      "id": "3d97f4cf-135c-49ba-b47c-43bfdf7ebb18",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -220,
        -280
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "06bc45b5-f279-4154-b3a5-bc7690019a64",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        360,
        -280
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "8d11924b-c641-40e7-8b0b-fee2db50a9c7",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        940,
        -280
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "bad9fdb4-b769-48f2-9335-3b1a3a2236f5",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1500,
        -280
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "2cce770f-eb21-4c86-8a19-16a2c0e37f2b",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2480,
        -280
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "6bd0a799-f4a7-4907-8a14-204d023f4ae6",
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Check Fine-Tune Job",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If Failed": {
      "main": [
        [
          {
            "node": "Error: FAILED",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If Succeeded": {
      "main": [
        [
          {
            "node": "Add Fine-Tuned Model to Airtable",
            "type": "main",
            "index": 0
          },
          {
            "node": "Add  Fine-Tuned Model to Sheet",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "If Failed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set GPT Model": {
      "main": [
        [
          {
            "node": "Begin Fine-tune Job",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get Examples from Sheet",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get Examples from Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create JSONL File": {
      "main": [
        [
          {
            "node": "Upload JSONL File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload JSONL File": {
      "main": [
        [
          {
            "node": "Set GPT Model",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Begin Fine-tune Job": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Fine-Tune Job": {
      "main": [
        [
          {
            "node": "If Succeeded",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Examples from Sheet": {
      "main": [
        [
          {
            "node": "Create JSONL File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Examples from Airtable": {
      "main": [
        [
          {
            "node": "Create JSONL File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Anyone curating before/after text examples in a spreadsheet and wanting a push-button path to a fine-tuned GPT model—without touching curl. Works with Google Sheets or Airtable.

Source: https://n8n.io/workflows/4853/ — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

Automates Singapore COE price tracking with AI forecasts and buy/wait recommendations. Weekly scraping collects LTA data, enriches with economic indicators, predicts 6-month trends, and alerts users v

HTTP Request, Google Sheets, Agent +4
Data & Sheets

Lead Generating Web Scraper & CRM Automation. Uses httpRequest, airtable, googleSheets, gmail. Scheduled trigger; 38 nodes.

HTTP Request, Airtable, Google Sheets +4
Data & Sheets

Splitout Code. Uses httpRequest, stickyNote, manualTrigger, splitOut. Event-driven trigger; 33 nodes.

HTTP Request, OpenAI, Noco Db +3
Data & Sheets

This workflow automates the process of gathering LinkedIn advice articles, extracting their content, and generating unique contributions for each article using an AI model. The contributions are then

HTTP Request, OpenAI, Noco Db +3
Data & Sheets

YogiAI. Uses googleSheets, googleSheetsTool, httpRequest, stopAndError. Scheduled trigger; 61 nodes.

Google Sheets, Google Sheets Tool, HTTP Request +1