'use strict'; var fsp = require('fs-promise'); var differenceBy = require('lodash/differenceBy'); var keys = require('lodash/keys'); var values = require('lodash/values'); var parseCsv = require('csv-parse'); function parse(fileContent) { return new Promise(function(resolve, reject) { parseCsv(fileContent, {delimiter: ',', quote: '"', columns: true}, function (err, data) { if (err) { reject(err); } else { resolve(data); } }); }); } Promise.all([ fsp.readFile('listA.csv', 'utf8').then(parse), fsp.readFile('listB.csv', 'utf8').then(parse) ]).then(function(res) { var usersNl = res[0]; var users = res[1]; var header = keys(users[0]).join('","'); var rows = differenceBy(users, usersNl, 'Email Address').map(function(user) { return values(user).join('","'); }); var out = '"' + [header].concat(rows).join('"\n"') + '"'; fsp.writeFile('listA-listB.csv', out, 'utf8'); });