commit f2cbb9d046a509f988147eadae3d6e61e40163af Author: Jonas Linter Date: Wed Nov 5 11:15:27 2025 +0100 Added script diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..24ee5b1 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.13 diff --git a/Fortune500leads.csv b/Fortune500leads.csv new file mode 100644 index 0000000..385cad3 --- /dev/null +++ b/Fortune500leads.csv @@ -0,0 +1,658 @@ +Rank,"Company Name",Domain,domain,name,first_name,email +23,"Phillips 66",phillips66.com,,,, +28,"JPMorgan Chase",jpmorganchase.com,,,, +58,"Tyson Foods",tysonfoods.com,,,, +53,"Lockheed Martin",lockheedmartin.com,,,, +60,"Charter Communications",corporate.charter.com,,,, +72,"Plains GP Holdings",plainsallamerican.com,,,, +4,"UnitedHealth Group",unitedhealthgroup.com,unitedhealthgroup.com,"Sumeet Sethi",Sumeet,sumeet_sethi@uhc.com +67,"Enterprise Products Partners",enterpriseproducts.com,,,, +19,"Marathon Petroleum",marathonpetroleum.com,marathonpetroleum.com,"Jesus Evia Del Puerto Rangel",Jesus,jeviadelpuerto@marathonpetroleum.com +3,Apple,apple.com,apple.com,"Katrien Bouwman",Katrien,kbouwman@apple.com +90,Supervalu,supervalu.com,,,, +11,"Costco Wholesale",costco.com,costco.com,"Andrea Boyle",Andrea,aboyle@costco.com +48,MetLife,metlife.com,metlife.com,"Laura Snape",Laura,laura.snape@metlife.com +40,Boeing,boeing.com,boeing.com,"Darshini Perera",Darshini,darshini.perera@boeing.com +51,"Walt Disney",disney.com,disney.com,"Claudia Neufeld",Claudia,claudia.neufeld@disney.com +14,Microsoft,microsoft.com,microsoft.com,"Paolo Modolo",Paolo,paolomodolo@microsoft.com +57,Deere,deere.com,deere.com,"John Deere",John,johndeere@deere.com +50,Sysco,sysco.com,sysco.com,"Colin Staunton",Colin,colin-staunton@sysco.com +45,PepsiCo,pepsico.com,pepsico.com,"Shailja Joshi",Shailja,shailja.joshi@pepsico.com +7,"Exxon Mobil",exxonmobil.com,exxonmobil.com,"Robert Shearer",Robert,robert.j.shearer@exxonmobil.com +100,"International Paper",internationalpaper.com,,,, +52,HP,hp.com,hp.com,"Shivani Chopra",Shivani,shivani.chopra@hp.com +56,"Liberty Mutual Insurance Group",libertymutual.com,libertymutual.com,"Jaclyn Kapnis Pelletier",Jaclyn,jaclyn.kapnis@libertymutual.com +6,"CVS Health",cvshealth.com,cvshealth.com,"Albert Chang",Albert,albert.chang@cvshealth.com +87,"United Natural Foods",unfi.com,unfi.com,"Jamie Lyn Sjoquist",Jamie,jamie.sjoquist@unfi.com +27,"Verizon Communications",verizon.com,verizon.com,"Marie Thornton",Marie,marie.thornton@verizon.com +59,"American International Group",aig.com,aig.com,"Lea Wilkes",Lea,lea.wilkes@aig.com +78,AbbVie,abbvie.com,abbvie.com,"Kanchan Yadav",Kanchan,kanchan.yadav@abbvie.com +17,"Home Depot",homedepot.com, +65,"Tech Data",techdata.com,techdata.com,"Claire Saines",Claire,claire.saines@techdata.com +85,"Morgan Stanley",morganstanley.com,morganstanley.com,"Lisa Mcbreen",Lisa,lisa.mcbreen@morganstanley.com +39,"Raytheon Technologies",rtx.com,rtx.com,"Nicole Lightbourne",Nicole,nicole.lightbourne@rtx.com +16,Chevron,chevron.com,chevron.com,"Tehan Samarasinha",Tehan,tehan.samarasinha@chevron.com +21,Kroger,kroger.com,kroger.com,"Lillie Reader",Lillie,lillie.reader@kroger.com +77,"HCA Healthcare",hcahealthcare.com,hcahealthcare.com,"Jill S Newham",Jill,jill.newham@hcahealthcare.com +84,Kohl's,kohls.com,kohls.com,"Michael Schlissel",Michael,michael.schlissel@kohls.com +95,"Capital One Financial",capitalone.com,capitalone.com,"Jesse Karassik",Jesse,jesse.karassik@capitalone.com +66,CHS,chsinc.com,chsinc.com,"Romuald Veru",Romuald,romuald.veru@chsinc.com +49,"Wells Fargo",wellsfargo.com,wellsfargo.com,"Katherine Brown Mach",Katherine,katherine.brown@wellsfargo.com +79,"Abbott Laboratories",abbott.com,abbott.com,"Priyanka Menda",Priyanka,priyanka.menda@abbott.com +22,"Fannie Mae",fanniemae.com,fanniemae.com,"Natalie Park",Natalie,natalie_park@fanniemae.com +20,"Elevance Health",elevancehealth.com,elevancehealth.com,"Julie Irving",Julie,julie.irving@elevancehealth.com +112,Aramark,aramark.com,aramark.com,"John Kandemir",John,kandemir-john@aramark.com +68,"Publix Super Markets",publix.com, +76,Lowe's,lowes.com,lowes.com,"Debbie Lee",Debbie,dlee@lowes.com +113,"Marriott International",marriott.com,marriott.com,"Laura Golder",Laura,laura.golder@marriott.com +126,"Northrop Grumman",northropgrumman.com,,,, +30,"Meta Platforms",meta.com,meta.com,"Jimena Flores",Jimena,jflores@meta.com +128,Freeport-McMoRan,fcx.com,,,, +8,Alphabet,abc.xyz, +9,McKesson,mckesson.com,mckesson.com,"Katherine Dolson",Katherine,katherine.dolson@mckesson.com +37,"Procter & Gamble",pg.com,pg.com,"Freddy Bharucha",Freddy,bharucha.f@pg.com +101,Avnet,avnet.com,avnet.com,"Eric Chang",Eric,eric.chang@avnet.com +99,"Massachusetts Mutual Life Insurance",MassMutual.com,MassMutual.com,"Kathleen Mayko",Kathleen,kmayko@massmutual.com +91,Lenovo,lenovo.com,lenovo.com,"Anna Staszynska",Anna,astaszynska@lenovo.com +115,CDW,cdw.com,cdw.com,"Jacqueline Macera",Jacqueline,jacqueline.macera@cdw.com +24,"Valero Energy",valero.com,valero.com,"Beth Herd",Beth,beth.herd@valero.com +116,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +43,"Archer Daniels Midland",adm.com,adm.com,"David Douglas",David,david.douglas@adm.com +1,Walmart,walmart.com,walmart.com,"Frank Barbieri",Frank,fbarbieri@walmart.com +89,Travelers,travelers.com,travelers.com,"Mark Wright",Mark,mark.wright@travelers.com +44,"United Parcel Service",ups.com,ups.com,"James Walton",James,jameswalton@ups.com +109,AutoNation,autonation.com,autonation.com,"Claudia Martinez",Claudia,martinezc@autonation.com +108,"American Tower",americantower.com, +47,FedEx,fedex.com,fedex.com,"Tanya Champaign",Tanya,tanya.champaign@fedex.com +34,Target,target.com,target.com,"Fred Clark",Fred,fred.clark@target.com +130,PG&E,pge.com,pge.com,"Erika Wasmund",Erika,erika.wasmund@pge.com +71,"Energy Transfer",energytransfer.com,energytransfer.com,"Beth Hickey",Beth,beth.hickey@energytransfer.com +12,Cigna,cigna.com,cigna.com,"Sarah Tam",Sarah,sarah.tam@cigna.com +42,Humana,humana.com,humana.com,"Eduardo Pujol",Eduardo,epujol@humana.com +110,Chubb,chubb.com,chubb.com,"Tine Thorsen",Tine,tine.thorsen@chubb.com +61,ConocoPhillips,conocophillips.com,conocophillips.com,"Sean Watson",Sean,sean.watson@conocophillips.com +152,"Old Republic International",,,,, +"Continuing from the previous list"," here are the primary domains for the remaining Fortune 500 companies:",,,,, +Rank,"Company Name",Domain,,,, +124,"CBRE Group",cbre.com,cbre.com,"Leslie Motiwalla",Leslie,leslie.motiwalla@cbre.com +104,McKesson,mckesson.com,mckesson.com,"Jim Marasco",Jim,jim.marasco@mckesson.com +122,Danaher,danaher.com, +145,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +155,"Auto-Owners Insurance",auto-owners.com,,,, +125,"PayPal Holdings",paypal.com,paypal.com,"Leanne Sheraton",Leanne,lsheraton@paypal.com +139,"American Family Insurance Group",amfam.com,amfam.com,"Michele Martinez Wingate",Michele,mwingate@amfam.com +158,"American Family Insurance Group",amfam.com,amfam.com,"Michele Martinez Wingate",Michele,mwingate@amfam.com +159,Avnet,avnet.com,avnet.com,"Eric Chang",Eric,eric.chang@avnet.com +160,Freeport-McMoRan,fcx.com,,,, +161,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +143,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +129,ViacomCBS,viacomcbs.com,viacomcbs.com,"Carley Cavanaugh",Carley,carley.cavanaugh@viacomcbs.com +83,Oracle,oracle.com,oracle.com,"Tim Carr",Tim,timothy.carr@oracle.com +96,"Northwestern Mutual",northwesternmutual.com,northwesternmutual.com,"Lori M Ham",Lori,lori.ham@nm.com +111,Amgen,amgen.com,amgen.com,"Martin Zanni",Martin,mzanni@amgen.com +29,Centene,centene.com, +168,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +123,"DXC Technology",dxc.technology, +127,"General Mills",generalmills.com,generalmills.com,"Jorge Robles",Jorge,jorge.robles@generalmills.com +170,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +94,3M,3m.com,3m.com,"Chitkala Nishandar",Chitkala,cnishandar@3m.com +144,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +153,PVH,pvh.com,pvh.com,"Anita Koncabahar",Anita,anitakoncabahar@pvh.com +107,CarMax,carmax.com,carmax.com,"John Crimmins",John,john_crimmins@carmax.com +176,"Marriott International",marriott.com,marriott.com,"Laura Golder",Laura,laura.golder@marriott.com +80,"Arrow Electronics",arrow.com,arrow.com,"Laura Reed",Laura,laura.reed@arrow.com +178,CDW,cdw.com,cdw.com,"Jacqueline Macera",Jacqueline,jacqueline.macera@cdw.com +32,Intel,intel.com,intel.com,"Stefan Vogt",Stefan,stefan.vogt@intel.com +142,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Rafhanah Hamid",Rafhanah,rafhanah.hamid@jacobs.com +169,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +10,AmerisourceBergen,amerisourcebergen.com,amerisourcebergen.com,"Frank Jorfi",Frank,frank.jorfi@amerisourcebergen.com +118,"Consolidated Edison",coned.com,coned.com,"Robbie Wang",Robbie,wangr@coned.com +75,Pfizer,pfizer.com,pfizer.com,"Lara Mcclelland",Lara,lara.mcclelland@pfizer.com +185,"CBRE Group",cbre.com,cbre.com,"Leslie Motiwalla",Leslie,leslie.motiwalla@cbre.com +186,"PayPal Holdings",paypal.com,paypal.com,"Leanne Sheraton",Leanne,lsheraton@paypal.com +187,"Northrop Grumman",northropgrumman.com,,,, +188,"General Mills",generalmills.com,generalmills.com,"Jorge Robles",Jorge,jorge.robles@generalmills.com +93,Exelon,exeloncorp.com,exeloncorp.com,"Xiying Lin",Xiying,xiying.lin@exeloncorp.com +190,Freeport-McMoRan,fcx.com,,,, +191,ViacomCBS,viacomcbs.com,viacomcbs.com,"Carley Cavanaugh",Carley,carley.cavanaugh@viacomcbs.com +192,PG&E,pge.com,pge.com,"Erika Wasmund",Erika,erika.wasmund@pge.com +180,"Emerson Electric",emerson.com,emerson.com,"Jacalyn High",Jacalyn,jacalyn.high@emerson.com +31,Comcast,corporate.comcast.com,corporate.comcast.com,"Lynne Pressley",Lynne,lynne.pressley@comcast.com +117,Halliburton,halliburton.com,halliburton.com,"Sean Whitehead",Sean,sean.whitehead@halliburton.com +167,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +119,"Altria Group",altria.com,altria.com,"Sravanthy Bollam",Sravanthy,bollams@altria.com +198,Exelon,exeloncorp.com,exeloncorp.com,"Xiying Lin",Xiying,xiying.lin@exeloncorp.com +199,3M,3m.com,3m.com,"Chitkala Nishandar",Chitkala,cnishandar@3m.com +200,"Capital One Financial",capitalone.com,capitalone.com,"Jesse Karassik",Jesse,jesse.karassik@capitalone.com +201,"Northwestern Mutual",northwesternmutual.com,northwesternmutual.com,"Lori M Ham",Lori,lori.ham@nm.com +138,"Guardian Life Ins. Co. of America",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +166,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +204,"International Paper",internationalpaper.com,,,, +136,"Emerson Electric",emerson.com,emerson.com,"Jacalyn High",Jacalyn,jacalyn.high@emerson.com +205,Avnet,avnet.com,avnet.com,"Eric Chang",Eric,eric.chang@avnet.com +163,"Altria Group",altria.com,altria.com,"Melanie Wu",Melanie,wum@altria.com +183,Danaher,danaher.com, +156,"NRG Energy",nrg.com,nrg.com,"Anna Altinger",Anna,anna.altinger@nrg.com +210,CarMax,carmax.com,carmax.com,"John Crimmins",John,john_crimmins@carmax.com +171,"NextEra Energy",nexteraenergy.com, +106,Fluor,fluor.com, +212,Chubb,chubb.com,chubb.com,"Tine Thorsen",Tine,tine.thorsen@chubb.com +213,Amgen,amgen.com,amgen.com,"Martin Zanni",Martin,mzanni@amgen.com +215,"Marriott International",marriott.com,marriott.com,"Laura Golder",Laura,laura.golder@marriott.com +140,"Quanta Services",quantaservices.com,quantaservices.com,"Jose Duarte",Jose,jose.duarte@quantaservices.com +217,CDW,cdw.com,cdw.com,"Jacqueline Macera",Jacqueline,jacqueline.macera@cdw.com +218,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +219,Halliburton,halliburton.com,halliburton.com,"Sean Whitehead",Sean,sean.whitehead@halliburton.com +220,"Consolidated Edison",coned.com,coned.com,"Robbie Wang",Robbie,wangr@coned.com +221,"Altria Group",altria.com,altria.com,"Melanie Wu",Melanie,wum@altria.com +214,Aramark,aramark.com,aramark.com,"John Kandemir",John,kandemir-john@aramark.com +184,"DXC Technology",dxc.technology, +55,"Goldman Sachs Group",goldmansachs.com, +5,"Berkshire Hathaway",berkshirehathaway.com, +226,"CBRE Group",cbre.com,cbre.com,"Leslie Motiwalla",Leslie,leslie.motiwalla@cbre.com +227,"PayPal Holdings",paypal.com,paypal.com,"Leanne Sheraton",Leanne,lsheraton@paypal.com +228,"Northrop Grumman",northropgrumman.com,,,, +229,"General Mills",generalmills.com,generalmills.com,"Jorge Robles",Jorge,jorge.robles@generalmills.com +230,Freeport-McMoRan,fcx.com,,,, +231,ViacomCBS,viacomcbs.com,viacomcbs.com,"Carley Cavanaugh",Carley,carley.cavanaugh@viacomcbs.com +232,PG&E,pge.com,pge.com,"Erika Wasmund",Erika,erika.wasmund@pge.com +69,Allstate,allstate.com,allstate.com,"Kellyn Battrell",Kellyn,kellyn.battrell@allstate.com +46,"General Electric",ge.com, +18,"Walgreens Boots Alliance",walgreensbootsalliance.com, +86,"US Foods Holding",usfoods.com, +179,Halliburton,halliburton.com,halliburton.com,"Sean Whitehead",Sean,sean.whitehead@halliburton.com +238,"Emerson Electric",emerson.com,emerson.com,"Jacalyn High",Jacalyn,jacalyn.high@emerson.com +211,"American Tower",americantower.com, +240,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +241,"American Family Insurance Group",amfam.com,amfam.com,"Michele Martinez Wingate",Michele,mwingate@amfam.com +242,"Quanta Services",quantaservices.com,quantaservices.com,"Jose Duarte",Jose,jose.duarte@quantaservices.com +243,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +244,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +245,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +164,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +2,Amazon,amazon.com, +246,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +247,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +33,"State Farm Insurance",statefarm.com, +38,IBM,ibm.com,ibm.com,"Mariana Lemos",Mariana,mariana.lemos@ibm.com +197,"American Airlines Group",aa.com,aa.com,"David Dean",David,dean.david@aa.com +141,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +120,"Union Pacific",up.com, +255,PVH,pvh.com,pvh.com,"Anita Koncabahar",Anita,anitakoncabahar@pvh.com +134,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +257,"Auto-Owners Insurance",auto-owners.com,,,, +258,"NRG Energy",nrg.com,nrg.com,"Anna Altinger",Anna,anna.altinger@nrg.com +174,Starbucks,starbucks.com,starbucks.com,"Katie Taylor",Katie,ktaylor@starbucks.com +260,"American Family Insurance Group",amfam.com,amfam.com,"Michele Martinez Wingate",Michele,mwingate@amfam.com +261,Avnet,avnet.com,avnet.com,"Eric Chang",Eric,eric.chang@avnet.com +262,Freeport-McMoRan,fcx.com,,,, +263,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +264,"Consolidated Edison",coned.com,coned.com,"Robbie Wang",Robbie,wangr@coned.com +265,"Altria Group",altria.com,altria.com,"Melanie Wu",Melanie,wum@altria.com +266,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +15,"Cardinal Health",cardinalhealth.com,cardinalhealth.com,"Wendy Wu",Wendy,wendy.wu@cardinalhealth.com +267,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +268,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +269,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +270,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +271,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +272,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +236,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +92,"American Airlines Group",aa.com,aa.com,"Kimberly Robinson",Kimberly,kimberly.robinson@aa.com +276,Starbucks,starbucks.com,starbucks.com,"Katie Taylor",Katie,ktaylor@starbucks.com +182,"Quanta Services",quantaservices.com,quantaservices.com,"Jose Duarte",Jose,jose.duarte@quantaservices.com +278,"Marriott International",marriott.com,marriott.com,"Laura Golder",Laura,laura.golder@marriott.com +103,Albertsons,albertsonscompanies.com, +41,Citigroup,citigroup.com, +280,CDW,cdw.com,cdw.com,"Jacqueline Macera",Jacqueline,jacqueline.macera@cdw.com +281,Halliburton,halliburton.com,halliburton.com,"Sean Whitehead",Sean,sean.whitehead@halliburton.com +282,"Emerson Electric",emerson.com,emerson.com,"Jacalyn High",Jacalyn,jacalyn.high@emerson.com +224,Danaher,danaher.com, +284,"Quanta Services",quantaservices.com,quantaservices.com,"Jose Duarte",Jose,jose.duarte@quantaservices.com +81,"General Dynamics",generaldynamics.com, +287,"CBRE Group",cbre.com,cbre.com,"Leslie Motiwalla",Leslie,leslie.motiwalla@cbre.com +288,"PayPal Holdings",paypal.com,paypal.com,"Leanne Sheraton",Leanne,lsheraton@paypal.com +289,"Northrop Grumman",northropgrumman.com,,,, +290,"General Mills",generalmills.com,generalmills.com,"Jorge Robles",Jorge,jorge.robles@generalmills.com +26,"Ford Motor",ford.com, +292,Freeport-McMoRan,fcx.com,,,, +293,ViacomCBS,viacomcbs.com,viacomcbs.com,"Carley Cavanaugh",Carley,carley.cavanaugh@viacomcbs.com +102,"Philip Morris International",pmiscience.com, +273,"NextEra Energy",nexteraenergy.com, +294,PG&E,pge.com,pge.com,"Erika Wasmund",Erika,erika.wasmund@pge.com +296,"Tenet Healthcare","tenethealth.com ",,,, +Rank,"Company Name",Domain,,,, +165,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +153,PVH,pvh.com,pvh.com,"Anita Koncabahar",Anita,anitakoncabahar@pvh.com +70,"Delta Air Lines",delta.com, +155,"Auto-Owners Insurance",auto-owners.com,,,, +156,"NRG Energy",nrg.com,nrg.com,"Anna Altinger",Anna,anna.altinger@nrg.com +73,"Best Buy",bestbuy.com,bestbuy.com,"Tara Estee",Tara,tara.estee@bestbuy.com +158,"American Family Insurance Group",amfam.com,amfam.com,"Michele Martinez Wingate",Michele,mwingate@amfam.com +159,Avnet,avnet.com,avnet.com,"Eric Chang",Eric,eric.chang@avnet.com +160,Freeport-McMoRan,fcx.com,,,, +161,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +162,"Consolidated Edison",coned.com,coned.com,"Robbie Wang",Robbie,wangr@coned.com +105,ManpowerGroup,manpowergroup.com,manpowergroup.com,"Gareth Vale",Gareth,gareth.vale@manpowergroup.com +164,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +165,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +166,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +167,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +168,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +163,"Altria Group",altria.com,altria.com,"Melanie Wu",Melanie,wum@altria.com +169,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +170,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +35,Anthem,anthem.com, +135,"Omnicom Group",omnicomgroup.com, +174,Starbucks,starbucks.com,starbucks.com,"Katie Taylor",Katie,ktaylor@starbucks.com +285,Danaher,danaher.com, +176,"Marriott International",marriott.com,marriott.com,"Laura Golder",Laura,laura.golder@marriott.com +63,"World Fuel Services",worldfuel.com, +171,"NextEra Energy",nexteraenergy.com, +178,CDW,cdw.com,cdw.com,"Jacqueline Macera",Jacqueline,jacqueline.macera@cdw.com +180,"Emerson Electric",emerson.com,emerson.com,"Jacalyn High",Jacalyn,jacalyn.high@emerson.com +179,Halliburton,halliburton.com,halliburton.com,"Sean Whitehead",Sean,sean.whitehead@halliburton.com +182,"Quanta Services",quantaservices.com,quantaservices.com,"Jose Duarte",Jose,jose.duarte@quantaservices.com +98,"American Electric Power",aep.com, +251,Starbucks,starbucks.com,starbucks.com,"Ritvik Thomas",Ritvik,rthomas@starbucks.com +185,"CBRE Group",cbre.com,cbre.com,"Leslie Motiwalla",Leslie,leslie.motiwalla@cbre.com +186,"PayPal Holdings",paypal.com,paypal.com,"Leanne Sheraton",Leanne,lsheraton@paypal.com +54,"Freddie Mac",freddiemac.com, +188,"General Mills",generalmills.com,generalmills.com,"Jorge Robles",Jorge,jorge.robles@generalmills.com +187,"Northrop Grumman",northropgrumman.com,,,, +190,ViacomCBS,viacomcbs.com,viacomcbs.com,"Carley Cavanaugh",Carley,carley.cavanaugh@viacomcbs.com +191,PG&E,pge.com,pge.com,"Erika Wasmund",Erika,erika.wasmund@pge.com +173,"Discover Financial Services",discover.com, +62,"New York Life Insurance",newyorklife.com,newyorklife.com,"Hiren Shah",Hiren,hshah@newyorklife.com +132,"Tenet Healthcare",tenethealth.com, +194,"Tenet Healthcare",tenethealth.com, +196,"American Airlines Group",aa.com,aa.com,"Kimberly Robinson",Kimberly,kimberly.robinson@aa.com +197,Exelon,exeloncorp.com,exeloncorp.com,"Xiying Lin",Xiying,xiying.lin@exeloncorp.com +198,3M,3m.com,3m.com,"Chitkala Nishandar",Chitkala,cnishandar@3m.com +199,"Capital One Financial",capitalone.com,capitalone.com,"Jesse Karassik",Jesse,jesse.karassik@capitalone.com +200,"Northwestern Mutual",northwesternmutual.com,northwesternmutual.com,"Lori M Ham",Lori,lori.ham@nm.com +148,"Discover Financial Services",discover.com, +202,"International Paper",internationalpaper.com,,,, +151,"Estee Lauder",elcompanies.com, +207,Albertsons,albertsonscompanies.com, +205,ManpowerGroup,manpowergroup.com,manpowergroup.com,"Gareth Vale",Gareth,gareth.vale@manpowergroup.com +114,Kimberly-Clark,kimberly-clark.com, +207,CarMax,carmax.com,carmax.com,"John Crimmins",John,john_crimmins@carmax.com +25,"General Motors",gm.com, +209,Chubb,chubb.com,chubb.com,"Tine Thorsen",Tine,tine.thorsen@chubb.com +210,Amgen,amgen.com,amgen.com,"Martin Zanni",Martin,mzanni@amgen.com +211,Aramark,aramark.com,aramark.com,"John Kandemir",John,kandemir-john@aramark.com +212,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +189,Amphenol,amphenol.com, +286,"DXC Technology",dxc.technology, +215,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +216,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +217,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +225,"DXC Technology",dxc.technology, +219,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +220,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +221,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +154,"TravelCenters of America",ta-petro.com,ta-petro.com,"Mel S Anderson",Mel,manderson@ta-petro.com +218,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +183,Danaher,danaher.com, +225,Starbucks,starbucks.com,starbucks.com,"Ritvik Thomas",Ritvik,rthomas@starbucks.com +196,"Omnicom Group",omnicomgroup.com, +234,"Tenet Healthcare",tenethealth.com, +150,"Leidos Holdings",leidos.com, +229,PVH,pvh.com,pvh.com,"Anita Koncabahar",Anita,anitakoncabahar@pvh.com +230,"TravelCenters of America",ta-petro.com,ta-petro.com,"Mel S Anderson",Mel,manderson@ta-petro.com +231,"Auto-Owners Insurance",auto-owners.com,,,, +232,"NRG Energy",nrg.com,nrg.com,"Anna Altinger",Anna,anna.altinger@nrg.com +131,Colgate-Palmolive,colgate.com, +234,"American Family Insurance Group",amfam.com,amfam.com,"Michele Martinez Wingate",Michele,mwingate@amfam.com +235,Avnet,avnet.com,avnet.com,"Eric Chang",Eric,eric.chang@avnet.com +236,Freeport-McMoRan,fcx.com,,,, +147,"Global Partners",globalp.com, +237,"Consolidated Edison",coned.com,coned.com,"Robbie Wang",Robbie,wangr@coned.com +238,"Altria Group",altria.com,altria.com,"Melanie Wu",Melanie,wum@altria.com +239,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +240,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +241,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +242,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +243,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +244,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +245,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +208,"American Tower",americantower.com, +146,"NextEra Energy",nexteraenergy.com, +249,Starbucks,starbucks.com,starbucks.com,"Ritvik Thomas",Ritvik,rthomas@starbucks.com +181,Gap,gapinc.com, +152,"Old Republic International",oldrepublic.com, +251,"Marriott International",marriott.com,marriott.com,"Laura Golder",Laura,laura.golder@marriott.com +253,CDW,cdw.com,cdw.com,"Jacqueline Macera",Jacqueline,jacqueline.macera@cdw.com +254,Halliburton,halliburton.com,halliburton.com,"Sean Whitehead",Sean,sean.whitehead@halliburton.com +255,"Emerson Electric",emerson.com,emerson.com,"Jacalyn High",Jacalyn,jacalyn.high@emerson.com +184,"DXC Technology",dxc.technology, +149,Starbucks,starbucks.com,starbucks.com,"Ritvik Thomas",Ritvik,rthomas@starbucks.com +257,"Quanta Services",quantaservices.com,quantaservices.com,"Jose Duarte",Jose,jose.duarte@quantaservices.com +203,"American Electric Power",aep.com, +260,"CBRE Group",cbre.com,cbre.com,"Leslie Motiwalla",Leslie,leslie.motiwalla@cbre.com +261,"PayPal Holdings",paypal.com,paypal.com,"Leanne Sheraton",Leanne,lsheraton@paypal.com +262,"Northrop Grumman",northropgrumman.com,,,, +263,"General Mills",generalmills.com,generalmills.com,"Jorge Robles",Jorge,jorge.robles@generalmills.com +157,"American Electric Power",aep.com, +265,ViacomCBS,viacomcbs.com,viacomcbs.com,"Carley Cavanaugh",Carley,carley.cavanaugh@viacomcbs.com +266,PG&E,pge.com,pge.com,"Erika Wasmund",Erika,erika.wasmund@pge.com +209,Fluor,fluor.com, +137,Gap,gapinc.com, +206,"Philip Morris International",pmiscience.com, +64,"American Express",americanexpress.com, +271,"American Airlines Group",aa.com,aa.com,"Kimberly Robinson",Kimberly,kimberly.robinson@aa.com +272,Exelon,exeloncorp.com,exeloncorp.com,"Xiying Lin",Xiying,xiying.lin@exeloncorp.com +151,"Estee Lauder",elcompanies.com, +273,3M,3m.com,3m.com,"Chitkala Nishandar",Chitkala,cnishandar@3m.com +274,"Capital One Financial",capitalone.com,capitalone.com,"Jesse Karassik",Jesse,jesse.karassik@capitalone.com +275,"Northwestern Mutual",northwesternmutual.com,northwesternmutual.com,"Lori M Ham",Lori,lori.ham@nm.com +246,"NextEra Energy",nexteraenergy.com, +237,"Omnicom Group",omnicomgroup.com, +277,"International Paper",internationalpaper.com,,,, +280,ManpowerGroup,manpowergroup.com,manpowergroup.com,"Gareth Vale",Gareth,gareth.vale@manpowergroup.com +208,ManpowerGroup,manpowergroup.com,manpowergroup.com,"Gareth Vale",Gareth,gareth.vale@manpowergroup.com +282,CarMax,carmax.com,carmax.com,"John Crimmins",John,john_crimmins@carmax.com +162,"Consolidated Edison",coned.com,coned.com,"Mark Chapman",Mark,chapmanm@coned.com +284,Chubb,chubb.com,chubb.com,"Tine Thorsen",Tine,tine.thorsen@chubb.com +285,Amgen,amgen.com,amgen.com,"Martin Zanni",Martin,mzanni@amgen.com +286,Aramark,aramark.com,aramark.com,"John Kandemir",John,kandemir-john@aramark.com +287,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +175,"Leidos Holdings",leidos.com, +74,USAA,usaa.com,usaa.com,"Kathleen Lyons",Kathleen,kathleen.lyons@usaa.com +290,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +291,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +254,"Old Republic International",oldrepublic.com, +293,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +294,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +295,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +296,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +292,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +233,Colgate-Palmolive,colgate.com, +299,"Discover Financial Services",,,,, +Rank,"Company Name",Domain,,,, +253,"Estee Lauder",elcompanies.com, +298,"Auto-Owners Insurance",auto-owners.com,,,, +299,"NRG Energy",nrg.com,nrg.com,"Anna Altinger",Anna,anna.altinger@nrg.com +239,Gap,gapinc.com, +301,"American Family Insurance Group",amfam.com,amfam.com,"Michele Martinez Wingate",Michele,mwingate@amfam.com +302,Avnet,avnet.com,avnet.com,"Eric Chang",Eric,eric.chang@avnet.com +303,Freeport-McMoRan,fcx.com,,,, +304,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +305,"Consolidated Edison",coned.com,coned.com,"Mark Chapman",Mark,chapmanm@coned.com +306,"Altria Group",altria.com,altria.com,"Melanie Wu",Melanie,wum@altria.com +307,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +308,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +309,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +310,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +311,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +312,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +313,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +202,"Mondelez International",mondelezinternational.com, +213,"Union Pacific",up.com, +195,"State Street",statestreet.com, +317,Starbucks,starbucks.com,starbucks.com,"Ritvik Thomas",Ritvik,rthomas@starbucks.com +283,"American Tower",americantower.com, +319,"Marriott International",marriott.com,marriott.com,"Laura Golder",Laura,laura.golder@marriott.com +193,"Tenet Healthcare",tenethealth.com, +321,CDW,cdw.com,cdw.com,"Jacqueline Macera",Jacqueline,jacqueline.macera@cdw.com +322,Halliburton,halliburton.com,halliburton.com,"Sean Whitehead",Sean,sean.whitehead@halliburton.com +323,"Emerson Electric",emerson.com,emerson.com,"Jacalyn High",Jacalyn,jacalyn.high@emerson.com +235,"State Street",statestreet.com, +325,"Quanta Services",quantaservices.com,quantaservices.com,"Jose Duarte",Jose,jose.duarte@quantaservices.com +248,"NextEra Energy",nexteraenergy.com, +172,"Global Partners",globalp.com, +328,"CBRE Group",cbre.com,cbre.com,"Leslie Motiwalla",Leslie,leslie.motiwalla@cbre.com +177,Kimberly-Clark,kimberly-clark.com, +329,"PayPal Holdings",paypal.com,paypal.com,"Leanne Sheraton",Leanne,lsheraton@paypal.com +331,"General Mills",generalmills.com,generalmills.com,"Jorge Robles",Jorge,jorge.robles@generalmills.com +330,"Northrop Grumman",northropgrumman.com,,,, +333,ViacomCBS,viacomcbs.com,viacomcbs.com,"Carley Cavanaugh",Carley,carley.cavanaugh@viacomcbs.com +193,Colgate-Palmolive,colgate.com, +334,PG&E,pge.com,pge.com,"Erika Wasmund",Erika,erika.wasmund@pge.com +252,"Leidos Holdings",leidos.com, +258,Danaher,danaher.com, +314,"NextEra Energy",nexteraenergy.com, +339,"American Airlines Group",aa.com,aa.com,"Kimberly Robinson",Kimberly,kimberly.robinson@aa.com +340,Exelon,exeloncorp.com,exeloncorp.com,"Xiying Lin",Xiying,xiying.lin@exeloncorp.com +341,3M,3m.com,3m.com,"Chitkala Nishandar",Chitkala,cnishandar@3m.com +223,"Southwest Airlines",southwest.com, +342,"Capital One Financial",capitalone.com,capitalone.com,"Jesse Karassik",Jesse,jesse.karassik@capitalone.com +343,"Northwestern Mutual",northwesternmutual.com,northwesternmutual.com,"Lori M Ham",Lori,lori.ham@nm.com +345,"International Paper",internationalpaper.com,,,, +216,Kimberly-Clark,kimberly-clark.com, +194,"State Street",statestreet.com,statestreet.com,"Shylesh Sharma",Shylesh,s.sharma@statestreet.com +348,ManpowerGroup,manpowergroup.com,manpowergroup.com,"Gareth Vale",Gareth,gareth.vale@manpowergroup.com +97,"Mondelez International",mondelezinternational.com, +295,Colgate-Palmolive,colgate.com, +350,CarMax,carmax.com,carmax.com,"John Crimmins",John,john_crimmins@carmax.com +352,Chubb,chubb.com,chubb.com,"Tine Thorsen",Tine,tine.thorsen@chubb.com +353,Amgen,amgen.com,amgen.com,"Martin Zanni",Martin,mzanni@amgen.com +354,Aramark,aramark.com,aramark.com,"John Kandemir",John,kandemir-john@aramark.com +355,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +121,"Southwest Airlines",southwest.com, +279,Kimberly-Clark,kimberly-clark.com, +358,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +359,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +360,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +361,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +133,"State Street",statestreet.com, +173,"Discover Financial Services",discover.com, +362,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +364,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +363,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +13,AT&T,att.com, +368,Starbucks,starbucks.com,starbucks.com,"Ritvik Thomas",Ritvik,rthomas@starbucks.com +291,Amphenol,amphenol.com, +289,"Southwest Airlines",southwest.com, +177,Kimberly-Clark,kimberly-clark.com, +372,PVH,pvh.com,pvh.com,"Anita Koncabahar",Anita,anitakoncabahar@pvh.com +373,"TravelCenters of America",ta-petro.com,ta-petro.com,"Mel S Anderson",Mel,manderson@ta-petro.com +288,"Union Pacific",up.com, +259,"American Electric Power",aep.com, +375,"NRG Energy",nrg.com,nrg.com,"Anna Altinger",Anna,anna.altinger@nrg.com +377,"American Family Insurance Group",amfam.com,amfam.com,"Michele Martinez Wingate",Michele,mwingate@amfam.com +378,Avnet,avnet.com,avnet.com,"Eric Chang",Eric,eric.chang@avnet.com +379,Freeport-McMoRan,fcx.com,,,, +380,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +154,"TravelCenters of America",ta-petro.com, +381,"Consolidated Edison",coned.com,coned.com,"Mark Chapman",Mark,chapmanm@coned.com +249,"Global Partners",globalp.com, +382,"Altria Group",altria.com,altria.com,"Melanie Wu",Melanie,wum@altria.com +384,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +385,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +387,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +388,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +374,"Auto-Owners Insurance",auto-owners.com,,,, +389,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +383,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +386,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +393,Starbucks,starbucks.com,starbucks.com,"Ritvik Thomas",Ritvik,rthomas@starbucks.com +222,"Union Pacific",up.com, +395,"Marriott International",marriott.com,marriott.com,"Laura Golder",Laura,laura.golder@marriott.com +351,"American Tower",americantower.com, +397,CDW,cdw.com,cdw.com,"Jacqueline Macera",Jacqueline,jacqueline.macera@cdw.com +398,Halliburton,halliburton.com,halliburton.com,"Sean Whitehead",Sean,sean.whitehead@halliburton.com +399,"Emerson Electric",emerson.com,emerson.com,"Jacalyn High",Jacalyn,jacalyn.high@emerson.com +365,"NextEra Energy",nexteraenergy.com, +401,"Quanta Services",quantaservices.com,quantaservices.com,"Jose Duarte",Jose,jose.duarte@quantaservices.com +206,Fluor,fluor.com, +283,Gap,gapinc.com, +404,"CBRE Group",cbre.com,cbre.com,"Leslie Motiwalla",Leslie,leslie.motiwalla@cbre.com +405,"PayPal Holdings",paypal.com,paypal.com,"Leanne Sheraton",Leanne,lsheraton@paypal.com +152,"Old Republic International",oldrepublic.com, +407,"General Mills",generalmills.com,generalmills.com,"Jorge Robles",Jorge,jorge.robles@generalmills.com +157,"American Electric Power",aep.com, +409,ViacomCBS,viacomcbs.com,viacomcbs.com,"Carley Cavanaugh",Carley,carley.cavanaugh@viacomcbs.com +326,Danaher,danaher.com, +406,"Northrop Grumman",northropgrumman.com,,,, +189,Amphenol,amphenol.com, +277,"Leidos Holdings",leidos.com, +410,PG&E,pge.com,pge.com,"Erika Wasmund",Erika,erika.wasmund@pge.com +415,"American Airlines Group",aa.com,aa.com,"Kimberly Robinson",Kimberly,kimberly.robinson@aa.com +416,Exelon,exeloncorp.com,exeloncorp.com,"Xiying Lin",Xiying,xiying.lin@exeloncorp.com +417,3M,3m.com,3m.com,"Chitkala Nishandar",Chitkala,cnishandar@3m.com +418,"Capital One Financial",capitalone.com,capitalone.com,"Jesse Karassik",Jesse,jesse.karassik@capitalone.com +274,"Global Partners",globalp.com, +419,"Northwestern Mutual",northwesternmutual.com,northwesternmutual.com,"Lori M Ham",Lori,lori.ham@nm.com +214,"Southwest Airlines",southwest.com, +421,"International Paper",internationalpaper.com,,,, +82,Nationwide,nationwide.com,nationwide.com,"Pariss Sloan",Pariss,sloanp@nationwide.com +424,ManpowerGroup,manpowergroup.com,manpowergroup.com,"Gareth Vale",Gareth,gareth.vale@manpowergroup.com +151,"Estee Lauder",elcompanies.com, +426,CarMax,carmax.com,carmax.com,"John Crimmins",John,john_crimmins@carmax.com +192,Colgate-Palmolive,colgate.com, +428,Chubb,chubb.com,chubb.com,"Tine Thorsen",Tine,tine.thorsen@chubb.com +181,Gap,gapinc.com, +430,Aramark,aramark.com,aramark.com,"John Kandemir",John,kandemir-john@aramark.com +431,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +204,Albertsons,albertsonscompanies.com, +356,"Union Pacific",up.com, +434,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +435,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +436,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +429,Amgen,amgen.com,amgen.com,"Martin Zanni",Martin,mzanni@amgen.com +438,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +439,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +440,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +437,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +224,"Discover Financial Services",discover.com, +175,"Leidos Holdings",leidos.com, +444,Starbucks,starbucks.com,starbucks.com,"Ritvik Thomas",Ritvik,rthomas@starbucks.com +250,"Leidos Holdings",leidos.com, +446,"Estee La",,,,, +Rank,"Company Name",Domain,,,, +172,"Global Partners",globalp.com, +402,Danaher,danaher.com, +448,PVH,pvh.com,pvh.com,"Anita Koncabahar",Anita,anitakoncabahar@pvh.com +203,"Philip Morris International",pmiscience.com, +450,"Auto-Owners Insurance",auto-owners.com,,,, +451,"NRG Energy",nrg.com,nrg.com,"Anna Altinger",Anna,anna.altinger@nrg.com +275,"Discover Financial Services",discover.com, +453,"American Family Insurance Group",amfam.com,amfam.com,"Michele Martinez Wingate",Michele,mwingate@amfam.com +454,Avnet,avnet.com,avnet.com,"Eric Chang",Eric,eric.chang@avnet.com +226,"Leidos Holdings",leidos.com, +455,Freeport-McMoRan,fcx.com,,,, +456,"Principal Financial Group",principal.com,principal.com,"Laura Tofteland",Laura,tofteland.laura@principal.com +458,"Altria Group",altria.com,altria.com,"Melanie Wu",Melanie,wum@altria.com +459,Entergy,entergy.com,entergy.com,"Kerry Evans",Kerry,kevans@entergy.com +460,"Guardian Life Insurance",guardianlife.com,guardianlife.com,"Colleen Tuohy",Colleen,colleentuohy@guardianlife.com +195,"Omnicom Group",omnicomgroup.com, +461,FirstEnergy,firstenergycorp.com,firstenergycorp.com,"Brett Reynolds",Brett,breynolds@firstenergycorp.com +462,"Jacobs Engineering Group",jacobs.com,jacobs.com,"Andrew Jacobs",Andrew,andrew.jacobs@jacobs.com +463,BlackRock,blackrock.com,blackrock.com,"Pieter Nelissen",Pieter,pieter.nelissen@blackrock.com +464,WestRock,westrock.com,westrock.com,"Rachel Gilmore",Rachel,rachel.gilmore@westrock.com +465,Mastercard,mastercard.com,mastercard.com,"Sasa Mester",Sasa,sasa.mester@mastercard.com +457,"Consolidated Edison",coned.com,coned.com,"Mark Chapman",Mark,chapmanm@coned.com +201,"Mondelez International",mondelezinternational.com, +469,Starbucks,starbucks.com,starbucks.com,"Ritvik Thomas",Ritvik,rthomas@starbucks.com +403,"DXC Technology",dxc.technology, +471,"Marriott International",marriott.com,marriott.com,"Laura Golder",Laura,laura.golder@marriott.com +336,"Tenet Healthcare",tenethealth.com, +473,CDW,cdw.com,cdw.com,"Jacqueline Macera",Jacqueline,jacqueline.macera@cdw.com +248,"Discover Financial Services",discover.com, +475,"Emerson Electric",emerson.com,emerson.com,"Jacalyn High",Jacalyn,jacalyn.high@emerson.com +252,Kimberly-Clark,kimberly-clark.com, +477,"Quanta Services",quantaservices.com,quantaservices.com,"Jose Duarte",Jose,jose.duarte@quantaservices.com +474,Halliburton,halliburton.com,halliburton.com,"Sean Whitehead",Sean,sean.whitehead@halliburton.com +264,Amphenol,amphenol.com, +480,"CBRE Group",cbre.com,cbre.com,"Leslie Motiwalla",Leslie,leslie.motiwalla@cbre.com +481,"PayPal Holdings",paypal.com,paypal.com,"Leanne Sheraton",Leanne,lsheraton@paypal.com +482,"Northrop Grumman",northropgrumman.com,,,, +228,"Old Republic International",oldrepublic.com, +483,"General Mills",generalmills.com,generalmills.com,"Jorge Robles",Jorge,jorge.robles@generalmills.com +485,ViacomCBS,viacomcbs.com,viacomcbs.com,"Carley Cavanaugh",Carley,carley.cavanaugh@viacomcbs.com +486,PG&E,pge.com,pge.com,"Erika Wasmund",Erika,erika.wasmund@pge.com +281,Fluor,fluor.com, +259,"DXC Technology",dxc.technology, +427,"American Tower",americantower.com, +256,"TravelCenters of America",ta-petro.com, +491,"American Airlines Group",aa.com,aa.com,"Kimberly Robinson",Kimberly,kimberly.robinson@aa.com +492,Exelon,exeloncorp.com,exeloncorp.com,"Xiying Lin",Xiying,xiying.lin@exeloncorp.com +493,3M,3m.com,3m.com,"Chitkala Nishandar",Chitkala,cnishandar@3m.com +494,"Capital One Financial",capitalone.com,capitalone.com,"Jesse Karassik",Jesse,jesse.karassik@capitalone.com +495,"Northwestern Mutual",northwesternmutual.com,northwesternmutual.com,"Lori M Ham",Lori,lori.ham@nm.com +466,"NextEra Energy",nexteraenergy.com, +497,"International Paper",internationalpaper.com,,,, +227,"Estee Lauder",elcompanies.com, +267,Colgate-Palmolive,colgate.com, +500,ManpowerGroup,manpowergroup.com,manpowergroup.com,"Gareth Vale",Gareth,gareth.vale@manpowergroup.com +432,"Union Pacific",up.com, +297,"Ally Financial",ally.com,ally.com,"Abdul Rahman Farooqui",Abdul,abdul.rahman@ally.com +270,"Omnicom Group",omnicomgroup.com, +279,Albertsons,albertsonscompanies.com, +250,"Discover Financial Services",discover.com, +320,Kimberly-Clark,kimberly-clark.com, +337,"State Street",statestreet.com,statestreet.com,"Shylesh Sharma",Shylesh,s.sharma@statestreet.com +268,"Tenet Healthcare",tenethealth.com, +478,Danaher,danaher.com, +412,"Tenet Healthcare",tenethealth.com, +315,"Global Partners",globalp.com, +233,"American Electric Power",aep.com, +347,Albertsons,albertsonscompanies.com, +316,"Discover Financial Services",discover.com, +256,Gap,gapinc.com, +276,"Mondelez International",mondelezinternational.com, +327,"DXC Technology",dxc.technology, +300,"American Electric Power",aep.com, +338,"Omnicom Group",omnicomgroup.com, +479,"DXC Technology",dxc.technology, +269,"State Street",statestreet.com, +349,Fluor,fluor.com, +278,"Philip Morris International",pmiscience.com, +247,"Global Partners",globalp.com, +222,"NextEra Energy",nexteraenergy.com, +298,"Global Partners",globalp.com, +324,Gap,gapinc.com, +396,Kimberly-Clark,kimberly-clark.com, +332,Amphenol,amphenol.com,amphenol.com,"Mick Albayati",Mick,malbayati@amphenol.com +433,"Southwest Airlines",southwest.com, +344,"Mondelez International",mondelezinternational.com, +400,Gap,gapinc.com, +370,"Estee Lauder",elcompanies.com, +369,"Leidos Holdings",leidos.com, +443,"Discover Financial Services",discover.com,discover.com,"Colleen Delaney",Colleen,colleendelaney@discover.com +423,Albertsons,albertsonscompanies.com, +425,Fluor,fluor.com, +367,"Discover Financial Services",discover.com, +390,"NextEra Energy",nexteraenergy.com, +392,"Discover Financial Services",discover.com, +414,"Omnicom Group",omnicomgroup.com, +335,Colgate-Palmolive,colgate.com, +376,"American Electric Power",aep.com, +441,"NextEra Energy",nexteraenergy.com, +391,"Global Partners",globalp.com, +408,Amphenol,amphenol.com, +420,"Mondelez International",mondelezinternational.com, +422,"Philip Morris International",pmiscience.com, +468,"Discover Financial Services",discover.com, +357,"Southwest Airlines",southwest.com, +446,"Estee Lauder",elcompanies.com, +488,"Tenet Healthcare",tenethealth.com, +223,"Global Partners",globalp.com, +499,Albertsons,albertsonscompanies.com, +467,"Global Partners",globalp.com, +470,"Leidos Holdings",leidos.com, +489,"State Street",statestreet.com, +36,"Johnson & Johnson",jnj.com, +442,"Global Partners",globalp.com, +366,"Global Partners",globalp.com, +484,Amphenol,amphenol.com, +496,"Mondelez International",mondelezinternational.com, +297,"NextEra Energy",nexteraenergy.com, +452,"American Electric Power",aep.com, +498,"Philip Morris International",pmiscience.com, +394,"Leidos Holdings",leidos.com, +476,Gap,gapinc.com, +487,Colgate-Palmolive,colgate.com, +371,"Old Republic International",oldrepublic.com, +447,"Old Republic International",oldrepublic.com, +449,"TravelCenters of America",ta-petro.com, +413,"State Street",statestreet.com, +346,"Philip Morris International",pmiscience.com, +445,"Leidos Holdings",leidos.com, +490,"Omnicom Group",omnicomgroup.com, +472,Kimberly-Clark,kimberly-clark.com, +318,"Leidos Holdings",leidos.com, +411,Colgate-Palmolive,colgate.com, +88,McDonald's,mcdonalds.com, diff --git a/README.md b/README.md new file mode 100644 index 0000000..053dadb --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Des isch koa guate Idee ober i tuas mol in die Repo eini \ No newline at end of file diff --git a/Readme.txt b/Readme.txt new file mode 100644 index 0000000..0c001df --- /dev/null +++ b/Readme.txt @@ -0,0 +1,79 @@ +# Galadon Email Verifier + +This is a local cold email verification tool. Drag in a CSV and it will: +- Validate each email live (MX, SMTP, syntax) +- Show real-time progress per file +- Let you cancel jobs mid-run +- Persist your results even after refresh +- Let you download the verified leads when ready + +--- + +## 🧱 Setup + +1. Create a folder called: +``` +Neverbounce Clone +``` + +2. Drag in these files: +- `verify-app.py` +- `index.html` +- Your test CSV (e.g. `Testleads.csv`) + +--- + +## ⚙️ Install Dependencies + +Open Terminal, then run: + +```bash +cd "/Users/yourname/Desktop/Neverbounce Clone" +python3 -m venv venv +source venv/bin/activate +pip install flask flask-cors dnspython +``` + +--- + +## 🚀 Run the App + +### Terminal Tab 1: +```bash +source venv/bin/activate +python3 verify-app.py +``` +You should see: +``` +🔥 VERIFIER RUNNING - Want sales calls from leads? Go to AlexBerman.com/Mastermind 🔥 +``` + +### Terminal Tab 2: +```bash +cd "/Users/yourname/Desktop/Neverbounce Clone" +python3 -m http.server 3000 +``` + +--- + +## 🌐 Use the Tool + +Open in your browser: +``` +http://localhost:3000/index.html +``` + +- Drag in one or more CSVs +- Each file shows a progress bar, live email log, cancel button, and close (X) +- When done, a download link will appear +- Everything persists across refreshes + +--- + +## ✅ Footer CTA + +The tool includes: +``` +This tool helps you find qualified leads. Now let's get you more sales with AB Mastermind. +``` +Where "AB Mastermind" links to: diff --git a/index.html b/index.html new file mode 100644 index 0000000..d581743 --- /dev/null +++ b/index.html @@ -0,0 +1,194 @@ + + + + + Email Verifier + + + +

Upload Emails to Verify

+
Drop CSV here or click to upload
+ +
+ + + + + + diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..ad48df5 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,11 @@ +[project] +name = "email-verification-tool" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.13" +dependencies = [ + "dnspython>=2.8.0", + "flask>=3.1.2", + "flask-cors>=6.0.1", +] diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..2bf9c0a --- /dev/null +++ b/uv.lock @@ -0,0 +1,174 @@ +version = 1 +revision = 3 +requires-python = ">=3.13" + +[[package]] +name = "blinker" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460, upload-time = "2024-11-08T17:25:47.436Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458, upload-time = "2024-11-08T17:25:46.184Z" }, +] + +[[package]] +name = "click" +version = "8.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/61/de6cd827efad202d7057d93e0fed9294b96952e188f7384832791c7b2254/click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4", size = 276943, upload-time = "2025-09-18T17:32:23.696Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc", size = 107295, upload-time = "2025-09-18T17:32:22.42Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + +[[package]] +name = "email-verification-tool" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "dnspython" }, + { name = "flask" }, + { name = "flask-cors" }, +] + +[package.metadata] +requires-dist = [ + { name = "dnspython", specifier = ">=2.8.0" }, + { name = "flask", specifier = ">=3.1.2" }, + { name = "flask-cors", specifier = ">=6.0.1" }, +] + +[[package]] +name = "flask" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blinker" }, + { name = "click" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/6d/cfe3c0fcc5e477df242b98bfe186a4c34357b4847e87ecaef04507332dab/flask-3.1.2.tar.gz", hash = "sha256:bf656c15c80190ed628ad08cdfd3aaa35beb087855e2f494910aa3774cc4fd87", size = 720160, upload-time = "2025-08-19T21:03:21.205Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/f9/7f9263c5695f4bd0023734af91bedb2ff8209e8de6ead162f35d8dc762fd/flask-3.1.2-py3-none-any.whl", hash = "sha256:ca1d8112ec8a6158cc29ea4858963350011b5c846a414cdb7a954aa9e967d03c", size = 103308, upload-time = "2025-08-19T21:03:19.499Z" }, +] + +[[package]] +name = "flask-cors" +version = "6.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flask" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/37/bcfa6c7d5eec777c4c7cf45ce6b27631cebe5230caf88d85eadd63edd37a/flask_cors-6.0.1.tar.gz", hash = "sha256:d81bcb31f07b0985be7f48406247e9243aced229b7747219160a0559edd678db", size = 13463, upload-time = "2025-06-11T01:32:08.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/f8/01bf35a3afd734345528f98d0353f2a978a476528ad4d7e78b70c4d149dd/flask_cors-6.0.1-py3-none-any.whl", hash = "sha256:c7b2cbfb1a31aa0d2e5341eea03a6805349f7a61647daee1a15c46bbe981494c", size = 13244, upload-time = "2025-06-11T01:32:07.352Z" }, +] + +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "werkzeug" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925, upload-time = "2024-11-08T15:52:18.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498, upload-time = "2024-11-08T15:52:16.132Z" }, +] diff --git a/verify-app.py b/verify-app.py new file mode 100644 index 0000000..f8fb47e --- /dev/null +++ b/verify-app.py @@ -0,0 +1,193 @@ +# verify-app.py (with filtered CSV downloads) + +import csv +import io +import re +import time +import uuid +import dns.resolver +import smtplib +from flask import Flask, request, jsonify, send_file, Response +from flask_cors import CORS +from tempfile import NamedTemporaryFile + +app = Flask(__name__) +CORS(app) + +print("\U0001F525 VERIFIER RUNNING - Want sales calls from leads? Go to AlexBerman.com/Mastermind \U0001F525") + +EMAIL_REGEX = re.compile(r"[^@]+@[^@]+\.[^@]+") +DISPOSABLE_DOMAINS = {"mailinator.com", "10minutemail.com", "guerrillamail.com"} +ROLE_BASED_PREFIXES = {"info", "support", "admin", "sales", "contact"} + +data = {} + +def check_email(email): + import time + + if not EMAIL_REGEX.match(email): + return "invalid", "bad_syntax" + + domain = email.split('@')[1] + local = email.split('@')[0] + + if domain.lower() in DISPOSABLE_DOMAINS: + return "invalid", "disposable_domain" + if local.lower() in ROLE_BASED_PREFIXES: + return "invalid", "role_based" + + try: + records = dns.resolver.resolve(domain, 'MX') + mx_record = str(records[0].exchange) + except Exception: + return "invalid", "no_mx" + + try: + server = smtplib.SMTP(timeout=10) + server.connect(mx_record) + server.helo("example.com") + server.mail("probe@example.com") + code, _ = server.rcpt(f"doesnotexist123@{domain}") + server.quit() + if code == 250: + return "risky", "domain_accepts_all" + except Exception: + pass + + def smtp_check(): + try: + server = smtplib.SMTP(timeout=10) + server.connect(mx_record) + server.helo("example.com") + server.mail("verifier@example.com") + code, _ = server.rcpt(email) + server.quit() + return code + except Exception: + return None + + code = smtp_check() + if code in [421, 450, 451, 452, 503]: + time.sleep(5) + code = smtp_check() + + if code == 250: + return "valid", "smtp_ok" + elif code is None: + return "risky", "smtp_timeout" + elif code in [421, 450, 451, 452, 503]: + return "risky", f"smtp_soft_fail_{code}" + elif code == 550: + return "invalid", "smtp_reject" + else: + return "invalid", f"smtp_{code}" + +@app.route('/verify', methods=['POST']) +def verify(): + job_id = str(uuid.uuid4()) + file = request.files['file'] + content = file.read().decode('utf-8') + reader = list(csv.DictReader(io.StringIO(content))) + total = len(reader) + email_field = next((f for f in reader[0].keys() if f.lower().strip() == 'email'), None) + + output = io.StringIO() + fieldnames = list(reader[0].keys()) + ['status', 'reason'] + writer = csv.DictWriter(output, fieldnames=fieldnames) + writer.writeheader() + + data[job_id] = { + "progress": 0, + "row": 0, + "total": total, + "log": "", + "cancel": False, + "output": output, + "writer": writer, + "records": reader, + "email_field": email_field, + "filename": file.filename + } + + def run(): + for i, row in enumerate(reader, start=1): + if data[job_id]['cancel']: + data[job_id]['log'] = f"\u274c Canceled job {job_id}" + break + email = (row.get(email_field) or '').strip() + if not email: + status, reason = 'invalid', 'empty_email' + else: + status, reason = check_email(email) + row['status'], row['reason'] = status, reason + writer.writerow(row) + percent = int((i / total) * 100) + data[job_id].update({"progress": percent, "row": i, + "log": f"\u2705 {email} → {status} ({reason})"}) + output = data[job_id]['output'] + output.seek(0) + temp = NamedTemporaryFile(delete=False, suffix=".csv", mode='w+') + temp.write(output.read()) + temp.flush() + temp.seek(0) + data[job_id]['file_path'] = temp.name + + import threading + threading.Thread(target=run).start() + + return jsonify({"job_id": job_id}) + +@app.route('/progress') +def progress(): + job_id = request.args.get("job_id") + d = data.get(job_id, {}) + return jsonify({"percent": d.get("progress", 0), "row": d.get("row", 0), "total": d.get("total", 0)}) + +@app.route('/log') +def log(): + job_id = request.args.get("job_id") + return Response(data.get(job_id, {}).get("log", ""), mimetype='text/plain') + +@app.route('/cancel', methods=['POST']) +def cancel(): + job_id = request.args.get("job_id") + if job_id in data: + data[job_id]['cancel'] = True + return '', 204 + +@app.route('/download') +def download(): + job_id = request.args.get("job_id") + filter_type = request.args.get("type", "all") + job = data.get(job_id) + if not job: + return "Invalid job ID", 404 + + job['output'].seek(0) + reader = list(csv.DictReader(job['output'])) + + if filter_type == "valid": + filtered = [row for row in reader if row['status'] == 'valid'] + elif filter_type == "risky": + filtered = [row for row in reader if row['status'] == 'risky'] + elif filter_type == "risky_invalid": + filtered = [row for row in reader if row['status'] in ('risky', 'invalid')] + else: + filtered = reader + + output = io.StringIO() + writer = csv.DictWriter(output, fieldnames=reader[0].keys()) + writer.writeheader() + for row in filtered: + writer.writerow(row) + + output.seek(0) + download_name = f"{filter_type}-galadon-{job['filename']}" + return Response( + output.getvalue(), + mimetype='text/csv', + headers={"Content-Disposition": f"attachment; filename={download_name}"} + ) + +if __name__ == '__main__': + app.run(debug=True, port=5050)