HTTPリクエストとJavaScriptを使用したGoogle Mapsメール収集ツール

上級

これはLead Generation分野の自動化ワークフローで、19個のノードを含みます。主にCode, Wait, Limit, Filter, SplitOutなどのノードを使用。 リード生成システム:Google Mapsからメール収集ツールへ、Googleスプレッドシートにエクスポート

前提条件
  • ターゲットAPIの認証情報が必要な場合あり
  • Google Sheets API認証情報

カテゴリー

ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "id": "xiabGWCXUOe469Nm",
  "meta": {
    "instanceId": "d7661a849ead114a9aa6d9ceaf4160465aeb79532a35bde62160c840ffba9fc8"
  },
  "name": "Google Maps Email Scraper with HTTP Requests & JavaScript",
  "tags": [
    {
      "id": "l8MPK4ZirgwFWMno",
      "name": "N8N Course",
      "createdAt": "2025-01-23T18:12:52.273Z",
      "updatedAt": "2025-01-23T18:12:52.273Z"
    }
  ],
  "nodes": [
    {
      "id": "sticky-note-1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        100,
        -280
      ],
      "parameters": {
        "width": 350,
        "height": 180,
        "content": "## 🗺️ STEP 1: Google Maps Data Extraction\n\nThis workflow starts by scraping Google Maps for business listings:\n\n**Process:** Uses HTTP requests to search Google Maps with queries like \"Calgary dentists\"\n**Output:** Raw HTML containing business listings and website URLs\n**Key:** No APIs required - direct HTML scraping\n\n**Note:** Replace search URL with your target location and business type"
      },
      "typeVersion": 1,
      "name": ""
    },
    {
      "id": "sticky-note-2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        300,
        -320
      ],
      "parameters": {
        "width": 380,
        "height": 200,
        "content": "## 🔗 STEP 2: Website URL Processing\n\nExtracts and cleans business website URLs:\n\n1. **Extract URLs:** JavaScript regex finds all website URLs in Google Maps data\n2. **Filter Google URLs:** Removes irrelevant domains (google.com, gstatic, etc.)\n3. **Remove Duplicates:** Eliminates duplicate websites\n4. **Limit:** Controls batch size for testing (adjust for production)\n\n**Result:** Clean list of actual business websites ready for email extraction"
      },
      "typeVersion": 1,
      "name": ""
    },
    {
      "id": "sticky-note-3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        700,
        -320
      ],
      "parameters": {
        "width": 380,
        "height": 200,
        "content": "## 🔄 STEP 3: Smart Website Scraping\n\nProcesses each website individually to prevent IP blocking:\n\n**Loop Over Items:** Processes websites one by one with built-in delays\n**Scrape Site:** Downloads HTML content from each business website\n**Wait Nodes:** Prevent rate limiting and IP blocking\n**Error Handling:** Continues processing even if some sites fail\n\n**Critical:** The batching and delays are essential for reliable operation at scale"
      },
      "typeVersion": 1,
      "name": ""
    },
    {
      "id": "sticky-note-4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1100,
        -340
      ],
      "parameters": {
        "width": 400,
        "height": 220,
        "content": "## 📧 STEP 4: Email Extraction & Export\n\nFinal processing pipeline:\n\n1. **Extract Emails:** JavaScript regex finds all email addresses in website HTML\n2. **Filter Out Empties:** Removes websites with no emails found\n3. **Split Out:** Converts email arrays into individual items\n4. **Remove Duplicates:** Final deduplication across all sources\n5. **Add to Sheet:** Exports clean email list to Google Sheets\n\n**Result:** Organized database of business emails ready for outreach"
      },
      "typeVersion": 1,
      "name": ""
    },
    {
      "id": "4a6f9faa-5b11-41fe-88c9-cc8a262a2de2",
      "name": "ワークフローをテストする際",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        140,
        0
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "47d741e7-a53f-40c7-bf7c-09a446b0d229",
      "name": "重複を削除",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        940,
        0
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "id": "6cd049c8-425e-45e0-8d45-6a4883c2f496",
      "name": "アイテムをループ処理",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1340,
        0
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "3c3a3870-034d-4147-936a-4b0f19b7727d",
      "name": "待機",
      "type": "n8n-nodes-base.wait",
      "position": [
        1700,
        100
      ],
      "webhookId": "19cc6ed4-4fe7-485b-b879-c679e4b3374d",
      "parameters": {
        "amount": 1
      },
      "typeVersion": 1.1
    },
    {
      "id": "a377879d-517d-4c90-a3d4-a7a0c190787e",
      "name": "制限",
      "type": "n8n-nodes-base.limit",
      "position": [
        1120,
        0
      ],
      "parameters": {
        "maxItems": 10
      },
      "typeVersion": 1
    },
    {
      "id": "5f4ae91a-29c7-4fb3-b535-34bc5194b183",
      "name": "待機1",
      "type": "n8n-nodes-base.wait",
      "position": [
        1520,
        -60
      ],
      "webhookId": "0fe34756-6e43-4603-8891-5747a9a6500a",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "645bf31c-4b3c-4f4c-b90b-610fc2d6007c",
      "name": "分割",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1880,
        -60
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "emails"
      },
      "typeVersion": 1
    },
    {
      "id": "7e9c227c-2321-429a-a3f3-4c3a77bc6cf3",
      "name": "メールを抽出",
      "type": "n8n-nodes-base.code",
      "onError": "continueRegularOutput",
      "position": [
        1880,
        100
      ],
      "parameters": {
        "jsCode": "const input = $input.first().json.data\nconst regex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.(?!jpeg|jpg|png|gif|webp|svg)[a-zA-Z]{2,}/g\nconst emails = input.match(regex)\nreturn {json: {emails:emails}}"
      },
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "fb76c70c-385d-4e7f-93cd-43023690076a",
      "name": "URLを抽出",
      "type": "n8n-nodes-base.code",
      "position": [
        540,
        0
      ],
      "parameters": {
        "jsCode": "const input = $input.first().json.data\nconst regex = /https?:\\/\\/[^\\/\\s\"'>]+/g\nconst websites = input.match(regex)\nreturn websites.map(website => ({json:{website}}))"
      },
      "typeVersion": 2
    },
    {
      "id": "b10c0ed6-5a94-4272-b65c-bd19bd674fa0",
      "name": "Google Mapsをスクレイピング",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        340,
        0
      ],
      "parameters": {
        "url": "https://www.google.com/maps/search/calgary+dentists",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          },
          "allowUnauthorizedCerts": true
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "58a0d85d-f6eb-47d1-ba9c-3af69ddd30fb",
      "name": "サイトをスクレイピング",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        1520,
        100
      ],
      "parameters": {
        "url": "={{ $json.website }}",
        "options": {
          "redirect": {
            "redirect": {
              "followRedirects": false
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4618e775-d14d-4355-b3a2-cd6a6bbc70e8",
      "name": "空データを除外",
      "type": "n8n-nodes-base.filter",
      "position": [
        1700,
        -60
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a6786c58-424a-409a-b87f-8a7592cb7944",
              "operator": {
                "type": "array",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.emails }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "74513e7e-a7dc-4b19-b23e-01efd82c9d6d",
      "name": "Google URLを除外",
      "type": "n8n-nodes-base.filter",
      "position": [
        740,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "bf0a5053-9660-457c-9581-964793bb6d7d",
              "operator": {
                "type": "string",
                "operation": "notContains"
              },
              "leftValue": "={{ $json.website }}",
              "rightValue": "schema"
            },
            {
              "id": "9110b9e0-12aa-45cc-bde0-9eda8c10970e",
              "operator": {
                "type": "string",
                "operation": "notContains"
              },
              "leftValue": "={{ $json.website }}",
              "rightValue": "google"
            },
            {
              "id": "fb9b6ed6-96a5-4560-ab10-b8a4b9a61a2b",
              "operator": {
                "type": "string",
                "operation": "notContains"
              },
              "leftValue": "={{ $json.website }}",
              "rightValue": "gg"
            },
            {
              "id": "10500c0b-cdbd-4816-aba3-df60d69845dc",
              "operator": {
                "type": "string",
                "operation": "notContains"
              },
              "leftValue": "={{ $json.website }}",
              "rightValue": "gstatic"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "035fbbe8-7758-4c7b-be8e-c1cba8fc48bc",
      "name": "重複を削除 (2)",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        2080,
        -60
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "id": "aa3e9285-235d-4fda-ab0e-45134cf825dd",
      "name": "シートに追加(または任意の処理)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2280,
        -60
      ],
      "parameters": {
        "columns": {
          "value": {
            "emails": "={{ $json.emails }}"
          },
          "schema": [
            {
              "id": "emails",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "emails",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "emails"
          ]
        },
        "options": {
          "useAppend": true
        },
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fcijyZM1oU73i2xUbXYJ4j6RshmVEduOkCJji2SJP68/edit#gid=0",
          "cachedResultName": "emails"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1fcijyZM1oU73i2xUbXYJ4j6RshmVEduOkCJji2SJP68",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fcijyZM1oU73i2xUbXYJ4j6RshmVEduOkCJji2SJP68/edit?usp=drivesdk",
          "cachedResultName": "Scrape WITHOUT Paying for APIs"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "EOibXIc4U8wcXyRR",
          "name": "YouTube"
        }
      },
      "typeVersion": 4.5
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "9e487a0d-a606-4859-a6e2-b70372b61388",
  "connections": {
    "3c3a3870-034d-4147-936a-4b0f19b7727d": {
      "main": [
        [
          {
            "node": "7e9c227c-2321-429a-a3f3-4c3a77bc6cf3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a377879d-517d-4c90-a3d4-a7a0c190787e": {
      "main": [
        [
          {
            "node": "6cd049c8-425e-45e0-8d45-6a4883c2f496",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5f4ae91a-29c7-4fb3-b535-34bc5194b183": {
      "main": [
        [
          {
            "node": "4618e775-d14d-4355-b3a2-cd6a6bbc70e8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "645bf31c-4b3c-4f4c-b90b-610fc2d6007c": {
      "main": [
        [
          {
            "node": "035fbbe8-7758-4c7b-be8e-c1cba8fc48bc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "58a0d85d-f6eb-47d1-ba9c-3af69ddd30fb": {
      "main": [
        [
          {
            "node": "3c3a3870-034d-4147-936a-4b0f19b7727d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fb76c70c-385d-4e7f-93cd-43023690076a": {
      "main": [
        [
          {
            "node": "74513e7e-a7dc-4b19-b23e-01efd82c9d6d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7e9c227c-2321-429a-a3f3-4c3a77bc6cf3": {
      "main": [
        [
          {
            "node": "6cd049c8-425e-45e0-8d45-6a4883c2f496",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6cd049c8-425e-45e0-8d45-6a4883c2f496": {
      "main": [
        [
          {
            "node": "5f4ae91a-29c7-4fb3-b535-34bc5194b183",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "58a0d85d-f6eb-47d1-ba9c-3af69ddd30fb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "47d741e7-a53f-40c7-bf7c-09a446b0d229": {
      "main": [
        [
          {
            "node": "a377879d-517d-4c90-a3d4-a7a0c190787e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "74513e7e-a7dc-4b19-b23e-01efd82c9d6d": {
      "main": [
        [
          {
            "node": "47d741e7-a53f-40c7-bf7c-09a446b0d229",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4618e775-d14d-4355-b3a2-cd6a6bbc70e8": {
      "main": [
        [
          {
            "node": "645bf31c-4b3c-4f4c-b90b-610fc2d6007c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b10c0ed6-5a94-4272-b65c-bd19bd674fa0": {
      "main": [
        [
          {
            "node": "fb76c70c-385d-4e7f-93cd-43023690076a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "035fbbe8-7758-4c7b-be8e-c1cba8fc48bc": {
      "main": [
        [
          {
            "node": "aa3e9285-235d-4fda-ab0e-45134cf825dd",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4a6f9faa-5b11-41fe-88c9-cc8a262a2de2": {
      "main": [
        [
          {
            "node": "b10c0ed6-5a94-4272-b65c-bd19bd674fa0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

上級 - リード獲得

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

ワークフロー情報
難易度
上級
ノード数19
カテゴリー1
ノードタイプ11
難易度説明

上級者向け、16ノード以上の複雑なワークフロー

作成者
Nick Saraev

Nick Saraev

@nicksaraev

Hi 👋 I'm Nick. I make money with automation & teach others how they can too. If you have any questions about my templates or about my n8n builds, feel free to ask and I'll happily respond in the comments. Thanks for reading!

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34