{"workflow":{"id":13345,"name":"Bulk enrich CSV contact lists with Lusha","views":66,"recentViews":0,"totalViews":66,"createdAt":"2026-02-12T16:18:03.879Z","description":"## How it works\n1. Reads a CSV file and splits contacts into batches of 100\n2. Each batch is sent to Lusha's bulk enrichment API in a single call\n3. Enriched results (phone, email, title, company data) are formatted and exported as a new CSV\n\n## Set up steps\n1. Install the [Lusha community node](https://www.npmjs.com/package/@lusha-org/n8n-nodes-lusha)\n2. Add your Lusha API credentials\n3. Place your CSV file with an `email` column in the configured path\n4. Run the workflow manually — the enriched CSV is saved to the output path","workflow":{"meta":{"instanceId":""},"name":"Bulk Data Enrichment with Lusha","nodes":[{"id":"eff84dbb-8333-4b82-9045-ace5385530c0","name":"📋 Bulk Data Enrichment","type":"n8n-nodes-base.stickyNote","position":[-100,-440],"parameters":{"width":860,"height":420,"content":"## Bulk Data Enrichment with Lusha\n\n**Who it's for:** Marketing Ops & RevOps teams preparing campaign lists\n\n**What it does:** Upload campaign lists or CSV files, enrich them in batch with Lusha, and export records with emails, phones, and confidence scores.\n\n### How it works\n1. Trigger manually or on a schedule\n2. Read contacts from a spreadsheet/CSV\n3. Batch contacts into groups of up to 100\n4. Send each batch to Lusha Bulk Enrichment API\n5. Merge results and write enriched CSV\n\n### Setup\n1. Install the Lusha community node\n2. Add your Lusha API credentials\n3. Place your CSV/XLSX file in the configured path\n4. Run manually or set a schedule"},"typeVersion":1},{"id":"2982ba81-2735-4a87-91ee-362ca34f123d","name":"📥 1. Read & Batch Input","type":"n8n-nodes-base.stickyNote","position":[-30,30],"parameters":{"color":7,"width":500,"height":270,"content":"Trigger the workflow manually, read your CSV file, and split contacts into batches of 100 for efficient API usage.\n\n**Nodes:** Manual Trigger → Read CSV → Split In Batches\n\n💡 Place your CSV file with an `email` column in the configured path before running."},"typeVersion":1},{"id":"32464ea9-acda-4bc3-bf80-0faeeb951f0f","name":"🔄 2. Bulk Enrich with Lusha","type":"n8n-nodes-base.stickyNote","position":[560,30],"parameters":{"color":7,"width":560,"height":270,"content":"Each batch is formatted into the Lusha Bulk Enrichment API payload and sent as a single call. Returns phone, email, job title, seniority, and company firmographics.\n\n**Nodes:** Format Batch → Lusha Bulk Enrich\n\n📖 [Lusha API docs](https://www.lusha.com/docs/)"},"typeVersion":1},{"id":"5157216a-d957-40de-b632-d033b91b5b32","name":"📤 3. Format & Export CSV","type":"n8n-nodes-base.stickyNote","position":[1270,30],"parameters":{"color":7,"width":560,"height":270,"content":"Enriched results are flattened into a clean tabular format and exported as a new CSV file.\n\n**Nodes:** Format Results → Export CSV\n\nThe output file `enriched_contacts.csv` contains: name, email, phone, title, seniority, company, industry, size, revenue."},"typeVersion":1},{"id":"d9946b52-821d-4f9a-824b-7fba030bdebe","name":"Start Manually","type":"n8n-nodes-base.manualTrigger","position":[0,300],"parameters":{},"typeVersion":1},{"id":"5d7f0fdb-cc4b-4d0a-8a17-305eee22f68d","name":"Read CSV File","type":"n8n-nodes-base.spreadsheetFile","position":[280,300],"parameters":{"options":{},"fileFormat":"csv"},"typeVersion":2},{"id":"521d495f-214f-43c5-aeea-afaa13a32035","name":"Batch into Groups of 100","type":"n8n-nodes-base.splitInBatches","position":[560,300],"parameters":{"options":{},"batchSize":100},"typeVersion":3},{"id":"876357b7-31a6-4071-87a2-317f26cc3a98","name":"Format Batch for Lusha","type":"n8n-nodes-base.code","position":[840,300],"parameters":{"jsCode":"// Format contacts for Lusha Bulk Enrichment API\n// Builds the full payload: { contacts: [...], metadata: {} }\nconst items = $input.all();\nlet contactIdCounter = 1;\n\nconst contacts = items\n  .filter(item => item.json.email)\n  .map(item => ({\n    contactId: String(contactIdCounter++),\n    email: item.json.email\n  }));\n\nconst payload = {\n  contacts,\n  metadata: {}\n};\n\nreturn [{ json: { contactsPayload: JSON.stringify(payload) } }];"},"typeVersion":2},{"id":"2d7f7382-0135-4d4e-986c-82f7d1dbd881","name":"Enrich contacts in bulk","type":"@lusha-org/n8n-nodes-lusha.lusha","position":[1120,300],"parameters":{"bulkType":"json","operation":"enrichBulk","contactsPayloadJson":"={{ $json.contactsPayload }}","contactBulkAdditionalOptions":{}},"credentials":{"lushaApi":{"id":"credential-id","name":"Lusha API"}},"typeVersion":1},{"id":"6791b3ec-76a1-4f7e-ada7-8f4c8184f7f8","name":"Format Enriched Results","type":"n8n-nodes-base.code","position":[1400,300],"parameters":{"jsCode":"// Flatten enriched results into rows for CSV export\nconst items = $input.all();\nconst results = [];\n\nfor (const item of items) {\n  const d = item.json;\n  results.push({\n    json: {\n      firstName: d.firstName || '',\n      lastName: d.lastName || '',\n      email: d.primaryEmail || '',\n      emailType: d.primaryEmailType || '',\n      phone: d.primaryPhone || '',\n      phoneType: d.primaryPhoneType || '',\n      jobTitle: d.jobTitle || '',\n      seniority: d.seniority || '',\n      company: d.companyName || '',\n      companyDomain: d.companyDomain || '',\n      industry: d.companyMainIndustry || '',\n      companySize: d.companySize || '',\n      revenueRange: d.revenueRange || '',\n      location: d.companyLocation || '',\n      enrichedAt: new Date().toISOString()\n    }\n  });\n}\n\nreturn results;"},"typeVersion":2},{"id":"047b6211-af42-4620-ba13-53abc785dcec","name":"Export Enriched CSV","type":"n8n-nodes-base.spreadsheetFile","position":[1680,300],"parameters":{"options":{"fileName":"enriched_contacts.csv"},"operation":"toFile","fileFormat":"csv"},"typeVersion":2}],"pinData":{},"connections":{"Read CSV File":{"main":[[{"node":"Batch into Groups of 100","type":"main","index":0}]]},"Start Manually":{"main":[[{"node":"Read CSV File","type":"main","index":0}]]},"Format Batch for Lusha":{"main":[[{"node":"Enrich contacts in bulk","type":"main","index":0}]]},"Enrich contacts in bulk":{"main":[[{"node":"Format Enriched Results","type":"main","index":0}]]},"Format Enriched Results":{"main":[[{"node":"Export Enriched CSV","type":"main","index":0}]]},"Batch into Groups of 100":{"main":[[{"node":"Format Batch for Lusha","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":11,"nodeTypes":{"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.stickyNote":{"count":4},"n8n-nodes-base.manualTrigger":{"count":1},"n8n-nodes-base.splitInBatches":{"count":1},"n8n-nodes-base.spreadsheetFile":{"count":2},"@lusha-org/n8n-nodes-lusha.lusha":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Daniel Turgeman","username":"daniel-turg-2","bio":"","verified":true,"links":[],"avatar":"https://gravatar.com/avatar/9c31489649fc883124c6193b02dbd5d9c13811614578fa3a0ad0bd8828fd460b?r=pg&d=retro&size=200"},"nodes":[{"id":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":41,"icon":"fa:table","name":"n8n-nodes-base.spreadsheetFile","codex":{"data":{"alias":["_Excel","Excel","CSV","Sheet","Spreadsheet","xls","xlsx","ods"],"resources":{"generic":[{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.converttofile/"}]},"categories":["Data & Storage","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files"]}}},"group":"[\"transform\"]","defaults":{"name":"Spreadsheet File","color":"#2244FF"},"iconData":{"icon":"table","type":"icon"},"displayName":"Spreadsheet File","typeVersion":2,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":838,"icon":"fa:mouse-pointer","name":"n8n-nodes-base.manualTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"When clicking ‘Execute workflow’","color":"#909298"},"iconData":{"icon":"mouse-pointer","type":"icon"},"displayName":"Manual Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":37,"name":"Lead Generation"},{"id":49,"name":"AI Summarization"}],"image":[]}}