AutomationFlowsData & Sheets › Research and Summarize B2b Leads From Google Sheets to Airtable with Browseract

Research and Summarize B2b Leads From Google Sheets to Airtable with Browseract

ByMadame AI Team | Kai @madame-ai on n8n.io

This workflow automates the time-consuming process of B2B market research. It takes a list of company website URLs from a Google Sheet, uses BrowserAct to scrape their profiles and news sections, analyzes the data using AI to determine strategic focus and key activities, and…

Event trigger★★★★☆ complexityAI-powered18 nodesOutput Parser StructuredOpenRouter ChatAirtableN8N Nodes BrowseractAgentGoogle Sheets
Data & Sheets Trigger: Event Nodes: 18 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #13385 — we link there as the canonical source.

This workflow follows the Agent → Airtable recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "zdld4EKAqUQqPvpf",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Automate B2B lead research from Google Sheets to Airtable With BrowserAct",
  "tags": [],
  "nodes": [
    {
      "id": "57d15707-3da2-4ea8-9fc8-9013ff05179c",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -176,
        32
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "0372d7ec-0aa5-4a34-8ea2-6834b89e35ae",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        288,
        224
      ],
      "parameters": {
        "autoFix": true,
        "jsonSchemaExample": "{\n  \"data_type\": \"News\",\n  \"company_name\": \"Ghost\",\n  \"primary_date\": \"2026-01-14\",\n  \"core_summary\": \"Ghost recently introduced email clipping warnings to help newsletter creators avoid Gmail truncation. They also launched a discovery engine to promote independent publishers.\",\n  \"key_entities\": \"Entri, .link, Ghost 6.0\",\n  \"strategic_focus\": \"Focusing on newsletter optimization and creator growth/discovery.\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "e8fa3ab2-79ac-48d1-bb0b-7d8ded71ccae",
      "name": "OpenRouter Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        160,
        224
      ],
      "parameters": {
        "model": "openai/gpt-5",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a7630002-fbfa-47a7-873a-c313f0d5ec02",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        304,
        -416
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "b09ef1d8-05d9-4350-8e66-283791b549c2",
      "name": "Structured Output Parser1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        672,
        -192
      ],
      "parameters": {
        "autoFix": true,
        "jsonSchemaExample": "{\n  \"Name\": \"Ghost\",\n  \"Notes\": \"**Company Persona:**\\nNon-profit, open-source organization building technology for modern publishing. Positioned as an independent alternative to Substack and WordPress.\\n\\n**Strategic Focus:**\\nPrioritizing creator monetization, growth tools (memberships/newsletters), and strengthening the open-source developer ecosystem. Actively promoting the launch of Ghost 6.0.\\n\\n**Recent Activities:**\\n- **2026-01-29:** Shipped improvements to paid member analytics and a new Growth tab to break down subscriptions by tier.\\n- **2026-01-22:** Added chainable filters for traffic analytics and full UTM support.\\n- **2026-01-14:** Launched email clipping warnings to prevent newsletter truncation in Gmail.\\n\\n**Key Entities & Tech:**\\nGhost 6.0, Tinybird, API, Ghost(Pro), Theme Marketplace, Open Subscription Platforms.\",\n  \"Assignee\": \"AI Agent\",\n  \"Status\": \"Todo\",\n  \"Attachments\": [],\n  \"Attachment Summary\": \"Ghost is a non-profit open-source publishing platform currently prioritizing first-party analytics and creator growth tools alongside the launch of Ghost 6.0.\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "4e701483-b428-46c3-bc9d-49a929d3e7c5",
      "name": "OpenRouter Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        496,
        -192
      ],
      "parameters": {
        "model": "google/gemini-3-flash-preview",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ea6246f0-c50e-40f7-9d94-ffaa8ab1a56a",
      "name": "Create a record",
      "type": "n8n-nodes-base.airtable",
      "position": [
        864,
        -416
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appGWdWTgqsbIVXP3",
          "cachedResultUrl": "https://airtable.com/appGWdWTgqsbIVXP3",
          "cachedResultName": "BrowserAct_Test"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblMT3dO4qmf0GpRU",
          "cachedResultUrl": "https://airtable.com/appGWdWTgqsbIVXP3/tblMT3dO4qmf0GpRU",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "Name": "={{ $json.output.Name }}",
            "Notes": "={{ $json.output.Notes }}",
            "Status": "={{ $json.output.Status }}",
            "Attachments": "={{ $json.output.Attachments }}",
            "Attachment Summary": "={{ $json.output[\"Attachment Summary\"] }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Notes",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Assignee",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Assignee",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Todo",
                  "value": "Todo"
                },
                {
                  "name": "In progress",
                  "value": "In progress"
                },
                {
                  "name": "Done",
                  "value": "Done"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Attachments",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Attachments",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Attachment Summary",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Attachment Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "typecast": true
        },
        "operation": "create",
        "authentication": "airtableOAuth2Api"
      },
      "credentials": {
        "airtableOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "ed390722-64d9-41bc-8b25-3824e0cb041c",
      "name": "Manual execution",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -528,
        32
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "6a7374cc-93d2-4441-9573-4c30eaca6c0c",
      "name": "Extract Target Page Data",
      "type": "n8n-nodes-browseract.browserAct",
      "position": [
        0,
        32
      ],
      "parameters": {
        "type": "WORKFLOW",
        "workflowId": "77103692630144570",
        "workflowConfig": {
          "value": {
            "input-Opponent_Page": "={{ $json[\"Page URL\"] }}"
          },
          "schema": [
            {
              "id": "input-Opponent_Page",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "description": "If left blank, the default value defined in BrowserAct will be used.",
              "displayName": "Opponent_Page",
              "defaultMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "input-Opponent_Page"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "credentials": {
        "browserActApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8119059d-5dd6-4f39-96f0-df002c610f65",
      "name": "Analyze the Company Page",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        160,
        32
      ],
      "parameters": {
        "text": "={{ $json.output.string }}",
        "options": {
          "systemMessage": "### ROLE\nYou are a Senior B2B Market Analyst. Your job is to ingest raw JSON data scraped from company websites, analyze the semantic meaning, and normalize it into a structured summary for a CRM and Content Generation pipeline.\n\n### INPUT CONTEXT\nYou will receive one of two types of JSON datasets:\n1. **News/Changelog Data:** Contains fields like 'page_title', 'main_heading', 'newsletter_title', 'content_paragraph', 'date', etc.\n2. **Company Profile Data:** Contains fields like 'headline', 'subheadline', 'founders', 'nav_links', 'mission', etc.\n\n### PROCESSING LOGIC\nYour first task is to **DETECT** which type of data you have received based on the keys present.\n\n#### IF DATA IS \"NEWS / CHANGELOG\":\n1.  **Sort:** Identify the most recent significant update based on the dates provided.\n2.  **Summarize:** Create a concise summary of the latest 3 updates combined. Focus on *what* changed and *why* it matters (value proposition).\n3.  **Strategic Analysis:** Infer the company's current focus (e.g., \"They are pivoting to security,\" \"They are focusing on AI,\" \"They are scaling growth tools\").\n4.  **Extraction:**\n    * `latest_update_title`: The specific headline of the newest item.\n    * `latest_update_date`: The date of that item.\n\n#### IF DATA IS \"COMPANY PROFILE / ABOUT\":\n1.  **Identity:** Extract the core mission statement.\n2.  **Leadership:** Extract founder names (if present) or key team info.\n3.  **Keywords:** Extract industry keywords (e.g., \"Open Source,\" \"Non-profit,\" \"SaaS\").\n4.  **Links:** Parse the 'nav_links' or 'footer_links' to find the \"Careers\" or \"Pricing\" page if available, otherwise just list the main domain.\n\n### OUTPUT SCHEMA (Strict JSON)\nYou must output a **FLAT JSON** object. Do not use nested arrays or objects, as this data is going directly into a Google Sheet (spreadsheet). If a list exists, join it with commas or pipe symbols (|).\n\n{\n  \"data_type\": \"News\" OR \"Profile\",\n  \"company_name\": \"String (Infer from content, e.g., 'Ghost')\",\n  \"primary_date\": \"YYYY-MM-DD (Date of scrape or latest news item)\",\n  \"core_summary\": \"String (A 2-3 sentence summary of the input data suitable for a briefing)\",\n  \"key_entities\": \"String (Founders, Feature Names, or Partners mentioned - comma separated)\",\n  \"strategic_focus\": \"String (One sentence on what the company is currently prioritizing)\",\n  \"raw_content_snippet\": \"String (The first 500 characters of the most relevant text, cleaned of newlines)\",\n  \"source_url\": \"String (If a URL is detected in the text, otherwise 'N/A')\"\n}"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3
    },
    {
      "id": "4e8bfa9a-d899-4436-8519-c2995a0bf231",
      "name": "Update Database",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        608,
        192
      ],
      "parameters": {
        "columns": {
          "value": {
            "Page URL": "={{ $('Loop Over Items').item.json[\"Page URL\"] }}",
            "Page Data": "={{ $json.output }}",
            "row_number": "={{ $('Loop Over Items').item.json.row_number }}"
          },
          "schema": [
            {
              "id": "Page URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Page URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Page Data",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Page Data",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y8B9xauKL-_xiJ5nIPr3Sk-yJKjnCQi16Kb7kEovj7E/edit#gid=0",
          "cachedResultName": "DataBase"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Y8B9xauKL-_xiJ5nIPr3Sk-yJKjnCQi16Kb7kEovj7E",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y8B9xauKL-_xiJ5nIPr3Sk-yJKjnCQi16Kb7kEovj7E/edit?usp=drivesdk",
          "cachedResultName": "B2B Contact Research"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "f36fb29f-0fbf-4808-9202-d4e10fe2ab9a",
      "name": "Retrieve Input Data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -368,
        32
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y8B9xauKL-_xiJ5nIPr3Sk-yJKjnCQi16Kb7kEovj7E/edit#gid=0",
          "cachedResultName": "DataBase"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Y8B9xauKL-_xiJ5nIPr3Sk-yJKjnCQi16Kb7kEovj7E",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y8B9xauKL-_xiJ5nIPr3Sk-yJKjnCQi16Kb7kEovj7E/edit?usp=drivesdk",
          "cachedResultName": "B2B Contact Research"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "d037a078-430e-48e6-aeab-c80ae8c12e5b",
      "name": "Retrieve Stored Data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        128,
        -416
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y8B9xauKL-_xiJ5nIPr3Sk-yJKjnCQi16Kb7kEovj7E/edit#gid=0",
          "cachedResultName": "DataBase"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Y8B9xauKL-_xiJ5nIPr3Sk-yJKjnCQi16Kb7kEovj7E",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Y8B9xauKL-_xiJ5nIPr3Sk-yJKjnCQi16Kb7kEovj7E/edit?usp=drivesdk",
          "cachedResultName": "B2B Contact Research"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.7
    },
    {
      "id": "f252c0f0-263a-45cb-8b47-b36879f40d37",
      "name": "Analyze data and create an Airtable record",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        512,
        -416
      ],
      "parameters": {
        "text": "= array of data: {{ JSON.stringify($json.data, null, 2) }}",
        "options": {
          "systemMessage": "### ROLE\nYou are an Expert B2B Lead Researcher & Data Synthesizer.\n\n### INPUT CONTEXT\nYou will receive data array.\nInside this array, each item has a field called `Page Data`.\n**IMPORTANT:** The `Page Data` field is a STRINGIFIED JSON object (a JSON string inside a JSON field). You must mentally parse this string to extract the actual content (Company Profile, News, About Us info).\n\n### YOUR GOAL\nAggregating all the parsed data from the array into a **SINGLE** comprehensive \"Research Record\" for Airtable. You must structure the output to highlight **Personas (Company Type), Responsibilities (Strategic Focus), and Recent Activities (News)**.\n\n### PROCESSING INSTRUCTIONS\n1.  **Parse & Merge:** Iterate through every item in the `data` array. Parse the `Page Data` string.\n2.  **Extract Company Name:** Identify the consistent company name (e.g., \"Ghost\").\n3.  **Synthesize \"Notes\" (The Deep Dive):**\n    * **Strategic Focus:** Combine the `strategic_focus` fields. What is their main goal right now? (e.g., \"Monetization,\" \"Analytics\").\n    * **Recent Activities:** meaningful summary of the `Page Data` tagged as \"News\". Include dates if available.\n    * **Key Entities/Tech:** Compile a clean list of `key_entities` (e.g., \"Ghost 6.0, Tinybird, API\").\n    * **Company Persona:** Describe the organization type (e.g., \"Non-profit open-source foundation\").\n4.  **Synthesize \"Attachment Summary\":** Write a high-impact 1-sentence pitch describing who they are and their #1 current priority.\n5.  **Formatting:** Use Markdown (bolding, bullet points) inside the `Notes` field so it looks clean in Airtable.\n\n### OUTPUT SCHEMA (Strict JSON for Airtable)\nYou must output a single JSON object. Keys must match exactly.\n\n{\n  \"Name\": \"String (Company Name)\",\n  \"Notes\": \"String (Use Markdown:\\n\\n**Strategic Focus:**\\n[Summary]\\n\\n**Recent Activities:**\\n- [Activity 1]\\n- [Activity 2]\\n\\n**Tech & Entities:**\\n[List])\",\n  \"Assignee\": \"AI Agent\",\n  \"Status\": \"Todo\",\n  \"Attachments\": [],\n  \"Attachment Summary\": \"String (The 1-sentence executive bio)\"\n}"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3
    },
    {
      "id": "86957e01-814f-45be-b003-510d7946e84d",
      "name": "Documentation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -944,
        -384
      ],
      "parameters": {
        "width": 380,
        "height": 424,
        "content": "## \u26a1 Workflow Overview & Setup\n\n**Summary:** Automate B2B lead research by scraping company profiles and news from a list of URLs, synthesizing the data with AI, and organizing it into a structured Airtable database.\n\n### Requirements\n* **Credentials:** BrowserAct, OpenRouter, Google Sheets, Airtable.\n* **Mandatory:** BrowserAct API (Template: **B2B Contact Research**)\n\n### How to Use\n1.  **Credentials:** Configure your API keys for all services.\n2.  **BrowserAct Template:** Ensure the **B2B Contact Research** template is active in your account.\n3.  **Google Sheet:** Prepare a sheet with a column `Page URL` containing the target company websites.\n4.  **Airtable:** Set up a base with fields matching the output schema (`Name`, `Notes`, `Status`, etc.).\n\n### Need Help?\n[How to Find Your BrowserAct API Key & Workflow ID](https://docs.browseract.com)\n[How to Connect n8n to BrowserAct](https://docs.browseract.com)\n[How to Use & Customize BrowserAct Templates](https://docs.browseract.com)"
      },
      "typeVersion": 1
    },
    {
      "id": "8f22f9ef-f27f-40d7-919b-8c310bcf2a2b",
      "name": "Step 1 Explanation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        400
      ],
      "parameters": {
        "color": 7,
        "width": 1276,
        "height": 96,
        "content": "### \ud83c\udf10 Step 1: Automated Scraping\n\nThe workflow reads a list of URLs from Google Sheets. For each URL, it triggers a BrowserAct task to scrape key company data (profile info, news, etc.) and updates the sheet with the raw JSON results."
      },
      "typeVersion": 1
    },
    {
      "id": "3e669c2f-1e6a-40dd-bc94-451fb6a9097e",
      "name": "Step 3 Explanation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        -560
      ],
      "parameters": {
        "color": 7,
        "width": 904,
        "height": 120,
        "content": "### \ud83d\udcc2 Step 3: Database Entry\n\nOnce all scraping is complete, the data is aggregated. The structured AI output is formatted into strict JSON compatible with Airtable. The workflow then creates a new record in the Airtable base, populating all relevant fields for your CRM pipeline."
      },
      "typeVersion": 1
    },
    {
      "id": "7d18a588-60e2-4ddf-8b48-bc7cb510f73e",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -544,
        -384
      ],
      "parameters": {
        "color": 6,
        "width": 496,
        "height": 288,
        "content": "@[youtube](mLCuN9Of6EM)"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "f5ebc2e8-ea2c-4361-bcdb-84c5e33f031e",
  "connections": {
    "Aggregate": {
      "main": [
        [
          {
            "node": "Analyze data and create an Airtable record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Retrieve Stored Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extract Target Page Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Database": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual execution": {
      "main": [
        [
          {
            "node": "Retrieve Input Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Input Data": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Stored Data": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Analyze the Company Page",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Structured Output Parser",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Analyze data and create an Airtable record",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Structured Output Parser1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Analyze the Company Page": {
      "main": [
        [
          {
            "node": "Update Database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Target Page Data": {
      "main": [
        [
          {
            "node": "Analyze the Company Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Analyze the Company Page",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "Analyze data and create an Airtable record",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Analyze data and create an Airtable record": {
      "main": [
        [
          {
            "node": "Create a record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow automates the time-consuming process of B2B market research. It takes a list of company website URLs from a Google Sheet, uses BrowserAct to scrape their profiles and news sections, analyzes the data using AI to determine strategic focus and key activities, and…

Source: https://n8n.io/workflows/13385/ — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

Xmind Sales Email v2. Uses gmailTrigger, notion, googleSheets, googleSheetsTrigger. Event-driven trigger; 37 nodes.

Gmail Trigger, Notion, Google Sheets +6
Data & Sheets

"This workflow builds an AI-powered resume screening system inside n8n. It begins with Gmail and Form triggers that capture incoming resumes, then uploads each file to Google Drive for storage. The re

Gmail Trigger, Google Drive, Information Extractor +5
Data & Sheets

This template is ideal for B2B founders, solopreneurs, growth marketers, SDRs, or anyone looking to scale their lead generation and enrichment with no-code tools to low-code tools.

Google Sheets, OpenRouter Chat, Chain Llm +4
Data & Sheets

Automates Singapore COE price tracking with AI forecasts and buy/wait recommendations. Weekly scraping collects LTA data, enriches with economic indicators, predicts 6-month trends, and alerts users v

HTTP Request, Google Sheets, Agent +4
Data & Sheets

This template is perfect for Gumroad creators, solopreneurs, digital product sellers, and freelancers who want to track and thank customers automatically — without spending time on manual work.

Google Sheets, Gumroad Trigger, Telegram +8