{
  "id": "qmmXKcpJOCm9qaCk",
  "meta": {
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a",
    "templateCredsSetupCompleted": true
  },
  "name": "SERPBear analytics template",
  "tags": [],
  "nodes": [
    {
      "id": "2ad0eb40-6628-4c6b-bc15-7081e7712f1a",
      "name": "When clicking ‘Test workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        260,
        380
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5a3c9ad8-a562-4bb0-bb11-c325552d8101",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        260,
        160
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "bdfa7388-f9b3-4145-90de-2e58138e14bf",
      "name": "Get data from SerpBear",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        580,
        260
      ],
      "parameters": {
        "url": "https://myserpbearinstance.com/api/keyword?id=22",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "domain",
              "value": "rumjahn.com"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "3fshHb4fyI5XfLyq",
          "name": "Header Auth account 6"
        }
      },
      "executeOnce": false,
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "id": "c169f4e3-ab60-4b46-9f49-cf27a13dd7c6",
      "name": "Parse data from SerpBear",
      "type": "n8n-nodes-base.code",
      "position": [
        820,
        260
      ],
      "parameters": {
        "jsCode": "const keywords = items[0].json.keywords;\nconst today = new Date().toISOString().split('T')[0];\n\n// Create summary for each keyword\nconst keywordSummaries = keywords.map(kw => {\n  const position = kw.position || 0;\n  const lastWeekPositions = Object.values(kw.history || {}).slice(-7);\n  const avgPosition = lastWeekPositions.reduce((a, b) => a + b, 0) / lastWeekPositions.length;\n  \n  return {\n    keyword: kw.keyword,\n    currentPosition: position,\n    averagePosition: Math.round(avgPosition * 10) / 10,\n    trend: position < avgPosition ? 'improving' : position > avgPosition ? 'declining' : 'stable',\n    url: kw.url || 'not ranking'\n  };\n});\n\n// Create the prompt\nconst prompt = `Here's the SEO ranking data for rumjahn.com as of ${today}:\n\n${keywordSummaries.map(kw => `\nKeyword: \"${kw.keyword}\"\nCurrent Position: ${kw.currentPosition}\n7-Day Average: ${kw.averagePosition}\nTrend: ${kw.trend}\nRanking URL: ${kw.url}\n`).join('\\n')}\n\nPlease analyze this data and provide:\n1. Key observations about ranking performance\n2. Keywords showing the most improvement\n3. Keywords needing attention\n4. Suggested actions for improvement`;\n\nreturn {\n  prompt\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "cc6e16a7-db46-42fe-837a-59ce635c906c",
      "name": "Send data to A.I. for analysis",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1060,
        260
      ],
      "parameters": {
        "url": "https://openrouter.ai/api/v1/chat/completions",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"meta-llama/llama-3.1-70b-instruct:free\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"You are an SEO expert. This is keyword data for my site. Can you summarize the data into a table and then give me some suggestions:{{ encodeURIComponent($json.prompt)}}\" \n    }\n  ]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "WY7UkF14ksPKq3S8",
          "name": "Header Auth account 2"
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "id": "a623f06c-1dfe-4d04-a7fd-fed7049a7588",
      "name": "Save data to Baserow",
      "type": "n8n-nodes-base.baserow",
      "position": [
        1340,
        260
      ],
      "parameters": {
        "tableId": 644,
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": 6264,
              "fieldValue": "={{ DateTime.now().toFormat('yyyy-MM-dd') }}"
            },
            {
              "fieldId": 6265,
              "fieldValue": "={{ $json.choices[0].message.content }}"
            },
            {
              "fieldId": 6266,
              "fieldValue": "Rumjahn"
            }
          ]
        },
        "operation": "create",
        "databaseId": 121
      },
      "credentials": {
        "baserowApi": {
          "id": "8w0zXhycIfCAgja3",
          "name": "Baserow account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e8048faf-bbed-4e48-b273-d1a50a767e76",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        220,
        -360
      ],
      "parameters": {
        "color": 5,
        "width": 614.709677419355,
        "height": 208.51612903225802,
        "content": "## Send Matomo analytics to A.I. and save results to baserow\n\nThis workflow will check the Google keywords for your site and it's rank.\n\n[💡 You can read more about this workflow here](https://rumjahn.com/how-to-create-an-a-i-agent-to-analyze-serpbear-keyword-rankings-using-n8n-for-free-without-any-coding-skills-required/)"
      },
      "typeVersion": 1
    },
    {
      "id": "1a18e685-79db-423f-992a-5e0d4ddeb672",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        520,
        -80
      ],
      "parameters": {
        "width": 214.75050403225822,
        "height": 531.7318548387107,
        "content": "## Get SERPBear Data\n \n1. Enter your SerpBear API keys and URL. You need to find your website ID which is probably 1.\n2. Navigate to Administration > Personal > Security > Auth tokens within your Matomo dashboard. Click on Create new token and provide a purpose for reference."
      },
      "typeVersion": 1
    },
    {
      "id": "99895baf-75d0-4af2-87de-5b8951186e78",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        980,
        -60
      ],
      "parameters": {
        "color": 3,
        "width": 225.99936321742769,
        "height": 508.95792207792226,
        "content": "## Send data to A.I.\n\nFill in your Openrouter A.I. credentials. Use Header Auth.\n- Username: Authorization\n- Password: Bearer {insert your API key}\n\nRemember to add a space after bearer. Also, feel free to modify the prompt to A.1."
      },
      "typeVersion": 1
    },
    {
      "id": "07d03511-98b0-4f4a-8e68-96ca177fb246",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1240,
        -40
      ],
      "parameters": {
        "color": 6,
        "width": 331.32883116883124,
        "height": 474.88,
        "content": "## Send data to Baserow\n\nCreate a table first with the following columns:\n- Date\n- Note\n- Blog\n\nEnter the name of your website under \"Blog\" field."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8b7e7da7-1965-4ca4-8e15-889eda819723",
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get data from SerpBear",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get data from SerpBear": {
      "main": [
        [
          {
            "node": "Parse data from SerpBear",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse data from SerpBear": {
      "main": [
        [
          {
            "node": "Send data to A.I. for analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send data to A.I. for analysis": {
      "main": [
        [
          {
            "node": "Save data to Baserow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Test workflow’": {
      "main": [
        [
          {
            "node": "Get data from SerpBear",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}