This workflow corresponds to n8n.io template #9857 — we link there as the canonical source.
This workflow follows the Form Trigger → Google Sheets 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "9e017f9b-517c-4e4d-b887-26bd694d1f4b",
"name": "Get Location Coordinates",
"type": "n8n-nodes-base.httpRequest",
"position": [
1248,
144
],
"parameters": {
"url": "https://maps.googleapis.com/maps/api/geocode/json",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "address",
"value": "={{ $json.location }}"
},
{
"name": "key",
"value": "={{ $json.googleApiKey }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "0dce7f8f-7df8-4a84-94e4-a45443c2d93e",
"name": "Search Google Places",
"type": "n8n-nodes-base.httpRequest",
"position": [
1696,
144
],
"parameters": {
"url": "https://places.googleapis.com/v1/places:searchText",
"method": "POST",
"options": {},
"jsonBody": "={\n \"textQuery\": \"{{ $json.businessType }}\",\n \"locationBias\": {\n \"circle\": {\n \"center\": {\n \"latitude\": {{ $json.latitude }},\n \"longitude\": {{ $json.longitude }}\n },\n \"radius\": 10000\n }\n },\n \"maxResultCount\": {{ $json.maxResults }}\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "X-Goog-Api-Key",
"value": "={{ $json.googleApiKey }}"
},
{
"name": "X-Goog-FieldMask",
"value": "places.displayName,places.formattedAddress,places.nationalPhoneNumber,places.internationalPhoneNumber,places.websiteUri,places.googleMapsUri,places.rating,places.userRatingCount,places.businessStatus,places.types,places.id"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "c0002a96-8e2c-4b07-bf5a-4c0d8c6f3b5a",
"name": "Split Results",
"type": "n8n-nodes-base.splitOut",
"position": [
1920,
144
],
"parameters": {
"options": {},
"fieldToSplitOut": "places"
},
"typeVersion": 1
},
{
"id": "576b96c6-82cd-4bc3-8553-4360c5083f42",
"name": "Format Lead Data",
"type": "n8n-nodes-base.set",
"position": [
2368,
144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "name_assignment",
"name": "businessName",
"type": "string",
"value": "={{ $json.displayName?.text || 'N/A' }}"
},
{
"id": "address_assignment",
"name": "address",
"type": "string",
"value": "={{ $json.formattedAddress || 'N/A' }}"
},
{
"id": "phone_assignment",
"name": "phone",
"type": "string",
"value": "={{ $json.nationalPhoneNumber || $json.internationalPhoneNumber || 'N/A' }}"
},
{
"id": "website_assignment",
"name": "website",
"type": "string",
"value": "={{ $json.websiteUri || 'N/A' }}"
},
{
"id": "gmaps_assignment",
"name": "googleMapsUrl",
"type": "string",
"value": "={{ $json.googleMapsUri || 'N/A' }}"
},
{
"id": "rating_assignment",
"name": "rating",
"type": "string",
"value": "={{ $json.rating || 'N/A' }}"
},
{
"id": "reviews_assignment",
"name": "totalReviews",
"type": "number",
"value": "={{ $json.userRatingCount || 0 }}"
},
{
"id": "status_assignment",
"name": "businessStatus",
"type": "string",
"value": "={{ $json.businessStatus || 'UNKNOWN' }}"
},
{
"id": "types_assignment",
"name": "businessTypes",
"type": "string",
"value": "={{ $json.types?.join(', ') || 'N/A' }}"
},
{
"id": "place_assignment",
"name": "placeId",
"type": "string",
"value": "={{ $json.id || 'N/A' }}"
},
{
"id": "search_assignment",
"name": "searchQuery",
"type": "string",
"value": "={{ $('Prepare Search Data Set').item.json.businessType }}"
},
{
"id": "search_location_assignment",
"name": "searchLocation",
"type": "string",
"value": "={{ $('Prepare Search Data Set').item.json.locationName }}"
},
{
"id": "timestamp_assignment",
"name": "scrapedAt",
"type": "string",
"value": "={{ $now.toISO() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a3cc811c-b586-4adf-8e15-840c0bbc913c",
"name": "Extraction Configs",
"type": "n8n-nodes-base.formTrigger",
"position": [
800,
144
],
"parameters": {
"options": {},
"formTitle": "Generate Leads",
"formFields": {
"values": [
{
"fieldLabel": "What is the Search Term?",
"requiredField": true
},
{
"fieldLabel": "What is your Location?",
"requiredField": true
},
{
"fieldType": "number",
"fieldLabel": "Max Results?",
"requiredField": true
},
{
"fieldLabel": "Google Maps API Key"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "2cd4749f-118e-41ae-899f-19ccde3b2dfe",
"name": "Main Set",
"type": "n8n-nodes-base.set",
"position": [
1024,
144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "0ce4b0e7-3ce5-4b38-bc49-9fd58be31e3b",
"name": "location",
"type": "string",
"value": "={{ $json['What is your Location?'] }}"
},
{
"id": "83741282-8c5d-46fa-9f3b-7065bf2bb4eb",
"name": "googleApiKey",
"type": "string",
"value": "={{ $json['Google Maps API Key'] }}"
},
{
"id": "be691e08-0b6b-43d8-8ec8-a50481618c94",
"name": "maxResults",
"type": "string",
"value": "={{ $json['Max Results?'] }}"
},
{
"id": "6f4b30a2-e0fb-40d5-a00b-6bf4c80494e3",
"name": "businessType",
"type": "string",
"value": "={{ $json['What is the Search Term?'] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "44c4721a-4609-4ea2-8aa1-73ee4286cd8d",
"name": "Prepare Search Data Set",
"type": "n8n-nodes-base.set",
"position": [
1472,
144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "lat_assignment",
"name": "latitude",
"type": "number",
"value": "={{ $json.results[0].geometry.location.lat }}"
},
{
"id": "lng_assignment",
"name": "longitude",
"type": "number",
"value": "={{ $json.results[0].geometry.location.lng }}"
},
{
"id": "business_assignment",
"name": "businessType",
"type": "string",
"value": "={{ $('Main Set').item.json.businessType }}"
},
{
"id": "api_assignment",
"name": "googleApiKey",
"type": "string",
"value": "={{ $('Main Set').item.json.googleApiKey }}"
},
{
"id": "max_assignment",
"name": "maxResults",
"type": "string",
"value": "={{ $('Main Set').item.json.maxResults }}"
},
{
"id": "location_assignment",
"name": "locationName",
"type": "string",
"value": "={{ $('Main Set').item.json.location }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "e0b810cf-2146-47dd-8800-c9a7f866e7fc",
"name": "If Lead is Valid",
"type": "n8n-nodes-base.if",
"position": [
2144,
144
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "3f7e701a-3b1e-4f4a-b47f-63e832d8b01a",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.nationalPhoneNumber }}",
"rightValue": ""
},
{
"id": "2cebb6b9-d612-46da-b541-bb58a00a15b4",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.websiteUri }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "82447bb9-f0a8-45fa-bba5-96c93a7ffcbd",
"name": "Append row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
2592,
144
],
"parameters": {
"columns": {
"value": {
"Phone": "={{ $json.phone }}",
"Rating": "={{ $json.rating }}",
"Address": "={{ $json.address }}",
"Website": "={{ $json.website }}",
"Place ID": "={{ $json.placeId }}",
"Scraped At": "={{ $json.scrapedAt }}",
"Search Query": "={{ $json.searchQuery }}",
"Business Name": "={{ $json.businessName }}",
"Total Reviews": "={{ $json.totalReviews }}",
"Business Types": "={{ $json.businessTypes }}",
"Business Status": "={{ $json.businessStatus }}",
"Google Maps URL": "={{ $json.googleMapsUrl }}",
"Search location": "={{ $json.searchLocation }}"
},
"schema": [
{
"id": "Business Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Business Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Address",
"type": "string",
"display": true,
"required": false,
"displayName": "Address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Google Maps URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Google Maps URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Rating",
"type": "string",
"display": true,
"required": false,
"displayName": "Rating",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Reviews",
"type": "string",
"display": true,
"required": false,
"displayName": "Total Reviews",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Business Types",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Business Types",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Business Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Business Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Place ID",
"type": "string",
"display": true,
"required": false,
"displayName": "Place ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Search Query",
"type": "string",
"display": true,
"required": false,
"displayName": "Search Query",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Search location",
"type": "string",
"display": true,
"required": false,
"displayName": "Search location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Scraped At",
"type": "string",
"display": true,
"required": false,
"displayName": "Scraped At",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1701dkUJszfL2ey5tC55NBMmN4CRHy2cmBC4gZqkk8eU/edit#gid=0",
"cachedResultName": "Leads"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1701dkUJszfL2ey5tC55NBMmN4CRHy2cmBC4gZqkk8eU",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1701dkUJszfL2ey5tC55NBMmN4CRHy2cmBC4gZqkk8eU/edit?usp=drivesdk",
"cachedResultName": "Leads Generation"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "a8c39d79-4fc0-49ec-b0e3-51ea9a48f9a6",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
784,
-112
],
"parameters": {
"width": 624,
"height": 176,
"content": "## Generate Leads from Google Maps\nOfficial way to generate leads using Google Maps, using the Google Maps API Key.\n\nGenerate Niche-Specific Leads by filling up the business type, location you're targeting, max number of leads, and your google maps API key as the form input."
},
"typeVersion": 1
},
{
"id": "b2ae012e-786d-4bfc-9ad8-755af1680c16",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1616,
-112
],
"parameters": {
"color": 5,
"width": 448,
"height": 176,
"content": "## User Input & Search\nFill out the form with your search term (business type), location, and Google Maps API key. The workflow converts your location to coordinates and then finds businesses matching your criteria within the specified area."
},
"typeVersion": 1
},
{
"id": "15adb718-89ba-4b67-8075-ad51fcd47da2",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2256,
-112
],
"parameters": {
"color": 4,
"width": 448,
"height": 176,
"content": "## Leads Validation & Storage\nThe workflow checks each found business for valid contact info, organizes details, and automatically adds each valid lead to the Google Sheet."
},
"typeVersion": 1
}
],
"connections": {
"Main Set": {
"main": [
[
{
"node": "Get Location Coordinates",
"type": "main",
"index": 0
}
]
]
},
"Split Results": {
"main": [
[
{
"node": "If Lead is Valid",
"type": "main",
"index": 0
}
]
]
},
"Format Lead Data": {
"main": [
[
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"If Lead is Valid": {
"main": [
[
{
"node": "Format Lead Data",
"type": "main",
"index": 0
}
]
]
},
"Extraction Configs": {
"main": [
[
{
"node": "Main Set",
"type": "main",
"index": 0
}
]
]
},
"Search Google Places": {
"main": [
[
{
"node": "Split Results",
"type": "main",
"index": 0
}
]
]
},
"Prepare Search Data Set": {
"main": [
[
{
"node": "Search Google Places",
"type": "main",
"index": 0
}
]
]
},
"Get Location Coordinates": {
"main": [
[
{
"node": "Prepare Search Data Set",
"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.
googleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates the process of generating niche-specific business leads from Google Maps, leveraging the Google Places API and Google Sheets for seamless data collection and storage. Business owners, marketers, sales teams, or anyone needing to build targeted lead lists…
Source: https://n8n.io/workflows/9857/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This repository contains an SLA-based lead routing workflow built in n8n, designed to ensure fast lead response, fair sales distribution, and controlled escalation without relying on a full CRM system
How it works A form trigger accepts an Industry + Location query (e.g. Accountants London). Text Search Page 1 calls Google Places Text Search to return results and a nextpagetoken. Conditional checks
Agencies, sales teams, and service businesses who want to instantly qualify inbound leads with an AI-powered phone call — no manual follow-up needed.
This n8n template automates lead generation by scraping Google Maps using the Olostep API. It extracts business names, locations, websites, phone numbers, and decision-maker names (CEO, Founder, etc.)
This workflow is a powerful B2B Lead Generation engine designed specifically for SDRs (Sales Development Representatives). It automates the entire process of finding, enriching, and qualifying prospec