{
  "name": "Generate SEO anchor text suggestions from URLs with Firecrawl and Claude",
  "nodes": [
    {
      "id": "305cbe41-f65f-4c0e-8a34-01002bc44998",
      "name": "Sticky Note18",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -544,
        496
      ],
      "parameters": {
        "width": 1136,
        "height": 144,
        "content": "# Google Sheets template \n\n## https://docs.google.com/spreadsheets/d/1VNl8xLYgRrNcKrmN9hCdfov1dMnwD44tAALJZAlagCo"
      }
    },
    {
      "id": "f5995a32-6aa6-47da-9c7f-cffd0ab6eb14",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        -832
      ],
      "parameters": {
        "width": 1024,
        "height": 400,
        "content": "![Logo Growth AI](https://cdn.prod.website-files.com/6825df5b20329ba581df4914/68d413c43f8729fa336568a6_Logo_horizontal.png)"
      }
    },
    {
      "id": "dd7a815c-f4e9-4e0d-ace3-9818f66c3cdb",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        -400
      ],
      "parameters": {
        "width": 1024,
        "height": 240,
        "content": "## Need more advanced automation solutions? Contact us for custom enterprise workflows!\n\n# Growth-AI.fr\n\n## https://www.linkedin.com/in/allanvaccarizi/\n## https://www.linkedin.com/in/hugo-marinier-%F0"
      }
    },
    {
      "id": "135d226d-5c7b-49bb-9909-3d6cece064e4",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1632,
        -416
      ],
      "parameters": {
        "width": 480,
        "height": 896,
        "content": "## Anchor generator\n\n### How it works\n\n1. A chat message triggers the workflow, which reads URLs and data from a Google Sheet.\n2. The data is filtered to select only rows that need processing, then fe"
      }
    },
    {
      "id": "c6c6a7d6-6045-411a-b790-ce17a6678819",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1104,
        -112
      ],
      "parameters": {
        "width": 656,
        "height": 320,
        "content": "## Trigger and fetch sheet data\n\nA chat message starts the workflow. The Google Sheets node reads all rows from the spreadsheet, then the Filter node removes rows that don't need processing."
      }
    },
    {
      "id": "11c21d88-b836-422a-bd0e-3e9cc6ec9aa9",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        -112
      ],
      "parameters": {
        "width": 672,
        "height": 512,
        "content": "## Loop and scrape URLs\n\nIterates over each filtered row, scrapes the target URL using Firecrawl, and immediately writes a status update back to the sheet to mark the row as in-progress or scraped."
      }
    },
    {
      "id": "3f9d02b9-b802-4c06-b1f7-0687729ee9c2",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        336,
        -112
      ],
      "parameters": {
        "width": 528,
        "height": 448,
        "content": "## Transform content and generate anchors\n\nA code node cleans and transforms the raw scraped content, then passes it to an AI agent powered by Anthropic Claude to generate SEO anchor text suggestions."
      }
    },
    {
      "id": "ee2d2103-3fac-4a23-914e-6a333794b031",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        912,
        -112
      ],
      "parameters": {
        "width": 400,
        "height": 416,
        "content": "## Write anchors back to sheet\n\nSaves the AI-generated anchor text into the corresponding row in Google Sheets, then returns control to the loop to process the next item."
      }
    },
    {
      "id": "8d73ddcf-2d03-4255-bc41-6c691e460a66",
      "name": "When Chat Message Received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -1056,
        48
      ]
    },
    {
      "id": "f5dbfdf3-d44b-4b45-bf09-766e3f6fbdce",
      "name": "Filter Eligible Sheet Rows",
      "type": "n8n-nodes-base.filter",
      "position": [
        -592,
        48
      ]
    },
    {
      "id": "73042aee-61b9-492f-9f4f-2c58b7d87a38",
      "name": "Loop Over Rows in Batches",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -320,
        48
      ]
    },
    {
      "id": "502a5472-050b-4904-9633-eda9cbcbbc08",
      "name": "Anchor Generator Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        560,
        48
      ]
    },
    {
      "id": "b4f6b019-ad63-4d20-acdb-3185ff76cdd5",
      "name": "Read URLs from Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -800,
        48
      ]
    },
    {
      "id": "fd260386-41a8-4148-9933-e7407368ffe0",
      "name": "Scrape URL via Firecrawl",
      "type": "@mendable/n8n-nodes-firecrawl.firecrawl",
      "position": [
        -80,
        48
      ]
    },
    {
      "id": "a1acb5f7-455d-448f-89c9-8b28e38eb2e5",
      "name": "Parse Scraped Content",
      "type": "n8n-nodes-base.code",
      "position": [
        384,
        48
      ]
    },
    {
      "id": "ecf3cfd5-642c-4ab8-a51f-db3f0f08e994",
      "name": "Update Scrape Status in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        160,
        240
      ]
    },
    {
      "id": "332da064-8104-4af0-af81-0e54cdbba3fe",
      "name": "Save Anchors to Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1072,
        48
      ]
    },
    {
      "id": "fc1c20c8-9641-4b7b-ab4e-ab7fa12c6056",
      "name": "Claude Sonnet 4.6 Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        560,
        208
      ]
    }
  ],
  "connections": {
    "Parse Scraped Content": {
      "main": [
        [
          {
            "node": "Anchor Generator Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read URLs from Sheets": {
      "main": [
        [
          {
            "node": "Filter Eligible Sheet Rows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Anchor Generator Agent": {
      "main": [
        [
          {
            "node": "Save Anchors to Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Anchors to Sheets": {
      "main": [
        [
          {
            "node": "Loop Over Rows in Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Claude Sonnet 4.6 Model": {
      "ai_languageModel": [
        [
          {
            "node": "Anchor Generator Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Scrape URL via Firecrawl": {
      "main": [
        [
          {
            "node": "Parse Scraped Content",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Update Scrape Status in Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Rows in Batches": {
      "main": [
        [],
        [
          {
            "node": "Scrape URL via Firecrawl",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Eligible Sheet Rows": {
      "main": [
        [
          {
            "node": "Loop Over Rows in Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When Chat Message Received": {
      "main": [
        [
          {
            "node": "Read URLs from Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Scrape Status in Sheets": {
      "main": [
        [
          {
            "node": "Loop Over Rows in Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}