Automate GPT-4o Fine-Tuning with Google Sheets or Airtable Data

Go to Workflow
274 views
Built by Matty Reed Matty Reed
Created on June 09, 2026

Description

Who is this for?
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.

What problem does it solve?
Manually downloading CSVs, converting to JSONL, uploading, and polling OpenAI is a slog.
This flow automates the whole loop: grab examples flagged Ready, build the JSONL file, start the fine-tune, then log the resulting model ID back to a registry sheet/table for reuse.

How it works

| # | Node | Purpose |
|---|------|---------|
| 1 | Schedule Trigger | Runs weekly by default (change as needed). |
| 2a | Get Examples from Sheet | Pulls rows where Ready = TRUE from your Google Sheet. Uses the JSONL-Template Sheet as the expected column layout. |
| 2b | Get Examples from Airtable (disabled) | Alternate source for Airtable users. |
| 3 | Create JSONL File (Code) | Converts each example to chat-format JSONL and splits into train.jsonl / val.jsonl (80/20). |
| 4 | Upload JSONL | Uploads the training file to OpenAI (purpose: fine-tune). |
| 5 | Begin Fine-Tune | Starts a fine-tune job on gpt-4o (editable). |
| 6 | Wait → Check Job → IF | Polls every minute until status = succeeded. |
| 7a | Write Model to Sheet | Appends the new model ID + meta to your Model Registry sheet. |
| 7b | Write Model to Airtable (disabled) | Equivalent logging step for Airtable. |

Setup steps

Import & connect credentials
Import the JSON flow into n8n.
Add your OpenAI API key.
Google Sheets: create an OAuth2 credential and link it to both Sheets nodes.
Airtable (optional): create a Personal Access Token and attach it to the Airtable nodes.

Copy the template sheet
Duplicate the JSONL-Template Sheet linked above into your own Drive.
Required columns (exact names):
| systemPrompt | userPrompt | assistantResponse | Ready |
Tick Ready = TRUE for rows you want to include.

Create the registry sheet/table
Google Sheet (or Airtable table) named Model Registry with columns:
Model ID, Training Examples, Epochs, Batch Size, Learning Rate, Finished At.

Tweak model & schedule
Change the base model in Begin Fine-Tune if desired.
Adjust the Schedule Trigger for daily / on-demand runs.

Test it
Mark a few examples Ready = TRUE.
Run the flow manually.
Check OpenAI for the new fine-tune job and confirm the model ID is logged in your registry.

Resources

n8n Docs – <https://docs.n8n.io/>
OpenAI Fine-Tuning – <https://platform.openai.com/docs/guides/fine-tuning>
Google Sheets API – <https://developers.google.com/sheets/api>
Airtable API – <https://airtable.com/api>

Extending the flow

Webhook trigger** – swap the schedule for a webhook to train on demand.
Multi-source merge* – enable both Sheets *and Airtable nodes to combine datasets.
Auto-deploy** – save the new model name to an env-var or Secrets Manager for downstream generation workflows.

Nodes Used (5)

Airtable
n8n-nodes-base.airtable
Code
n8n-nodes-base.code
Google Sheets
n8n-nodes-base.googleSheets
HTTP Request
n8n-nodes-base.httpRequest
OpenAI
@n8n/n8n-nodes-langchain.openAi