Retrieve account then find their marketer profile

node v10.24.1
version: 4.0.0
endpointsharetweet
var jsforce = require('jsforce') var madkudu = require("@madkudu/madkudu-node")(process.env.madkudu_api_key) const sequential = require('promise-sequential'); const _ = require('lodash') const request = require("request") // You have to run `npm install request` for this script to work var Airtable = require('airtable'); var base = new Airtable({ apiKey: process.env.airtable_crm_key }).base('appvKsBGHgvejGAe8'); const TITLE_SEARCH = 'marketing%2520operations%2Cdigital%2520marketing%2Cdemand%2520generation' const main = function () { var conn = new jsforce.Connection() conn.login(process.env.salesforce_username, process.env.salesforce_password + process.env.salesforce_security_token) .then((user_info) => { return conn.query("SELECT Id, Facebook_Handle__c, last_lead_prospection_date__c, website, Name FROM Account WHERE Account_Source_Details__c = 'Datanyze' ") .then(res => { const array_with_domain = res.records return linkedin_search(array_with_domain) //return get_scores(res.records) // .then(scores => { // return conn.sobject("Account").update(scores) //}) }) }) .catch(console.log) } async function linkedin_search(records) { for (var i = 12; i < records.length; i++) { console.log(records[i], i) const profile = await get_profiles(records[i].Name) console.log(profile) const augmented_profiles = await augment_profiles_with_emails(profile, records[i].Website) console.log(augmented_profiles) if (augmented_profiles === undefined){ } else { Promise.all(augmented_profiles.map(obj => { insert_profile_into_airtable(obj) })) } } } const augment_profiles_with_emails = async function (profiles, domain) { const results = profiles.map(async (obj) => { return get_email(obj.firstName, obj.lastName, domain) }); return Promise.all(results) .then(res => { const augmented_profiles = [] for (var i = 0; i < res.length; i++) { if (res[i] === null || res[i] === undefined) { console.log("error") } else { var augmented_profile = profiles[i] augmented_profile.email = res[i].email augmented_profile.domain = res[i].domain augmented_profile.score = res[i].score augmented_profiles.push(augmented_profile) } } // console.log('augmented_profiles') // console.log(augmented_profiles) return augmented_profiles }); } const get_email = async function (firstname, lastname, domain) { if (domain === null || firstname === null || lastname === null){ return new Promise(resolve => { request.get({ url:`https://api.hunter.io/v2/email-finder?domain=madkudu.com&first_name=kevin&last_name=rabesaotra---&api_key=${process.env.hunter_api_key}`, json: true }, (err, httpResponse, body) => { console.log(err || body) const results = body && body.data // console.log('results: ' + JSON.stringify(results)) resolve(results) }) }) } else { return new Promise(resolve => { request.get({ url:`https://api.hunter.io/v2/email-finder?domain=${domain}&first_name=${firstname}&last_name=${lastname}&api_key=${process.env.hunter_api_key}`, json: true }, (err, httpResponse, body) => { console.log(err || body) const results = body && body.data // console.log('results: ' + JSON.stringify(results)) resolve(results) }) }) } } const get_profiles = async function (company_name) { return new Promise(resolve => { const encoded_company_name = encodeURIComponent(company_name) console.log(encoded_company_name) const json = { "output": "first-result-object", "argument": { "sessionCookie": process.env.raf_cookie, "searches": "https://www.linkedin.com/sales/search/people?companyIncluded=" + encoded_company_name +"&companyTimeScope=CURRENT&doFetchHeroCard=false&logHistory=true&logId=2720283516&page=1&searchSessionId=1LlcH3E4SfGyHlFi0ydZew%3D%3D&titleIncluded=" + TITLE_SEARCH + "&titleTimeScope=CURRENT", "numberOfProfiles": 5, // "csvName": "api_data", "extractDefaultUrl": true, "removeDuplicateProfiles": false } } const options = { url: "https://phantombuster.com/api/v1/agent/94253/launch", headers: { "X-Phantombuster-Key-1": process.env.phamtobuster_key }, json } console.log(json) request.post(options, (err, httpResponse, body) => { console.log(httpResponse) console.log(err || body.data.resultObject) const results = body && body.data && body.data.resultObject resolve(body.data.resultObject) }) }) } const insert_profile_into_airtable = async function (profile) { return new Promise(resolve => { base('Kevin').create({ "email": profile.email, "linkedin": profile.companyUrl, "hunter_confidence": profile.score, "domain": profile.domain, "First Name": profile.firstName, "Last Name": profile.lastName, "title": profile.title, "tenure": profile.duration, "location": profile.location }, function (err, record) { if (err) { console.error(err); return; } console.log(record.getId()); }); }) } exports.endpoint = function (request, response) { return main() .then(() => { response.end("success") }) .catch(() => { response.end("error") }) } main()
Loading…

no comments

    sign in to comment