AutomationFlowsData & Sheets › Enrich CRM Contacts in Google Sheets with Tomba Firmographic Data

Enrich CRM Contacts in Google Sheets with Tomba Firmographic Data

ByZain Khan @zain on n8n.io

This workflow watches a Google Sheets contacts list for new rows and enriches each contact using Tomba to find a likely email address, company firmographics, and a phone number, then writes the enriched fields back to the same spreadsheet. Triggers when a new row is added to a…

Event trigger★★★★☆ complexity11 nodesGoogle Sheets TriggerN8N Nodes TombaGoogle Sheets
Data & Sheets Trigger: Event Nodes: 11 Complexity: ★★★★☆ Added:

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

This workflow follows the Google Sheets → Googlesheetstrigger 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": "wZE9MfalhRk9sKDW",
  "name": "Tomba - CRM Contact Enrichment",
  "tags": [],
  "nodes": [
    {
      "id": "26b9eb2f-3940-4c6b-846d-6098861e9cac",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1056,
        -176
      ],
      "parameters": {
        "width": 480,
        "height": 752,
        "content": "## Tomba - CRM Contact Enrichment\n\n### How it works\n\nThis workflow enriches CRM contacts added to a Google Sheet using Tomba. When a new row is detected, it processes contacts one at a time, finds email, company, and phone details, formats the enriched record, and writes it back to the sheet before continuing the loop.\n\n### Setup steps\n\n- Connect Google Sheets credentials for both the trigger and update nodes.\n- Configure the source spreadsheet and sheet/range that contains newly added CRM contacts.\n- Connect Tomba API credentials and verify the email, company enrichment, and phone lookup nodes use the correct input fields from the sheet.\n- Confirm the final Google Sheets node writes to the intended columns for enriched contact data.\n\n### Customization\n\nAdjust the batch size in the loop node, change which Tomba enrichment steps are used, or modify the code node to map and format additional CRM fields."
      },
      "typeVersion": 1
    },
    {
      "id": "2132c33f-dfce-4c6b-8b1e-fb76ab86069d",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 320,
        "content": "## Detect new contacts\n\nStarts the workflow when a new contact row is added in Google Sheets and feeds each contact into the batch loop for processing."
      },
      "typeVersion": 1
    },
    {
      "id": "aa511dbf-9168-4234-aa40-52a1700bb674",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 304,
        "content": "## Enrich contact details\n\nUses Tomba in a central processing chain to find the contact email, enrich company information, and look up a phone number."
      },
      "typeVersion": 1
    },
    {
      "id": "4529a077-e994-442c-96b2-1914668f6f09",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        624,
        -176
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Format and update sheet\n\nFormats the enriched contact data with custom code, writes the results back to Google Sheets, and loops back to process the next contact batch."
      },
      "typeVersion": 1
    },
    {
      "id": "a6511efe-affa-4d92-ba5b-8710618207a7",
      "name": "When Contact Added to Sheets",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        -448,
        80
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1jbFOvcle029-eb8klxSoi8fuSIEINqX3qnA1Q0gK3eY/edit#gid=0",
          "cachedResultName": "contacts"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1jbFOvcle029-eb8klxSoi8fuSIEINqX3qnA1Q0gK3eY",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1jbFOvcle029-eb8klxSoi8fuSIEINqX3qnA1Q0gK3eY/edit?usp=drivesdk",
          "cachedResultName": "Tomba - CRM Contact Enrichment"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "43a3cb48-9532-4efc-8f65-dc2e847639cb",
      "name": "Loop Over Contacts Batch",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -224,
        80
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "5fa8e366-6d03-4f9b-99f7-64802043edc6",
      "name": "Retrieve Email via Tomba",
      "type": "n8n-nodes-tomba.tomba",
      "position": [
        0,
        0
      ],
      "parameters": {
        "domain": "={{ $json.Domain }}",
        "company": "={{ $json.Company }}",
        "lastname": "={{ $json['Last Name'] }}",
        "resource": "email",
        "firstname": "={{ $json['First Name'] }}",
        "enrichMobile": true
      },
      "credentials": {},
      "typeVersion": 1
    },
    {
      "id": "18fccc45-0bb7-4f18-9ef8-c512325330dd",
      "name": "Enrich Data via Tomba",
      "type": "n8n-nodes-tomba.tomba",
      "position": [
        224,
        0
      ],
      "parameters": {
        "resource": "company",
        "companyFilters": {
          "company": {
            "val": {
              "include": "={{ $json.company }}"
            }
          }
        }
      },
      "credentials": {},
      "typeVersion": 1
    },
    {
      "id": "2328c326-cda2-4365-9bfd-a6838bb48614",
      "name": "Compile Enriched Contact",
      "type": "n8n-nodes-base.code",
      "position": [
        672,
        0
      ],
      "parameters": {
        "jsCode": "const emailData = $node[\"Find Email Address\"].json;\nconst companyData = $node[\"Enrich Company Data\"].json;\nconst phoneData = $node[\"Find Phone Number\"].json;\n\n// Get first company match\nconst company = companyData.data?.companies?.[0] || {};\n\n// Get phone number\nconst phone = phoneData.intl_format || \"Not Found\";\n\nreturn [{\n  json: {\n    // Contact info\n    email: emailData.email || \"Not Found\",\n    phone: phone,\n    first_name: emailData.first_name || \"\",\n    last_name: emailData.last_name || \"\",\n    full_name: emailData.full_name || \"\",\n    score: emailData.score || 0,\n    verification_status: emailData.verification?.status || \"unknown\",\n\n    // Company info\n    company_name: company.name || \"\",\n    industry: company.industry || \"Not Found\",\n    company_size: company.company_size || \"Not Found\",\n    revenue: company.revenue || \"Not Found\",\n    country: company.country || emailData.country || \"Not Found\",\n    city: company.city || \"\",\n    founded: company.founded || \"\",\n\n    // Status\n    status: emailData.email ? \"Enriched\" : \"Not Found\"\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "66558ead-3674-4d66-a97b-707ff5e3d28a",
      "name": "Update Enriched Contact in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        896,
        80
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $json.email }}",
            "Phone": "={{ $json.phone }}",
            "Domain": "={{ $('Loop Over Contacts Batch').item.json.Domain }}",
            "Status": "={{ $json.status }}",
            "Country": "={{ $json.country }}",
            "Revenue": "={{ $json.revenue }}",
            "Industry": "={{ $json.industry }}",
            "Company Size": "={{ $json.company_size }}"
          },
          "schema": [
            {
              "id": "First Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "First Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Last Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Domain",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Domain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Industry",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Industry",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Size",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company Size",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Revenue",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Revenue",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Country",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Country",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "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": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1jbFOvcle029-eb8klxSoi8fuSIEINqX3qnA1Q0gK3eY/edit#gid=0",
          "cachedResultName": "contacts"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1jbFOvcle029-eb8klxSoi8fuSIEINqX3qnA1Q0gK3eY",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1jbFOvcle029-eb8klxSoi8fuSIEINqX3qnA1Q0gK3eY/edit?usp=drivesdk",
          "cachedResultName": "Tomba - CRM Contact Enrichment"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "c44d73c7-ebf5-429d-919f-bd73e6b8a2c1",
      "name": "Retrieve Phone via Tomba",
      "type": "n8n-nodes-tomba.tomba",
      "position": [
        448,
        0
      ],
      "parameters": {
        "full": true,
        "domain": "={{ $node[\"Loop Over Contacts\"].json[\"Domain\"] }}",
        "resource": "phone",
        "phoneSearchType": "domain"
      },
      "credentials": {},
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "38640cd0-40ed-4858-8a28-7519cd51e49a",
  "nodeGroups": [],
  "connections": {
    "Enrich Data via Tomba": {
      "main": [
        [
          {
            "node": "Retrieve Phone via Tomba",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compile Enriched Contact": {
      "main": [
        [
          {
            "node": "Update Enriched Contact in Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Contacts Batch": {
      "main": [
        [],
        [
          {
            "node": "Retrieve Email via Tomba",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Email via Tomba": {
      "main": [
        [
          {
            "node": "Enrich Data via Tomba",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Phone via Tomba": {
      "main": [
        [
          {
            "node": "Compile Enriched Contact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When Contact Added to Sheets": {
      "main": [
        [
          {
            "node": "Loop Over Contacts Batch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Enriched Contact in Sheets": {
      "main": [
        [
          {
            "node": "Loop Over Contacts Batch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

This workflow watches a Google Sheets contacts list for new rows and enriches each contact using Tomba to find a likely email address, company firmographics, and a phone number, then writes the enriched fields back to the same spreadsheet. Triggers when a new row is added to a…

Source: https://n8n.io/workflows/16637/ — 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

Stickynote Workflow. Uses googleTranslate, googleSheetsTrigger, googleDrive, httpRequest. Event-driven trigger; 22 nodes.

Google Translate, Google Sheets Trigger, Google Drive +2
Data & Sheets

Automate IT asset allocation for new hires with an intelligent, AI-powered workflow 🤖. This automation reads employee data from Google Sheets, determines role-based requirements, and intelligently ass

Google Sheets Trigger, Airtable, HTTP Request +2
Data & Sheets

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Google Sheets Trigger, N8N Nodes Sinergiacrm, Google Sheets
Data & Sheets

This powerful no-code workflow automates plagiarism detection using Plagiarism Checker AI Powered. Users submit text through Google Sheets. The system checks for duplication using the API, sends a det

Google Sheets Trigger, HTTP Request, Email Send +1
Data & Sheets

This n8n workflow automates outbound phone calls to new leads using VAPI, with built-in timezone detection to ensure you're only calling during business hours.

HTTP Request, Google Sheets Trigger, Google Sheets