{
  "name": "Track daily Google SERP rankings with Decodo and Google Sheets",
  "nodes": [
    {
      "id": "sched_1",
      "name": "Daily Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        240,
        192
      ]
    },
    {
      "id": "set_input_1",
      "name": "Set Search Input",
      "type": "n8n-nodes-base.set",
      "position": [
        448,
        192
      ]
    },
    {
      "id": "http_decodo_1",
      "name": "Decodo Search",
      "type": "@decodo/n8n-nodes-decodo.decodo",
      "position": [
        688,
        192
      ]
    },
    {
      "id": "if_has_results_1",
      "name": "Has Results",
      "type": "n8n-nodes-base.if",
      "position": [
        960,
        192
      ]
    },
    {
      "id": "split_out_1",
      "name": "Split Results",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1200,
        176
      ]
    },
    {
      "id": "set_norm_1",
      "name": "Map SERP Row",
      "type": "n8n-nodes-base.set",
      "position": [
        1920,
        176
      ]
    },
    {
      "id": "if_valid_row_1",
      "name": "Valid Row",
      "type": "n8n-nodes-base.if",
      "position": [
        2160,
        176
      ]
    },
    {
      "id": "gs_success_1",
      "name": "Write SERP Results",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2448,
        160
      ]
    },
    {
      "id": "set_err_no_results_1",
      "name": "Build No-Result Error",
      "type": "n8n-nodes-base.set",
      "position": [
        2448,
        320
      ]
    },
    {
      "id": "set_err_bad_item_1",
      "name": "Build Invalid-Row Error",
      "type": "n8n-nodes-base.set",
      "position": [
        2672,
        208
      ]
    },
    {
      "id": "gs_error_1",
      "name": "Write SERP Errors",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2848,
        320
      ]
    },
    {
      "id": "extract_organic_1",
      "name": "Extract Organic",
      "type": "n8n-nodes-base.set",
      "position": [
        1440,
        176
      ]
    },
    {
      "id": "split_organic_1",
      "name": "Split Organic",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1680,
        176
      ]
    },
    {
      "id": "a747d799-124f-4c76-a0cc-53c05ef39d91",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        -288
      ],
      "parameters": {
        "width": 500,
        "height": 750,
        "content": "## Daily SERP monitor: capture top search results\n\n### How it works\n1. Runs on a daily schedule and loads the configured keyword, country, language, device, and top_n.\n2. Calls Decodo to perform a Goo"
      }
    },
    {
      "id": "24fc6079-d7de-404b-bfd6-4cf252d67266",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2320,
        16
      ],
      "parameters": {
        "width": 748,
        "height": 444,
        "content": "## Store Results & Log Errors\nKeeps only valid top-ranked rows and appends them to the results sheet. If there are no results or a row is missing key fields, it writes an error entry to the errors she"
      }
    },
    {
      "id": "86f89d19-935b-4f42-99d8-1232d668a2af",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        16
      ],
      "parameters": {
        "width": 700,
        "height": 444,
        "content": "## Schedule & Search Setup\nRuns daily and defines thesearch and scrape with decodo"
      }
    },
    {
      "id": "1b4a86e5-b42c-4c26-a498-a1a987093699",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        896,
        16
      ],
      "parameters": {
        "width": 1404,
        "height": 444,
        "content": "## Parse & Filter Top Results\nBreaks the response into items, extracts organic listings, maps fields, and keeps only valid rows within the top-N ranks."
      }
    }
  ],
  "connections": {
    "Valid Row": {
      "main": [
        [
          {
            "node": "Write SERP Results",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Build Invalid-Row Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has Results": {
      "main": [
        [
          {
            "node": "Split Results",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Build No-Result Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Map SERP Row": {
      "main": [
        [
          {
            "node": "Valid Row",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Trigger": {
      "main": [
        [
          {
            "node": "Set Search Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Decodo Search": {
      "main": [
        [
          {
            "node": "Has Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Organic": {
      "main": [
        [
          {
            "node": "Map SERP Row",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Results": {
      "main": [
        [
          {
            "node": "Extract Organic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Organic": {
      "main": [
        [
          {
            "node": "Split Organic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Search Input": {
      "main": [
        [
          {
            "node": "Decodo Search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build No-Result Error": {
      "main": [
        [
          {
            "node": "Write SERP Errors",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Invalid-Row Error": {
      "main": [
        [
          {
            "node": "Write SERP Errors",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}