This workflow corresponds to n8n.io template #7030 — we link there as the canonical source.
This workflow follows the Google Sheets → HTTP Request 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": "6e9e0196-34b7-42ef-9cea-0ee2f29126d9",
"name": "Manual Trigger",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-864,
464
],
"parameters": {},
"typeVersion": 1
},
{
"id": "f89efbed-6317-4875-9e70-829a9a4634ba",
"name": "Load Unprocessed Domains",
"type": "n8n-nodes-base.googleSheets",
"position": [
-640,
464
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupColumn": "processed"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2062802377,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bdK8xskt-qfLlDwdzolM0zFyo9KxZ-HHpTVxcEw3ZMY/edit#gid=2062802377",
"cachedResultName": "ZoomInfoData"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1bdK8xskt-qfLlDwdzolM0zFyo9KxZ-HHpTVxcEw3ZMY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bdK8xskt-qfLlDwdzolM0zFyo9KxZ-HHpTVxcEw3ZMY/edit?usp=drivesdk",
"cachedResultName": "Get Addresses"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "b38d94e0-1fc5-4f44-8a4d-e2c363f94c44",
"name": "Process Each Domain",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-416,
464
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "240a748e-f3d7-47cd-b97e-6d1a31c366c1",
"name": "Search ZoomInfo via Serper",
"type": "n8n-nodes-base.httpRequest",
"position": [
-192,
176
],
"parameters": {
"url": "https://google.serper.dev/search",
"method": "POST",
"options": {
"redirect": {
"redirect": {}
}
},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "q",
"value": "=where is \"{{ $json.domain }}\" Czech Republic headquarter? site:zoominfo.com"
}
]
},
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "538ae1c4-e301-4ad1-9be8-0ab40b371068",
"name": "Check Search Results Found",
"type": "n8n-nodes-base.if",
"position": [
32,
176
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f5f8619e-e07d-4cb7-9369-48a2882e4d35",
"operator": {
"type": "array",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.organic }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "2d392b3b-0886-49a9-a69e-d0b2f455c613",
"name": "Extract Domain and ZoomInfo URL",
"type": "n8n-nodes-base.code",
"position": [
256,
80
],
"parameters": {
"jsCode": "const text = $input.first().json.organic[0].snippet;\nconst regex = /(https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|https?:\\/\\/[a-zA-Z0-9]\\.[^\\s]{2,})(?<![\\\\.\\\\,])/g;\nconst matches = text.match(regex) || [];\n\nreturn matches.map(url => ({\n json: {\n url,\n link: $input.first().json.organic[0].link\n }\n})); "
},
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "dd4bb8af-1d6f-414f-badd-93d6a4dc7202",
"name": "Validate if Domain Matches",
"type": "n8n-nodes-base.if",
"position": [
480,
80
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "58571e85-2aa7-4383-953f-0135c985e27d",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.url }}",
"rightValue": "={{ $('Process Each Domain').item.json.domain }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "41618147-b735-4a30-83d8-2a8a5f813fc4",
"name": "Scrape ZoomInfo Page",
"type": "n8n-nodes-base.httpRequest",
"position": [
704,
80
],
"parameters": {
"url": "https://realtime.oxylabs.io/v1/queries",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "source",
"value": "universal"
},
{
"name": "url",
"value": "={{ $json.link }}"
}
]
},
"genericAuthType": "httpBasicAuth"
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "bd7c4539-0f42-4b66-adb8-efd64638866e",
"name": "Extract Company Data",
"type": "n8n-nodes-base.html",
"position": [
928,
80
],
"parameters": {
"options": {
"trimValues": true,
"cleanUpText": true
},
"operation": "extractHtmlContent",
"dataPropertyName": "results[0].content",
"extractionValues": {
"values": [
{
"key": "company_info",
"cssSelector": "#ng-state"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "94931e87-9169-48f8-805d-118167195043",
"name": "Parse JSON Company Info",
"type": "n8n-nodes-base.code",
"onError": "continueRegularOutput",
"position": [
1152,
80
],
"parameters": {
"jsCode": "\nreturn JSON.parse($input.first().json.company_info).pageData;"
},
"typeVersion": 2
},
{
"id": "c5c398e4-7476-4636-913c-8489f0612af3",
"name": "Save Company Details",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueRegularOutput",
"position": [
1600,
248
],
"parameters": {
"columns": {
"value": {
"city": "={{ $json.address.city }}",
"phone": "={{ $json.about.phone.replace(\"+\", \"'+\") }}",
"state": "={{ $json.address.state }}",
"domain": "={{ $('Process Each Domain').item.json.domain }}",
"address": "={{ $json.address.street }}",
"company": "={{ $json.fullName }}",
"country": "={{ $json.address.country }}",
"revenue": "={{ $json.about.revenue }}",
"industry": "={{ $json.about.industries.map(item => item.name) }}",
"postCode": "={{ $json.address.zip }}",
"employees": "={{ $json.numberOfEmployees }}",
"processed": "true",
"companyLinkedinUrl": "={{ $json.overview.socialNetworkUrls[0].socialNetworkUrl }}"
},
"schema": [
{
"id": "domain",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "domain",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "company",
"type": "string",
"display": true,
"required": false,
"displayName": "company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "address",
"type": "string",
"display": true,
"required": false,
"displayName": "address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "city",
"type": "string",
"display": true,
"required": false,
"displayName": "city",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "state",
"type": "string",
"display": true,
"required": false,
"displayName": "state",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "postCode",
"type": "string",
"display": true,
"required": false,
"displayName": "postCode",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "country",
"type": "string",
"display": true,
"required": false,
"displayName": "country",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "phone",
"type": "string",
"display": true,
"required": false,
"displayName": "phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "employees",
"type": "string",
"display": true,
"required": false,
"displayName": "employees",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "revenue",
"type": "string",
"display": true,
"required": false,
"displayName": "revenue",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "industry",
"type": "string",
"display": true,
"required": false,
"displayName": "industry",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyLinkedinUrl",
"type": "string",
"display": true,
"required": false,
"displayName": "companyLinkedinUrl",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "source_url",
"type": "string",
"display": true,
"required": false,
"displayName": "source_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "processed",
"type": "string",
"display": true,
"required": false,
"displayName": "processed",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"domain"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2062802377,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bdK8xskt-qfLlDwdzolM0zFyo9KxZ-HHpTVxcEw3ZMY/edit#gid=2062802377",
"cachedResultName": "ZoomInfoData"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1bdK8xskt-qfLlDwdzolM0zFyo9KxZ-HHpTVxcEw3ZMY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bdK8xskt-qfLlDwdzolM0zFyo9KxZ-HHpTVxcEw3ZMY/edit?usp=drivesdk",
"cachedResultName": "Get Addresses"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6,
"alwaysOutputData": true
},
{
"id": "4b6515e0-4b48-475a-a4e8-2bacbb4ea754",
"name": "Mark Domain as Processed",
"type": "n8n-nodes-base.googleSheets",
"position": [
480,
272
],
"parameters": {
"columns": {
"value": {
"domain": "={{ $('Process Each Domain').item.json.domain }}",
"processed": "true"
},
"schema": [
{
"id": "domain",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "domain",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "company",
"type": "string",
"display": true,
"required": false,
"displayName": "company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "address",
"type": "string",
"display": true,
"required": false,
"displayName": "address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "city",
"type": "string",
"display": true,
"required": false,
"displayName": "city",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "state",
"type": "string",
"display": true,
"required": false,
"displayName": "state",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "postCode",
"type": "string",
"display": true,
"required": false,
"displayName": "postCode",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "country",
"type": "string",
"display": true,
"required": false,
"displayName": "country",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "phone",
"type": "string",
"display": true,
"required": false,
"displayName": "phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "employees",
"type": "string",
"display": true,
"required": false,
"displayName": "employees",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "revenue",
"type": "string",
"display": true,
"required": false,
"displayName": "revenue",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "industry",
"type": "string",
"display": true,
"required": false,
"displayName": "industry",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyLinkedinUrl",
"type": "string",
"display": true,
"required": false,
"displayName": "companyLinkedinUrl",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "source_url",
"type": "string",
"display": true,
"required": false,
"displayName": "source_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "processed",
"type": "string",
"display": true,
"required": false,
"displayName": "processed",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"domain"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2062802377,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bdK8xskt-qfLlDwdzolM0zFyo9KxZ-HHpTVxcEw3ZMY/edit#gid=2062802377",
"cachedResultName": "ZoomInfoData"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1bdK8xskt-qfLlDwdzolM0zFyo9KxZ-HHpTVxcEw3ZMY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bdK8xskt-qfLlDwdzolM0zFyo9KxZ-HHpTVxcEw3ZMY/edit?usp=drivesdk",
"cachedResultName": "Get Addresses"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "2d0e61ec-65ee-4cee-b8c7-bc2b173f6987",
"name": "Rate Limit Delay",
"type": "n8n-nodes-base.wait",
"position": [
1376,
80
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "16d10906-533b-4c3a-981b-7cfec0c11814",
"name": "Processing Delay",
"type": "n8n-nodes-base.wait",
"position": [
256,
272
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "d78a08b4-ca6b-46cd-9e42-fc6ee38c7e7d",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
-640
],
"parameters": {
"width": 960,
"height": 320,
"content": "\ud83c\udfe2 ZOOMINFO COMPANY DATA SCRAPER\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\n\ud83c\udfaf Purpose: Automatically enriches company domains with detailed business information from ZoomInfo\n\n\ud83d\udcca Process Flow:\n1. Loads unprocessed domains from Google Sheet\n2. Searches ZoomInfo via Serper API \n3. Scrapes company data using Oxylabs\n4. Updates sheet with enriched information\n\n\u26a0\ufe0f Respects rate limits and processes domains sequentially"
},
"typeVersion": 1
},
{
"id": "90ca76bc-4281-46a1-a978-62fd84433df3",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1152,
-240
],
"parameters": {
"color": 5,
"width": 912,
"height": 880,
"content": "\ud83d\udd27 SETUP REQUIREMENTS\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\n\ud83d\udccb Google Sheet: Update spreadsheet ID\n\ud83d\udd0d Serper API: Search engine credentials\n\ud83d\udd77\ufe0f Oxylabs: Web scraping proxy service\n\n\ud83d\udcdd Sheet Structure Required:\n- domain column (input)\n- processed column (tracking)\n- Multiple output columns for company data\n\n\ud83d\udd10 All API credentials must be configured"
},
"typeVersion": 1
},
{
"id": "8dd2282f-ec88-42ca-9f12-d86202b9adc9",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
-240
],
"parameters": {
"color": 4,
"width": 864,
"height": 880,
"content": "\ud83d\udd0d SEARCH STRATEGY\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\n\ud83c\udfaf Query Format:\n\"where is {domain} Czech Republic headquarter? site:zoominfo.com\"\n[You can update the query as per your need]\n\n\u2705 Success Path: Found ZoomInfo results\n\u274c No Results: Mark as processed, skip to next\n\n\ud83d\udd04 Rate limiting prevents API abuse"
},
"typeVersion": 1
},
{
"id": "6e11fb54-7e54-433f-9cdb-9e94616eede1",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
656,
-240
],
"parameters": {
"color": 6,
"width": 624,
"height": 880,
"content": "\ud83d\udcca DATA EXTRACTION\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\n\ud83d\udd77\ufe0f Oxylabs: Bypasses anti-scraping protection \n\ud83d\udcc4 Target: #ng-state JSON data element\n\ud83d\udd27 Parsing: Extracts pageData from JSON\n\n\ud83d\udccb Extracted Fields:\n- Company name, address, phone\n- Revenue, employees, industry\n- LinkedIn URL and location details"
},
"typeVersion": 1
},
{
"id": "4a275527-b722-47ea-99df-dde7206d080a",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1296,
-240
],
"parameters": {
"color": 3,
"width": 736,
"height": 880,
"content": "\u26a0\ufe0f ERROR HANDLING\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\n\ud83d\udd04 Continue on Error: Workflow won't stop\n\u2705 Always Mark Processed: Prevents infinite loops\n\u23f1\ufe0f Rate Limiting: Prevents API blocking\n\n\ud83d\udea8 If scraping fails:\n- Domain still marked as processed\n- Move to next domain automatically"
},
"typeVersion": 1
}
],
"connections": {
"Manual Trigger": {
"main": [
[
{
"node": "Load Unprocessed Domains",
"type": "main",
"index": 0
}
]
]
},
"Processing Delay": {
"main": [
[
{
"node": "Mark Domain as Processed",
"type": "main",
"index": 0
}
]
]
},
"Rate Limit Delay": {
"main": [
[
{
"node": "Save Company Details",
"type": "main",
"index": 0
}
]
]
},
"Process Each Domain": {
"main": [
[],
[
{
"node": "Search ZoomInfo via Serper",
"type": "main",
"index": 0
}
]
]
},
"Extract Company Data": {
"main": [
[
{
"node": "Parse JSON Company Info",
"type": "main",
"index": 0
}
]
]
},
"Save Company Details": {
"main": [
[
{
"node": "Process Each Domain",
"type": "main",
"index": 0
}
]
]
},
"Scrape ZoomInfo Page": {
"main": [
[
{
"node": "Extract Company Data",
"type": "main",
"index": 0
}
]
]
},
"Parse JSON Company Info": {
"main": [
[
{
"node": "Rate Limit Delay",
"type": "main",
"index": 0
}
]
]
},
"Load Unprocessed Domains": {
"main": [
[
{
"node": "Process Each Domain",
"type": "main",
"index": 0
}
]
]
},
"Mark Domain as Processed": {
"main": [
[
{
"node": "Process Each Domain",
"type": "main",
"index": 0
}
]
]
},
"Check Search Results Found": {
"main": [
[
{
"node": "Extract Domain and ZoomInfo URL",
"type": "main",
"index": 0
}
],
[
{
"node": "Processing Delay",
"type": "main",
"index": 0
}
]
]
},
"Search ZoomInfo via Serper": {
"main": [
[
{
"node": "Check Search Results Found",
"type": "main",
"index": 0
}
]
]
},
"Validate if Domain Matches": {
"main": [
[
{
"node": "Scrape ZoomInfo Page",
"type": "main",
"index": 0
}
],
[
{
"node": "Process Each Domain",
"type": "main",
"index": 0
}
]
]
},
"Extract Domain and ZoomInfo URL": {
"main": [
[
{
"node": "Validate if Domain Matches",
"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.
googleSheetsOAuth2ApihttpBasicAuthhttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automatically enriches company domain lists with comprehensive business information scraped from ZoomInfo, organizing the data in Google Sheets for sales teams and researchers. Sales teams building prospect databases with accurate company information Marketing…
Source: https://n8n.io/workflows/7030/ — 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 template is ideal for solo store owners, eCommerce marketers, automation beginners, or anyone using Shopify and Gmail who wants to recover lost revenue without coding.
PCN. Uses googleSheets, httpRequest, @n-octo-n/n8n-nodes-json-database, itemLists. Event-driven trigger; 60 nodes.
The workflow automates the process of gathering extensive keyword data for a "Main Keyword." It starts by reading initial parameters from a Google Sheets template, creates a new dedicated Google Sheet
🔥 March Sale – n8n Community Members Get ideoGener8r for Just $27! (Reg. $47) Use Coupon Code: (Valid until 3/31/2025 for n8n community members)
📄 Documentation: Notion Guide