Airtable vers HashNode

Avancé

Ceci est unSocial Mediaworkflow d'automatisation du domainecontenant 16 nœuds.Utilise principalement des nœuds comme If, Airtable, HttpRequest, ManualTrigger, SplitInBatches. Automatiser la publication de blog d'Airtable à Hashnode via une intégration API

Prérequis
  • Clé API Airtable
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "NKH75Yw8BamfkKSH",
  "meta": {
    "instanceId": "57c6ae2839a35415c47c2c780dda3195de041953069a0948855f595fc6dcad27",
    "templateCredsSetupCompleted": true
  },
  "name": "Airtable-to-HashNode",
  "tags": [
    {
      "id": "fouVh2Y0OYqejpLm",
      "name": "Template_shared",
      "createdAt": "2025-07-29T14:31:26.567Z",
      "updatedAt": "2025-07-29T14:31:26.567Z"
    }
  ],
  "nodes": [
    {
      "id": "7e5e97e9-f9b4-451c-8f0d-796da1e9c5e2",
      "name": "Note adhésive9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4592,
        720
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 272,
        "content": "## 5. Post Draft\n- Using [HTTP Request Node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/)"
      },
      "typeVersion": 1
    },
    {
      "id": "2594eda3-f5cd-4fdd-b9ab-5630c852e164",
      "name": "Note adhésive10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3232,
        720
      ],
      "parameters": {
        "color": 7,
        "width": 324,
        "height": 260,
        "content": "## 1. Get Blog Posts\n- Using [Airtable Node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.airtable/)"
      },
      "typeVersion": 1
    },
    {
      "id": "a872841f-48bc-4548-91bc-634fd352e876",
      "name": "Obtenir l'ID de la publication",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4000,
        832
      ],
      "parameters": {
        "url": "https://gql.hashnode.com",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"query\": \"query GetPublication($host: String!) { publication(host: $host) { id title } }\",\n  \"variables\": {\n    \"host\": \"{{ $json.HashNode_Publication_Domain }}\"\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $json.Hashnode_Token }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "280f1bdb-a467-44dc-896f-c6cf23a6724b",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3920,
        720
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 272,
        "content": "## 3. Get Publication_ID\n- Using [HTTP Request Node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/)"
      },
      "typeVersion": 1
    },
    {
      "id": "f4cd172e-3dd4-45f6-b021-04ab76f92a31",
      "name": "Obtenir les articles",
      "type": "n8n-nodes-base.airtable",
      "position": [
        3344,
        816
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appWkeQWqFgNbvHuB",
          "cachedResultUrl": "https://airtable.com/appWkeQWqFgNbvHuB",
          "cachedResultName": "ATO_AESA"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbluWDZPDOsCs39aS",
          "cachedResultUrl": "https://airtable.com/appWkeQWqFgNbvHuB/tbluWDZPDOsCs39aS",
          "cachedResultName": "HashNode"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "={Status} = \"Not Published\""
      },
      "typeVersion": 2.1
    },
    {
      "id": "bbba998f-64ff-4374-9483-ad3a5087f6c2",
      "name": "Lors du clic sur 'Exécuter le workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        3024,
        816
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "3ca28839-f6ed-48b7-9a60-2c5d49cdb8ea",
      "name": "Si Publication_ID existe",
      "type": "n8n-nodes-base.if",
      "position": [
        4352,
        832
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "19bb7e3a-2988-4722-bc0e-c63bbf3d34cb",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.data.publication.id }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "1a5f8592-9f33-41fe-9c91-d09c4ece0507",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4240,
        720
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 272,
        "content": "## 4. Publication_ID Exists? \n- Using [IF Node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/)"
      },
      "typeVersion": 1
    },
    {
      "id": "f908dc80-185c-43a2-aee9-6b87a60f5402",
      "name": "Note adhésive11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4928,
        752
      ],
      "parameters": {
        "color": 7,
        "width": 292,
        "height": 260,
        "content": "## 6. Update Blog Posts\n- Using [Airtable Node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.airtable/)"
      },
      "typeVersion": 1
    },
    {
      "id": "1dcca5e8-928b-49e1-940a-105e2a6bba81",
      "name": "Boucler sur les éléments",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        3680,
        816
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "acc6a156-392b-4ff1-b13c-862c23657819",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3600,
        720
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 272,
        "content": "## 2. Item process\n- Using [Loop over Itens Node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/)"
      },
      "typeVersion": 1
    },
    {
      "id": "dea6549a-c554-4194-a55b-be7dbe1d4bf4",
      "name": "Brouillon d'article HashNode",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4688,
        816
      ],
      "parameters": {
        "url": "https://gql.hashnode.com",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"query\": \"mutation CreateDraft($input: CreateDraftInput!) { createDraft(input: $input) { draft { id } } }\",\n  \"variables\": {\n    \"input\": {\n      \"title\": {{ JSON.stringify($('Get Posts').item.json.Title) }},\n      \"contentMarkdown\": {{ JSON.stringify($('Get Posts').item.json.Content_markdown) }},\n      \"publicationId\": \"{{ $('Get Publication ID').item.json.data.publication.id }}\"\n    }\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('Get Posts').item.json.Hashnode_Token }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "f72171cd-ef2c-45ec-939e-e9f378e52154",
      "name": "Mettre à jour l'article",
      "type": "n8n-nodes-base.airtable",
      "position": [
        5024,
        848
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appWkeQWqFgNbvHuB",
          "cachedResultUrl": "https://airtable.com/appWkeQWqFgNbvHuB",
          "cachedResultName": "ATO_AESA"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbluWDZPDOsCs39aS",
          "cachedResultUrl": "https://airtable.com/appWkeQWqFgNbvHuB/tbluWDZPDOsCs39aS",
          "cachedResultName": "HashNode"
        },
        "columns": {
          "value": {
            "id": "={{ $('Get Posts').item.json.id }}",
            "Status": "Published"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Post_name",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Post_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Title",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Content_markdown",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Content_markdown",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Hashnode_Token",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Hashnode_Token",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "HashNode_Publication_Domain",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "HashNode_Publication_Domain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Not Published",
                  "value": "Not Published"
                },
                {
                  "name": "Published",
                  "value": "Published"
                },
                {
                  "name": "Error",
                  "value": "Error"
                },
                {
                  "name": "",
                  "value": ""
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "updateAllMatches": false
        },
        "operation": "update"
      },
      "typeVersion": 2.1
    },
    {
      "id": "6a8c2896-5300-41af-bcc9-b70dce159025",
      "name": "Erreur de mise à jour",
      "type": "n8n-nodes-base.airtable",
      "position": [
        4352,
        1152
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appWkeQWqFgNbvHuB",
          "cachedResultUrl": "https://airtable.com/appWkeQWqFgNbvHuB",
          "cachedResultName": "ATO_AESA"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbluWDZPDOsCs39aS",
          "cachedResultUrl": "https://airtable.com/appWkeQWqFgNbvHuB/tbluWDZPDOsCs39aS",
          "cachedResultName": "HashNode"
        },
        "columns": {
          "value": {
            "id": "={{ $('Get Posts').item.json.id }}",
            "Status": "Error"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Post_name",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Post_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Title",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Content_markdown",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Content_markdown",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Hashnode_Token",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Hashnode_Token",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "HashNode_Publication_Domain",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "HashNode_Publication_Domain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Not Published",
                  "value": "Not Published"
                },
                {
                  "name": "Published",
                  "value": "Published"
                },
                {
                  "name": "Error",
                  "value": "Error"
                },
                {
                  "name": "",
                  "value": ""
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "updateAllMatches": false
        },
        "operation": "update"
      },
      "typeVersion": 2.1
    },
    {
      "id": "ed0ea527-4672-4a35-a073-1836e9e71454",
      "name": "Note adhésive12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4224,
        1056
      ],
      "parameters": {
        "color": 7,
        "width": 356,
        "height": 260,
        "content": "## 7. Error - No Publication_ID\n- Using [Airtable Node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.airtable/)"
      },
      "typeVersion": 1
    },
    {
      "id": "fd32a6ae-50a7-4a65-ab13-64f8ac954127",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2064,
        640
      ],
      "parameters": {
        "width": 848,
        "height": 1376,
        "content": "## 📝 Automated Blog Post Publishing from Airtable to Hashnode\n\nThis workflow streamlines your content publishing process by automatically creating draft blog posts on Hashnode from content stored in Airtable. Perfect for content creators, marketing teams, and developers who want to maintain a consistent publishing schedule while managing multiple Hashnode publications from a centralized database.\n\n## 🎯 Who's it for\n- **Content creators** managing multiple blog publications\n- **Marketing teams** coordinating content across different Hashnode accounts\n- **Developers** looking to automate their technical blog publishing workflow\n- **Agencies** managing content for multiple clients on Hashnode\n\n## ⚙️ How it works\nThe workflow operates in a simple 7-step process:\n\n1. **Retrieves unpublished posts** from your Airtable database (filtered by \"Not Published\" status)\n2. **Processes each post individually** using a loop to handle multiple posts\n3. **Fetches the publication ID** from Hashnode using the provided domain\n4. **Validates the publication exists** before proceeding with post creation\n5. **Creates draft posts** on Hashnode with the title and markdown content\n6. **Updates post status** to \"Published\" in Airtable upon successful creation\n7. **Handles errors** by marking failed posts with \"Error\" status for easy troubleshooting\n\n## 📋 Requirements\n**Airtable Setup:**\nYour Airtable table must include these columns:\n- `Title` - The blog post title\n- `Content_markdown` - Full blog post content in Markdown format\n- `Hashnode_Token` - Your Hashnode API authentication token\n- `HashNode_Publication_Domain` - Your publication's domain (e.g., \"yourblog.hashnode.dev\")\n- `Status` - Publication status (\"Not Published\", \"Published\", or \"Error\")\n\n**Hashnode Requirements:**\n- Valid Hashnode account with API access\n- Publication domain configured\n- API token with draft creation permissions\n\n## 🔧 How to set up\n1. **Configure Airtable credentials** in the \"Get Posts\" and \"Update Post\" nodes\n2. **Set your Airtable base and table IDs** to match your setup\n3. **Ensure your Airtable table** contains all required columns listed above\n4. **Add your content** with status \"Not Published\" to trigger the workflow\n5. **Test the workflow** with a single post before processing multiple items\n\n## 🎨 How to customize the workflow\n- **Modify the filter criteria** in the \"Get Posts\" node to target different post statuses\n- **Add content validation** before posting (word count, required fields, etc.)\n- **Include post scheduling** by adding date/time conditions\n- **Extend with notifications** using Slack, Discord, or email nodes\n- **Add SEO optimization** by including meta descriptions and tags\n- **Create published post tracking** by storing Hashnode draft IDs in Airtable\n\n## 💡 Need Help?\nJoin the [Discord](https://discord.com/invite/XPKeKXeB7d) or ask in the [Forum](https://community.n8n.io/)!"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {
    "HashNode Post Draft": [
      {
        "json": {
          "data": {
            "createDraft": {
              "draft": {
                "id": "689368c16573c8743eaf1c63"
              }
            }
          }
        }
      }
    ]
  },
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "16c19ea4-f275-4474-b1d9-368602766d47",
  "connections": {
    "f4cd172e-3dd4-45f6-b021-04ab76f92a31": {
      "main": [
        [
          {
            "node": "1dcca5e8-928b-49e1-940a-105e2a6bba81",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f72171cd-ef2c-45ec-939e-e9f378e52154": {
      "main": [
        [
          {
            "node": "1dcca5e8-928b-49e1-940a-105e2a6bba81",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6a8c2896-5300-41af-bcc9-b70dce159025": {
      "main": [
        [
          {
            "node": "1dcca5e8-928b-49e1-940a-105e2a6bba81",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1dcca5e8-928b-49e1-940a-105e2a6bba81": {
      "main": [
        [],
        [
          {
            "node": "a872841f-48bc-4548-91bc-634fd352e876",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a872841f-48bc-4548-91bc-634fd352e876": {
      "main": [
        [
          {
            "node": "3ca28839-f6ed-48b7-9a60-2c5d49cdb8ea",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dea6549a-c554-4194-a55b-be7dbe1d4bf4": {
      "main": [
        [
          {
            "node": "f72171cd-ef2c-45ec-939e-e9f378e52154",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3ca28839-f6ed-48b7-9a60-2c5d49cdb8ea": {
      "main": [
        [
          {
            "node": "dea6549a-c554-4194-a55b-be7dbe1d4bf4",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "6a8c2896-5300-41af-bcc9-b70dce159025",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bbba998f-64ff-4374-9483-ad3a5087f6c2": {
      "main": [
        [
          {
            "node": "f4cd172e-3dd4-45f6-b021-04ab76f92a31",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Réseaux sociaux

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds16
Catégorie1
Types de nœuds6
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur
FabioInTech

FabioInTech

@fabiointech

AI Systems Architect with 18+ years experience designing scalable, intelligent automation solutions. I specialize in architecting complex n8n workflows that integrate AI systems, streamline operations, and optimize business processes. My expertise spans multi-agent architectures, data automation, and enterprise-grade systems that adapt to evolving business needs. I help organizations unlock their potential through strategic technology implementation and innovative automation solutions.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34