Exportación automática de datos de Google Search Console a Airtable

Avanzado

Este es unMarket Research, Multimodal AIflujo de automatización del dominio deautomatización que contiene 21 nodos.Utiliza principalmente nodos como Set, Airtable, SplitOut, HttpRequest, ScheduleTrigger. Exportar automáticamente datos de Google Search Console a Airtable

Requisitos previos
  • Clave de API de Airtable
  • Pueden requerirse credenciales de autenticación para la API de destino
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "id": "AJCFkuIkFN45QXA4",
  "meta": {
    "instanceId": "18b0d04ad5030054be4ab49562e84ea4a079ab4cb036003697394140227c7e76",
    "templateId": "2613",
    "templateCredsSetupCompleted": true
  },
  "name": "Export Google Search Console Data to Airtable Automatically",
  "tags": [],
  "nodes": [
    {
      "id": "8e3f167d-cbeb-4f7f-a867-c356d2dca9d0",
      "name": "Dividir",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1968,
        416
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "rows"
      },
      "typeVersion": 1
    },
    {
      "id": "19370d12-f6de-44a1-91a6-da097abdf7de",
      "name": "Editar campos",
      "type": "n8n-nodes-base.set",
      "position": [
        2192,
        416
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "7343c80f-37f3-4bb5-84d8-9f21f8a350cd",
              "name": "Keyword",
              "type": "string",
              "value": "={{ $json.keys[0] }}"
            },
            {
              "id": "436e7c8b-2df2-40a9-97af-597dc00cf143",
              "name": "clicks",
              "type": "number",
              "value": "={{ $json.clicks }}"
            },
            {
              "id": "5b4aaffe-391a-4c9d-8249-f447397a3f5d",
              "name": "impressions",
              "type": "number",
              "value": "={{ $json.impressions }}"
            },
            {
              "id": "33677237-57fe-48f4-aff8-72ae81b5f5a2",
              "name": "ctr",
              "type": "number",
              "value": "={{ $json.ctr }}"
            },
            {
              "id": "f961deee-d222-4df7-a7ff-b7286405e4a7",
              "name": "position",
              "type": "number",
              "value": "={{ $json.position }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9eae4908-5266-439c-a66b-5679036234de",
      "name": "Dividir1",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1968,
        544
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "rows"
      },
      "typeVersion": 1
    },
    {
      "id": "b05926b1-507f-4531-a05c-a15e835ee82e",
      "name": "Editar campos1",
      "type": "n8n-nodes-base.set",
      "position": [
        2192,
        544
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "7343c80f-37f3-4bb5-84d8-9f21f8a350cd",
              "name": "page",
              "type": "string",
              "value": "={{ $json.keys[0] }}"
            },
            {
              "id": "436e7c8b-2df2-40a9-97af-597dc00cf143",
              "name": "clicks",
              "type": "number",
              "value": "={{ $json.clicks }}"
            },
            {
              "id": "5b4aaffe-391a-4c9d-8249-f447397a3f5d",
              "name": "impressions",
              "type": "number",
              "value": "={{ $json.impressions }}"
            },
            {
              "id": "33677237-57fe-48f4-aff8-72ae81b5f5a2",
              "name": "ctr",
              "type": "number",
              "value": "={{ $json.ctr }}"
            },
            {
              "id": "f961deee-d222-4df7-a7ff-b7286405e4a7",
              "name": "position",
              "type": "number",
              "value": "={{ $json.position }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "42321587-2565-4a0a-9d9d-25cbfdeb9f49",
      "name": "Dividir2",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1968,
        672
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "rows"
      },
      "typeVersion": 1
    },
    {
      "id": "9e25eef9-daa4-47dd-b2cf-03cfebadb5c6",
      "name": "Editar campos2",
      "type": "n8n-nodes-base.set",
      "position": [
        2192,
        672
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "7343c80f-37f3-4bb5-84d8-9f21f8a350cd",
              "name": "date",
              "type": "string",
              "value": "={{ $json.keys[0] }}"
            },
            {
              "id": "436e7c8b-2df2-40a9-97af-597dc00cf143",
              "name": "clicks",
              "type": "number",
              "value": "={{ $json.clicks }}"
            },
            {
              "id": "5b4aaffe-391a-4c9d-8249-f447397a3f5d",
              "name": "impressions",
              "type": "number",
              "value": "={{ $json.impressions }}"
            },
            {
              "id": "33677237-57fe-48f4-aff8-72ae81b5f5a2",
              "name": "ctr",
              "type": "number",
              "value": "={{ $json.ctr }}"
            },
            {
              "id": "f961deee-d222-4df7-a7ff-b7286405e4a7",
              "name": "position",
              "type": "number",
              "value": "={{ $json.position }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e8f1ab65-9594-45e7-ba9e-7873bd53a107",
      "name": "fecha",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1744,
        672
      ],
      "parameters": {
        "url": "=https://www.googleapis.com/webmasters/v3/sites/sc-domain:{{$json.domain}}/searchAnalytics/query",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"startDate\": \"{{ $now.format('yyyy-MM-dd') }}\",\n  \"endDate\": \"{{ $now.minus($json.days, 'days').format('yyyy-MM-dd') }}\",\n  \"dimensions\": [\"date\"]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "googleOAuth2Api"
      },
      "credentials": {
        "googleOAuth2Api": {
          "id": "rgqJrGcq1fg3mqLm",
          "name": "Google account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d3bbf719-9524-4269-8c26-0eb7599add55",
      "name": "Programador",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        1072,
        608
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "092645b2-9e75-4ff0-8d33-4a3acadac789",
      "name": "Configurar dominio",
      "type": "n8n-nodes-base.set",
      "position": [
        1360,
        608
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "6f74dee0-3789-433e-b60e-ed2a05202675",
              "name": "domain",
              "type": "string",
              "value": "funautomations.io"
            },
            {
              "id": "8c73135e-9d39-4f66-821d-7decb3c64085",
              "name": "days",
              "type": "number",
              "value": 30
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "0b04b552-e484-417b-9a7e-a90d477dd45a",
      "name": "Obtener informe de consultas",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1744,
        416
      ],
      "parameters": {
        "url": "=https://www.googleapis.com/webmasters/v3/sites/sc-domain:{{$json.domain}}/searchAnalytics/query",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"startDate\": \"{{ $now.format('yyyy-MM-dd') }}\",\n  \"endDate\": \"{{ $now.minus($json.days, 'days').format('yyyy-MM-dd') }}\",\n  \"dimensions\": [\"query\"]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "googleOAuth2Api"
      },
      "credentials": {
        "googleOAuth2Api": {
          "id": "rgqJrGcq1fg3mqLm",
          "name": "Google account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "9f9f2be7-1301-4c91-8da1-86eab5725683",
      "name": "Obtener informe de páginas",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1744,
        544
      ],
      "parameters": {
        "url": "=https://www.googleapis.com/webmasters/v3/sites/sc-domain:{{$json.domain}}/searchAnalytics/query",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"startDate\": \"{{ $now.format('yyyy-MM-dd') }}\",\n  \"endDate\": \"{{ $now.minus($json.days, 'days').format('yyyy-MM-dd') }}\",\n  \"dimensions\": [\"page\"]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "googleOAuth2Api"
      },
      "credentials": {
        "googleOAuth2Api": {
          "id": "rgqJrGcq1fg3mqLm",
          "name": "Google account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d2b91103-2fb1-429c-9d90-50f92f3d6a42",
      "name": "Crear registro",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2512,
        416
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appzCPTyUrpA1fXpf",
          "cachedResultUrl": "https://airtable.com/appzCPTyUrpA1fXpf",
          "cachedResultName": "Search Console Reports"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblK0ZkihGpOc7ADu",
          "cachedResultUrl": "https://airtable.com/appzCPTyUrpA1fXpf/tblK0ZkihGpOc7ADu",
          "cachedResultName": "Queries"
        },
        "columns": {
          "value": {
            "ctr": "={{ $json.ctr }}",
            "clicks": "={{ $json.clicks }}",
            "Keyword": "={{ $json.Keyword }}",
            "position": "={{ $json.position }}",
            "impressions": "={{ $json.impressions }}"
          },
          "schema": [
            {
              "id": "Keyword",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Keyword",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "clicks",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "clicks",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "impressions",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "impressions",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ctr",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "ctr",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "position",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "position",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "vKZ5Wl43rmNFe0My",
          "name": "Airtable Personal Access Token account 3"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "7ea7d226-ba6c-4f08-b6f6-fda31185cbbb",
      "name": "Crear registro1",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2512,
        544
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appzCPTyUrpA1fXpf",
          "cachedResultUrl": "https://airtable.com/appzCPTyUrpA1fXpf",
          "cachedResultName": "Search Console Reports"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblA6tGocjen8W0iN",
          "cachedResultUrl": "https://airtable.com/appzCPTyUrpA1fXpf/tblA6tGocjen8W0iN",
          "cachedResultName": "Pages"
        },
        "columns": {
          "value": {
            "ctr": "={{ $json.ctr }}",
            "page": "={{ $json.keys[0] }}",
            "clicks": "={{ $json.clicks }}",
            "position": "={{ $json.position }}",
            "impressions": "={{ $json.impressions }}"
          },
          "schema": [
            {
              "id": "page",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "page",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "clicks",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "clicks",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "impressions",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "impressions",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ctr",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "ctr",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "position",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "position",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "vKZ5Wl43rmNFe0My",
          "name": "Airtable Personal Access Token account 3"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "fe31cb29-ae45-4fb0-a39e-c8fe337b4984",
      "name": "Crear registro2",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2512,
        672
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appzCPTyUrpA1fXpf",
          "cachedResultUrl": "https://airtable.com/appzCPTyUrpA1fXpf",
          "cachedResultName": "Search Console Reports"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblSJx4WuIm3feGGw",
          "cachedResultUrl": "https://airtable.com/appzCPTyUrpA1fXpf/tblSJx4WuIm3feGGw",
          "cachedResultName": "Dates"
        },
        "columns": {
          "value": {
            "ctr": "={{ $json.ctr }}",
            "date": "={{ $json.keys[0] }}",
            "clicks": "={{ $json.clicks }}",
            "position": "={{ $json.position }}",
            "impressions": "={{ $json.impressions }}"
          },
          "schema": [
            {
              "id": "date",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "clicks",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "clicks",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "impressions",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "impressions",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ctr",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "ctr",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "position",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "position",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "vKZ5Wl43rmNFe0My",
          "name": "Airtable Personal Access Token account 3"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "e86d0696-7d10-4a76-8ba7-953862d65b1d",
      "name": "Nota adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        -432
      ],
      "parameters": {
        "width": 544,
        "height": 1216,
        "content": "# Export Google Search Console Data to Airtable Automatically  \n\n![automatiserdonneessearchconsoleairtable.png](1)\n\n*If you’ve ever downloaded CSV files from Google Search Console, opened them in Excel, cleaned the weird formatting, and pasted them into a sheet just to get a simple report… this workflow is made for you.*  \n\n\n\n## Who Is This Workflow For?  \n\nThis automation is perfect for:  \n- **SEO freelancers and consultants** → who want to track client performance without wasting time on manual exports.  \n- **Marketing teams** → who need fresh daily/weekly reports to check what keywords and pages are performing.  \n- **Website owners** → who just want a clean way to see how their site is doing without logging into Google Search Console every day.  \n\nBasically, if you care about SEO but don’t want to babysit CSV files, this workflow is your new best friend.  \n\n## What Does It Do?  \n\nHere’s the big picture:  \n1. It runs on a schedule (every day, or whenever you want).  \n2. It fetches data directly from the **Google Search Console API**.  \n3. It pulls 3 types of reports:  \n   - By **Query** (keywords people used).  \n   - By **Page** (URLs that ranked).  \n   - By **Date** (daily performance).  \n4. It splits and cleans the data so it’s human-friendly.  \n5. It saves everything into **Airtable**, organized in three tables.  \n\nEnd result: every time you open Airtable, you have a neat SEO database with clicks, impressions, CTR, and average position — no manual work required.  \n\n\n## Prerequisites  \n\nYou’ll need a few things to get started:  \n- Access to [Google Search Console](https://search.google.com/search-console).  \n- A [Google Cloud project](https://console.cloud.google.com/) with the Search Console API enabled.  \n- An [Airtable](https://airtable.com) account to store the data.  \n- An automation tool that can connect APIs (like the one we’re using here).  \n\nThat’s it!  "
      },
      "typeVersion": 1
    },
    {
      "id": "4eb3576c-7590-4d30-857b-da1632fcd074",
      "name": "Nota adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        96
      ],
      "parameters": {
        "height": 688,
        "content": "## Step 1: Schedule the Workflow  \n\nThe very first node in the workflow is the **Schedule Trigger**.  \n\n- **Why?** → So you don’t have to press “Run” every day.  \n- **What it does** → It starts the whole workflow at fixed times.  \n\nIn the JSON, you can configure things like:  \n- Run every day at a specific hour (e.g., 8 AM).  \n- Or run every X hours/minutes if you want more frequent updates.  \n\nThis is the alarm clock of your automation ⏰.  \n\n---"
      },
      "typeVersion": 1
    },
    {
      "id": "38400f18-ed3e-4f39-8424-77a631437b89",
      "name": "Nota adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1264,
        96
      ],
      "parameters": {
        "height": 688,
        "content": "## Step 2: Set Your Domain and Time Range  \n\nNext, we define the site and the time window for the report.  \n\nIn the JSON, there’s a **Set node** with two important parameters:  \n- `domain` → your website (example: `https://www.0vni.fr/`).  \n- `days` → how many days back you want the data (default: 30).  \n\n👉 Changing these two values updates the whole workflow. Super handy if you want 7-day reports instead of 30.  "
      },
      "typeVersion": 1
    },
    {
      "id": "0f72bcf5-f4c3-4617-9835-07163ebc381b",
      "name": "Nota adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1504,
        -272
      ],
      "parameters": {
        "width": 400,
        "height": 1056,
        "content": "## Step 3: Fetch Data from Google Search Console  \n\nThis is where the workflow talks to the API.  \nThere are **3 HTTP Request nodes**:  \n\n1. **Get Query Report**  \n   - Pulls data grouped by search queries (keywords).  \n   - Parameters in the JSON:  \n     - `startDate` = today - 30 days  \n     - `endDate` = today  \n     - `dimensions` = `\"query\"`  \n     - `rowLimit` = `25000` (maximum rows the API can return)  \n\n2. **Get Page Report**  \n   - Same idea, but grouped by page URLs.  \n   - Parameters:  \n     - `dimensions` = `\"page\"`  \n     - Same dates and row limit.  \n\n3. **Get Date Report**  \n   - This one groups performance by date.  \n   - Parameters:  \n     - `dimensions` = `\"date\"`  \n     - You get a day-by-day performance view.  \n\nEach request returns rows like this:  \n\n\n{\n  \"keys\": [\"example keyword\"],\n  \"clicks\": 42,\n  \"impressions\": 1000,\n  \"ctr\": 0.042,\n  \"position\": 8.5\n}"
      },
      "typeVersion": 1
    },
    {
      "id": "3b260edd-5a2f-4818-9ab9-40db86ad3e96",
      "name": "Nota adhesiva4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1904,
        -272
      ],
      "parameters": {
        "width": 208,
        "height": 1056,
        "content": "## Step 4: Split the Data  \n\n\n\nThe API sends results in a big array (`rows`). That’s not very usable directly.  \n\nSo we add a **Split Out node** for each report.  \n\n**What it does**: breaks the array into single items → 1 item per keyword, per page, or per date.  \n\nThis way, each line can be saved individually into Airtable.  \n\n👉 Think of it like opening a bag of candy and laying each one neatly on the table 🍬.  \n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f4834663-b817-41b0-82fe-9a1624908979",
      "name": "Nota adhesiva5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2112,
        -272
      ],
      "parameters": {
        "width": 208,
        "height": 1056,
        "content": "## Step 5: Clean and Rename Fields  \n\nAfter splitting, we use **Edit Fields nodes** to make the data human-friendly.  \n\nFor example:  \n- In the **Query report** → rename `keys[0]` into `Keyword`.  \n- In the **Page report** → rename `keys[0]` into `page`.  \n- In the **Date report** → rename `keys[0]` into `date`.  \n\nThis is also where we keep only the useful fields:  \n- `Keyword` / `page` / `date`  \n- `clicks`  \n- `impressions`  \n- `ctr`  \n- `position`  "
      },
      "typeVersion": 1
    },
    {
      "id": "1c81b533-fecf-485f-9269-73fe2975f25d",
      "name": "Nota adhesiva6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2320,
        -704
      ],
      "parameters": {
        "width": 464,
        "height": 1488,
        "content": "## Step 6: Save Everything into Airtable  \n\nFinally, the polished data is sent into Airtable.  \n\nIn the JSON, there are 3 Airtable nodes:  \n- **Queries table** → stores all the keywords.  \n- **Pages table** → stores all the URLs.  \n- **Dates table** → stores day-by-day metrics.  \n\nEach node is set to:  \n- **Operation** = `Create` → adds a new record.  \n- **Base** = `Search Console Reports`.  \n- **Table** = `Queries`, `Pages`, or `Dates`.  \n\n### Field Mapping  \n\nFor **Queries**:  \n- `Keyword` → `{{ $json.Keyword }}`  \n- `clicks` → `{{ $json.clicks }}`  \n- `impressions` → `{{ $json.impressions }}`  \n- `ctr` → `{{ $json.ctr }}`  \n- `position` → `{{ $json.position }}`  \n\n👉 Same logic for **Pages** and **Dates**, just replace `Keyword` with `page` or `date`.  \n\n---\n\n## Expected Output  \n\n\n\nEvery time this workflow runs:  \n- **Queries table** fills with fresh keyword performance data.  \n- **Pages table** shows how your URLs performed.  \n- **Dates table** tracks the evolution day by day.  \n\nIn Airtable, you now have a complete **SEO database** with no manual exports.  \n\n---\n\n## Why This Is Awesome  \n\n- 🚫 No more messy CSV exports.  \n- 📈 Data is always up-to-date.  \n- 🎛 You can build Airtable dashboards, filters, and interfaces.  \n- ⚙️ Easy to adapt → just change `domain` or `days` to customize.  \n\nAnd the best part? You can spend the time you saved on actual **SEO improvements** instead of spreadsheet gymnastics 💃.  \n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {},
  "versionId": "3f8ec591-388b-45a3-afab-829b086b8fe2",
  "connections": {
    "e8f1ab65-9594-45e7-ba9e-7873bd53a107": {
      "main": [
        [
          {
            "node": "42321587-2565-4a0a-9d9d-25cbfdeb9f49",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8e3f167d-cbeb-4f7f-a867-c356d2dca9d0": {
      "main": [
        [
          {
            "node": "19370d12-f6de-44a1-91a6-da097abdf7de",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9eae4908-5266-439c-a66b-5679036234de": {
      "main": [
        [
          {
            "node": "b05926b1-507f-4531-a05c-a15e835ee82e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "42321587-2565-4a0a-9d9d-25cbfdeb9f49": {
      "main": [
        [
          {
            "node": "9e25eef9-daa4-47dd-b2cf-03cfebadb5c6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "19370d12-f6de-44a1-91a6-da097abdf7de": {
      "main": [
        [
          {
            "node": "d2b91103-2fb1-429c-9d90-50f92f3d6a42",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b05926b1-507f-4531-a05c-a15e835ee82e": {
      "main": [
        [
          {
            "node": "7ea7d226-ba6c-4f08-b6f6-fda31185cbbb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9e25eef9-daa4-47dd-b2cf-03cfebadb5c6": {
      "main": [
        [
          {
            "node": "fe31cb29-ae45-4fb0-a39e-c8fe337b4984",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9f9f2be7-1301-4c91-8da1-86eab5725683": {
      "main": [
        [
          {
            "node": "9eae4908-5266-439c-a66b-5679036234de",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "092645b2-9e75-4ff0-8d33-4a3acadac789": {
      "main": [
        [
          {
            "node": "0b04b552-e484-417b-9a7e-a90d477dd45a",
            "type": "main",
            "index": 0
          },
          {
            "node": "9f9f2be7-1301-4c91-8da1-86eab5725683",
            "type": "main",
            "index": 0
          },
          {
            "node": "e8f1ab65-9594-45e7-ba9e-7873bd53a107",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0b04b552-e484-417b-9a7e-a90d477dd45a": {
      "main": [
        [
          {
            "node": "8e3f167d-cbeb-4f7f-a867-c356d2dca9d0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d3bbf719-9524-4269-8c26-0eb7599add55": {
      "main": [
        [
          {
            "node": "092645b2-9e75-4ff0-8d33-4a3acadac789",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Avanzado - Investigación de mercado, IA Multimodal

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos21
Categoría2
Tipos de nodos6
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Autor
Baptiste Fort

Baptiste Fort

@baptistefort

Baptiste.fort.pro@gmail.com

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34