How to Extract Emails from Google Maps Using FREE Automation Tool n8n (No Code Needed!)

Looking for a way to collect business leads and emails automatically from Google Maps? Whether you’re a freelancer, marketer, or part of a sales team β€” this free automation using n8n will help you generate quality leads without writing a single line of code.

πŸš€ What You’ll Learn

  • How to use a keyword and location to scrape business listings from Google Maps
  • How to automatically extract emails and websites
  • How to save leads into Google Sheets or Airtable
  • All using a free, open-source automation platform – n8n

πŸ”§ Tools Used

  • n8n (Free & open-source automation tool)
  • Google Sheets or Airtable to store leads

πŸ“¦ Use Case

Let’s say you enter a keyword like "Gym in Pune". This workflow will:

  1. Search Google Maps for businesses matching that keyword
  2. Extract name, phone, website, and email (if available)
  3. Automatically save the data into a Google Sheet or Airtable

Flow

🎯 Perfect For:

  • Freelancers looking for clients
  • Digital marketing agencies
  • Sales teams & outreach
  • Cold emailing campaigns

πŸ“₯ Download the Workflow (JSON)

You can import this JSON directly into your n8n instance:

{
  "name": "Email Scrap Working Clean",
  "nodes": [
    {
      "parameters": {},
      "id": "32eda36f-5bef-40c0-aaac-085760ec3712",
      "name": "Remove Duplicate URLs",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        1560,
        860
      ],
      "typeVersion": 1.1
    },
    {
      "parameters": {
        "url": "=https://www.google.com/maps/search/{{ $json.keyword }} in {{ $json.location }}",
        "options": {
          "allowUnauthorizedCerts": false
        }
      },
      "id": "ed1a6a61-d6d4-40df-a1ba-15d7a8ccf5f2",
      "name": "Search Google Maps with query",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        900,
        860
      ],
      "executeOnce": false,
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "parameters": {
        "jsCode": "const data = $input.first().json.data\n\nconst regex = /https?:\\/\\/[^\\/]+/g\n\nconst urls = data.match(regex)\n\nreturn urls.map(url => ({json: {url: url}}))"
      },
      "id": "5cae100f-5ad6-4ab7-901d-af646fb57ade",
      "name": "Scrape URLs from results",
      "type": "n8n-nodes-base.code",
      "position": [
        1120,
        860
      ],
      "typeVersion": 2
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "041797f2-2fe2-41dc-902a-d34050b9b304",
              "operator": {
                "type": "string",
                "operation": "notRegex"
              },
              "leftValue": "={{ $json.url }}",
              "rightValue": "=(google|gstatic|ggpht|schema\\.org|example\\.com|sentry-next\\.wixpress\\.com|imli\\.com|sentry\\.wixpress\\.com|ingest\\.sentry\\.io)"
            },
            {
              "id": "eb499a7e-17bc-453c-be08-a47286f726dd",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "",
              "rightValue": ""
            }
          ]
        },
        "options": {}
      },
      "id": "6ecc7dba-5914-4d83-8d81-79fbe5433940",
      "name": "Filter irrelevant URLs",
      "type": "n8n-nodes-base.filter",
      "position": [
        1340,
        680
      ],
      "typeVersion": 2.2
    },
    {
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {}
      },
      "id": "b5dc599e-e1aa-4d6e-b775-33249f2ed353",
      "name": "Request web page for URL",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2040,
        840
      ],
      "typeVersion": 4.2,
      "alwaysOutputData": false,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "id": "e36ec79e-a1d4-413d-a369-d2ad226abbeb",
      "name": "Loop over URLs",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1800,
        860
      ],
      "typeVersion": 3,
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "f2d1db41-a1ce-4065-91bc-ce53b7a11707",
      "name": "Loop over pages",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1980,
        580
      ],
      "typeVersion": 3,
      "alwaysOutputData": false,
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const data = $json.data\n\nconst emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.(?!png|jpg|gif|jpeg)[a-zA-Z]{2,}/g\n\nconst emails = data.match(emailRegex)\n\nreturn {json: {emails: emails}}"
      },
      "id": "2fc45bd1-8031-4b7c-b7d6-762955e36a9e",
      "name": "Scrape emails from page",
      "type": "n8n-nodes-base.code",
      "position": [
        2220,
        800
      ],
      "typeVersion": 2,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "emails"
            }
          ]
        },
        "options": {
          "mergeLists": true
        }
      },
      "id": "80e7257c-a2db-4f48-ba70-4c0224c8ccd3",
      "name": "Aggregate arrays of emails",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        2220,
        600
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "fieldToSplitOut": "emails",
        "options": {}
      },
      "id": "656b29fc-cb42-4698-b604-40de4e2b713f",
      "name": "Split out into default data structure",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        2440,
        600
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "compare": "selectedFields",
        "fieldsToCompare": "emails",
        "options": {}
      },
      "id": "b5d8f439-d688-4ca1-b56f-38907db06bb6",
      "name": "Remove duplicate emails",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        2660,
        600
      ],
      "typeVersion": 1.1
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "041797f2-2fe2-41dc-902a-d34050b9b304",
              "operator": {
                "type": "string",
                "operation": "notRegex"
              },
              "leftValue": "={{ $json.emails }}",
              "rightValue": "=(google|gstatic|ggpht|schema\\.org|example\\.com|sentry\\.wixpress\\.com|sentry-next\\.wixpress\\.com|ingest\\.sentry\\.io|sentry\\.io|imli\\.com)"
            }
          ]
        },
        "options": {}
      },
      "id": "4cccc5a4-d060-499f-a318-0cb228665ecb",
      "name": "Filter irrelevant emails",
      "type": "n8n-nodes-base.filter",
      "position": [
        2880,
        600
      ],
      "typeVersion": 2.2
    },
    {
      "parameters": {
        "operation": "create",
        "base": {
          "__rl": true,
          "value": "appaaPariNBw",
          "mode": "list",
          "cachedResultName": "Test Base",
          "cachedResultUrl": "https://airtable.com/"
        },
        "table": {
          "__rl": true,
          "value": "tbl1oaq6",
          "mode": "list",
          "cachedResultName": "email_record",
          "cachedResultUrl": "https://airtable.com/NSa"
        },
        "columns": {
          "mappingMode": "autoMapInputData",
          "value": {},
          "matchingColumns": [],
          "schema": [
            {
              "id": "Name",
              "displayName": "Name",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "string",
              "readOnly": false,
              "removed": false
            },
            {
              "id": "emails",
              "displayName": "emails",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "string",
              "readOnly": false,
              "removed": false
            },
            {
              "id": "Assignee",
              "displayName": "Assignee",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "string",
              "readOnly": false,
              "removed": false
            },
            {
              "id": "Status",
              "displayName": "Status",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "options",
              "options": [
                {
                  "name": "Todo",
                  "value": "Todo"
                },
                {
                  "name": "In progress",
                  "value": "In progress"
                },
                {
                  "name": "Done",
                  "value": "Done"
                }
              ],
              "readOnly": false,
              "removed": false
            },
            {
              "id": "Attachments",
              "displayName": "Attachments",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "array",
              "readOnly": false,
              "removed": false
            },
            {
              "id": "Attachment Summary",
              "displayName": "Attachment Summary",
              "required": false,
              "defaultMatch": false,
              "canBeUsedToMatch": true,
              "display": true,
              "type": "string",
              "readOnly": false,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2.1,
      "position": [
        3080,
        600
      ],
      "id": "8d3118ed-8959-489c-9ca2-aebdc930a076",
      "name": "Create a record",
      "credentials": {
        "airtableTokenApi": {
          "id": "Q1K",
          "name": "Airtable Personal Access Token account"
        }
      }
    },
    {
      "parameters": {
        "formTitle": "Data",
        "formFields": {
          "values": [
            {
              "fieldLabel": "keyword"
            },
            {
              "fieldLabel": "location"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.2,
      "position": [
        720,
        860
      ],
      "id": "50b5d026-5ac0-434d-a73d-37d482c88560",
      "name": "On form submission",
      "webhookId": "2bd808b6-84ad-46f0-93a8-f7b062d0ef70"
    }
  ],
  "pinData": {},
  "connections": {
    "Loop over URLs": {
      "main": [
        [
          {
            "node": "Loop over pages",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Request web page for URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop over pages": {
      "main": [
        [
          {
            "node": "Aggregate arrays of emails",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Scrape emails from page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicate URLs": {
      "main": [
        [
          {
            "node": "Loop over URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter irrelevant URLs": {
      "main": [
        [
          {
            "node": "Remove Duplicate URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove duplicate emails": {
      "main": [
        [
          {
            "node": "Filter irrelevant emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape emails from page": {
      "main": [
        [
          {
            "node": "Loop over pages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter irrelevant emails": {
      "main": [
        [
          {
            "node": "Create a record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Request web page for URL": {
      "main": [
        [
          {
            "node": "Loop over URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape URLs from results": {
      "main": [
        [
          {
            "node": "Filter irrelevant URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate arrays of emails": {
      "main": [
        [
          {
            "node": "Split out into default data structure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search Google Maps with query": {
      "main": [
        [
          {
            "node": "Scrape URLs from results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split out into default data structure": {
      "main": [
        [
          {
            "node": "Remove duplicate emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Search Google Maps with query",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "dad5d505-1c22-431b-b234-e87d6723a480",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "724c09068b73e62790a410ce1296c78229e4fc22b10e27783b93d0f006a9928e"
  },
  "id": "uO4qSQmgzZ89hWQM",
  "tags": []
}

Don’t know how to import JSON into n8n? Just go to your n8n dashboard β†’ click on the top-right menu β†’ Import from File β†’ paste the above JSON. Done!

🎁 Bonus

Want to go one step ahead? You can also integrate this with OpenAI to clean email data or write personalized cold emails – automatically!

πŸ“Ί Watch the Video Tutorial

Check out my full step-by-step video on YouTube here: [Watch Now]

πŸ“Œ Final Thoughts

n8n is a powerful free tool that can save hours of manual work and boost your productivity. This Google Maps + Email automation can be a game-changer for anyone in sales, outreach, or freelancing. Try it out and let me know what leads you found!


Need help setting it up? Drop a comment or contact me

πŸ‘‰ Don’t forget to share this post with someone who needs automation in their life!

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top