This workflow follows the Airtable → Chainllm 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "ed5363cf-1fb6-4662-b12c-073b2b3a3576",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-240,
140
],
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "e47a166f-3e70-433e-ad0d-2100309cac92",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-60,
500
],
"parameters": {
"options": {
"topP": 1
},
"modelName": "models/gemini-2.0-flash-lite"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "5474805f-8d18-4a09-a3ea-5602af97a5de",
"name": "Auto-fixing Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
"position": [
500,
360
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "d9a0eadc-54c7-4980-b4f8-79fd77627c32",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
600,
520
],
"parameters": {
"jsonSchemaExample": "{\n\t\"name\": \"Name of the prompt\",\n \"category\" : \"the prompt category\"\n}"
},
"typeVersion": 1.2
},
{
"id": "898f64cd-2332-42ad-9bac-a817dd9bf3d7",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
220,
140
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9c5fec90-b7f0-45f3-81a3-22e0956fc3bf",
"name": "text",
"type": "string",
"value": "={{ $json.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "4bbd160a-98bd-4622-a54e-77b61ff91b46",
"name": "Google Gemini Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
380,
540
],
"parameters": {
"options": {
"topP": 1
},
"modelName": "models/gemini-2.0-flash-lite"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "f45cbed4-c2b8-4f1b-8026-4686324a714a",
"name": "Return results",
"type": "n8n-nodes-base.set",
"position": [
960,
140
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "40aba86b-57b7-4c74-8e9f-d09cd2f344c5",
"name": "text",
"type": "string",
"value": "={{ $('Generate a new prompt').item.json.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "25650ec5-b559-4bfc-a95a-f81c674bc680",
"name": "Categorize and name Prompt",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
360,
140
],
"parameters": {
"text": "={{ $json.text }}",
"messages": {
"messageValues": [
{
"message": "=Categorize the above prompt into a category that it can fall into"
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.5
},
{
"id": "c324d952-0722-40aa-981c-fcb2007b43b9",
"name": "set prompt fields",
"type": "n8n-nodes-base.set",
"position": [
660,
140
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "cbf3b587-67fd-4f08-b50f-53561e869827",
"name": "name",
"type": "string",
"value": "={{ $json.output.name }}"
},
{
"id": "7fda5833-9a3b-4c8a-b18d-4c31b35dae94",
"name": "category",
"type": "string",
"value": "={{ $json.output.category }}"
},
{
"id": "50f06ab3-97d5-43cb-83ff-1a6aac45251b",
"name": "Prompt",
"type": "string",
"value": "={{ $('Edit Fields').item.json.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "97ad8d84-141e-4c21-8ce4-930dbe921f76",
"name": "add to airtable",
"type": "n8n-nodes-base.airtable",
"position": [
800,
140
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "app994hU3fOw0ssrx",
"cachedResultUrl": "https://airtable.com/app994hU3fOw0ssrx",
"cachedResultName": "Prompt Library"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tbldwJrCK2HmAeknA",
"cachedResultUrl": "https://airtable.com/app994hU3fOw0ssrx/tbldwJrCK2HmAeknA",
"cachedResultName": "Prompt Library"
},
"columns": {
"value": {
"Name": "={{ $json.name }}",
"Prompt": "={{ $json.Prompt }}",
"Category": "={{ $json.category }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Prompt",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created ON",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Created ON",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Updated",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Updated",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Category",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Category",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "516dc434-25d9-4011-9453-bb28521823ca",
"name": "Generate a new prompt",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
-80,
140
],
"parameters": {
"messages": {
"messageValues": [
{
"message": "=You are an **expert n8n prompt engineer**, specializing in creating highly optimized, context-aware prompts for AI agents in n8n workflows. Your primary goal is to ensure AI agents execute well-defined tasks **accurately, autonomously, and efficiently**. \n\n### Instructions \n1. **Define the AI Agent's Role and Rules** \n - Use a structured role definition format: \n `\"You are a [SPECIFIC ROLE] working for [SPECIFIC BUSINESS CONTEXT].\"` \n - Clearly specify the agent's responsibilities and scope. \n\n2. **Provide Task Instructions** \n - Use a **step-by-step** numbered list to outline the process. \n - Ensure the instructions allow for flexibility but prevent errors. \n\n3. **Set Rules to Guide AI Behavior** \n - Enumerate key constraints such as: \n - Timezone requirements \n - Prohibitions on making assumptions \n - Required formatting for responses \n\n4. **Use Few-Shot Prompting** \n - Provide clear examples of desired outputs inside `<example>` tags. \n\n5. **Include Additional Context** \n - Define relevant business details, the current date/time, and any required environmental context. \n\n---\n\n## Input Layer \n### Structuring User Inputs \n1. **Define Input Type** \n - Specify whether inputs come from a human user (chat-based) or an external system (API calls). \n\n2. **Handle Dynamic Inputs** \n - Use placeholders (e.g., `{customer_name}`, `{appointment_date}`) for adaptable prompts. \n\n3. **Ensure Personalization** \n - Format prompts naturally while maintaining clarity and specificity. \n\n4. **Merge Static & Dynamic Data** \n - Concatenate fixed prompt structures with real-time system data from n8n. \n\n---\n## Action Layer \n### Tool and Function Calling \n1. **Standardized Tool Naming** \n - Use `snake_case` names for tools (e.g., `check_calendar_availability`). \n\n2. **Provide Clear Tool Descriptions** \n - Example: \n `\"Use the `fetch_customer_data` tool to retrieve details about a specific user based on their email address.\"` \n\n3. **Specify Tool Parameters & Expected Responses** \n - Define required inputs, expected formats, and error handling strategies. \n\n4. **Avoid Hallucinations** \n - AI should **only** use tools for their defined purposes. If information is missing, request clarification instead of guessing. \n\n---\n## Example Prompt for an AI Agent in n8n \n\n```yaml\n# System Layer\n## Role\nYou are a **Scheduling Assistant** working for a **beauty salon**. Your role is to help customers book appointments. \n\n## Instructions\n1. Ask the user for their preferred appointment date. \n2. Use `check_calendar_availability` to find open slots. \n3. If no slots are available, ask the user to select another day. \n4. Capture the user\u2019s **full name** and **email**. \n5. Use `create_calendar_appointment` to confirm the booking. \n6. Notify the user with appointment details. \n\n## Rules\n- Always use **UTC+1 timezone**. \n- Do not assume details\u2014ask if unsure. \n- If asked about non-scheduling topics, respond: `\"I can only assist with booking appointments.\"` \n\n## Few-shot Example \n<example>\n\"I have successfully booked your appointment:\n- Date & Time: **Wednesday, 15 March 2025, 14:00 (UTC+1)**\n- Booking Email: **jane.doe@example.com**\nIf you need to cancel, please call +49 123 456 789.\"\n</example>\n```\n---\n## Key Considerations \n\u2705 **Avoid vague roles** (e.g., \"You are an assistant\"). Always specify **business context**. \n\u2705 **Keep task steps structured** but flexible. \n\u2705 **Provide explicit tool instructions** in a separate section. \n\u2705 **Enable AI to ask clarifying questions** instead of making assumptions. \n\u2705 **Use examples to guide expected outputs.** \n\n\n"
}
]
}
},
"typeVersion": 1.5
}
],
"connections": {
"Edit Fields": {
"main": [
[
{
"node": "Categorize and name Prompt",
"type": "main",
"index": 0
}
]
]
},
"add to airtable": {
"main": [
[
{
"node": "Return results",
"type": "main",
"index": 0
}
]
]
},
"set prompt fields": {
"main": [
[
{
"node": "add to airtable",
"type": "main",
"index": 0
}
]
]
},
"Generate a new prompt": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "Generate a new prompt",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Auto-fixing Output Parser": {
"ai_outputParser": [
[
{
"node": "Categorize and name Prompt",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Google Gemini Chat Model1": {
"ai_languageModel": [
[
{
"node": "Categorize and name Prompt",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Auto-fixing Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Categorize and name Prompt": {
"main": [
[
{
"node": "set prompt fields",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Generate a new prompt",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
airtableTokenApigooglePalmApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
Effortlessly manage and interact with your Airtable data through natural language queries, saving hours of manual searching or spreadsheet navigation for busy teams handling customer feedback, project trackers, or inventories. This workflow suits content creators, sales managers, or analysts who need quick insights without technical expertise, leveraging Google Gemini's AI to interpret your chat messages and generate precise responses. The key step involves the AI-powered chain that categorises queries, structures outputs for accuracy, and seamlessly retrieves or updates Airtable records to deliver tailored results.
Use this workflow when you want instant, conversational access to Airtable bases during daily operations, such as summarising recent entries or extracting specific data points. Avoid it for high-volume batch processing or complex data manipulations requiring custom logic, where dedicated scripts might perform better. Common variations include adapting the prompt for multilingual support or integrating additional parsers for handling varied data formats like dates or attachments.
About this workflow
Airtable. Uses chatTrigger, lmChatGoogleGemini, outputParserAutofixing, outputParserStructured. Chat trigger; 11 nodes.
Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Extracting URLs from multiple XML sitemaps manually is tedious, and combining them into a single usable file is time-consuming. This workflow solves this by acting as an automated bulk extractor. You
Splitout Filter. Uses manualTrigger, outputParserStructured, lmChatOpenRouter, informationExtractor. Event-driven trigger; 51 nodes.
This workflow accepts up to 10 URLs via chat input, executes the Google PageSpeed Insights API, and outputs a CSV file containing page performance metrics for SEO audits.
mails2notion V2. Uses lmChatOpenAi, toolCalculator, outputParserStructured, gmail. Event-driven trigger; 38 nodes.
This workflow provides a streamlined, no-code solution to extract all nested URLs from any standard XML sitemap and instantly convert them into a structured CSV file. Built entirely within n8n's nativ