← back to Sdcc Awards

cypressaward/scraper/add-administrators-firms.js

237 lines

require('dotenv').config();
const { createClient } = require('@supabase/supabase-js');
const crypto = require('crypto');

// Supabase configuration
const supabaseUrl = process.env.SUPABASE_URL;
const supabaseKey = process.env.SUPABASE_ANON_KEY;
const supabase = createClient(supabaseUrl, supabaseKey);

// Generate unique hash for deduplication
function generateHash(data) {
  return crypto.createHash('md5').update(JSON.stringify(data)).digest('hex');
}

async function addAdministratorsAndFirms() {
  console.log('Adding class action administrators and law firms...');
  
  // Class Action Administrators
  const administrators = [
    {
      name: 'Angeion Group',
      ranking: 'Class Action Administrator',
      location: 'Philadelphia, PA',
      size: 'Settlement Administrator',
      practice_areas: 'Class action notice and distributions, cy pres capable',
      revenue: 'Major settlement administrator',
      website: 'https://www.angeiongroup.com',
      source: 'Cy Pres Administrator',
      data_type: 'law_firm'
    },
    {
      name: 'Epiq Class Action & Claims Solutions',
      ranking: 'Global Administrator',
      location: 'Portland, OR',
      size: 'Settlement Administrator',
      practice_areas: 'Global class action administration; absorbed Garden City Group and Heffler Claims',
      revenue: 'Largest settlement administrator',
      website: 'https://www.epiqglobal.com',
      source: 'Cy Pres Administrator',
      data_type: 'law_firm'
    },
    {
      name: 'Rust Consulting',
      ranking: 'Class Action Administrator',
      location: 'Minneapolis, MN',
      size: 'Settlement Administrator',
      practice_areas: 'Consumer, antitrust, securities class action administration',
      revenue: 'Major settlement administrator',
      website: 'https://www.rustconsulting.com',
      source: 'Cy Pres Administrator',
      data_type: 'law_firm'
    },
    {
      name: 'JND Legal Administration',
      ranking: 'Class Action Administrator',
      location: 'Seattle, WA',
      size: 'Settlement Administrator',
      practice_areas: 'Large complex settlements administration',
      revenue: 'Major settlement administrator',
      website: 'https://www.jndla.com',
      source: 'Cy Pres Administrator',
      data_type: 'law_firm'
    },
    {
      name: 'KCC (Kurtzman Carson Consultants)',
      ranking: 'Class Action Administrator',
      location: 'El Segundo, CA',
      size: 'Settlement Administrator',
      practice_areas: 'Class action and bankruptcy administration',
      revenue: 'Major settlement administrator',
      website: 'https://www.kccllc.com',
      source: 'Cy Pres Administrator',
      data_type: 'law_firm'
    },
    {
      name: 'Simpluris',
      ranking: 'Class Action Administrator',
      location: 'Burlingame, CA',
      size: 'Settlement Administrator',
      practice_areas: 'Wage & hour, consumer, antitrust administration',
      revenue: 'Settlement administrator',
      website: 'https://www.simpluris.com',
      source: 'Cy Pres Administrator',
      data_type: 'law_firm'
    },
    {
      name: 'American Legal Claim Services (ALCS)',
      ranking: 'Class Action Administrator',
      location: 'Jacksonville, FL',
      size: 'Settlement Administrator',
      practice_areas: 'Class action claims administration',
      revenue: 'Settlement administrator',
      website: 'https://www.americanlegal.com',
      source: 'Cy Pres Administrator',
      data_type: 'law_firm'
    },
    {
      name: 'Analytics Consulting LLC',
      ranking: 'Class Action Administrator',
      location: 'Chantilly, VA',
      size: 'Settlement Administrator',
      practice_areas: 'Administration and noticing services',
      revenue: 'Settlement administrator',
      website: 'https://www.analyticsllc.com',
      source: 'Cy Pres Administrator',
      data_type: 'law_firm'
    },
    {
      name: 'First Class, Inc.',
      ranking: 'Class Action Administrator',
      location: 'Chicago, IL',
      size: 'Settlement Administrator',
      practice_areas: 'Claims administration and noticing',
      revenue: 'Settlement administrator',
      website: 'https://www.firstclassinc.com',
      source: 'Cy Pres Administrator',
      data_type: 'law_firm'
    },
    {
      name: 'CAC Services (Class Action Claims Services)',
      ranking: 'Boutique Administrator',
      location: 'Los Angeles, CA',
      size: 'Settlement Administrator',
      practice_areas: 'Boutique class action administration',
      revenue: 'Boutique administrator',
      website: 'http://www.cacservices.com',
      source: 'Cy Pres Administrator',
      data_type: 'law_firm'
    },
    {
      name: 'SSI (Settlement Services, Inc.)',
      ranking: 'Boutique Administrator',
      location: 'New York, NY',
      size: 'Settlement Administrator',
      practice_areas: 'Boutique settlement administration',
      revenue: 'Boutique administrator',
      website: 'http://www.settlementservicesinc.com',
      source: 'Cy Pres Administrator',
      data_type: 'law_firm'
    },
    {
      name: 'Kinsella Media',
      ranking: 'Notice Expert',
      location: 'Washington, DC',
      size: 'Notice Specialist',
      practice_areas: 'Notice program design; often paired with administrators',
      revenue: 'Notice specialist',
      website: 'https://www.kinsellamedia.com',
      source: 'Cy Pres Notice Expert',
      data_type: 'law_firm'
    }
  ];

  // Additional Law Firms with Cy Pres Activity
  const additionalLawFirms = [
    {
      name: 'Keller Rohrback LLP',
      ranking: 'Complex Litigation Firm',
      location: 'Seattle, WA',
      size: '90+ attorneys',
      practice_areas: 'Privacy, antitrust, consumer class actions with cy pres distributions',
      revenue: 'Significant settlements',
      website: 'https://www.kellerrohrback.com',
      source: 'Cy Pres Specialist',
      data_type: 'law_firm'
    },
    {
      name: 'Scott+Scott Attorneys at Law LLP',
      ranking: 'Securities & Antitrust Firm',
      location: 'Colchester, CT',
      size: '60+ attorneys',
      practice_areas: 'Antitrust and securities class actions with cy pres provisions',
      revenue: 'Major recoveries',
      website: 'https://www.scott-scott.com',
      source: 'Cy Pres Specialist',
      data_type: 'law_firm'
    },
    {
      name: 'Keller Lenkner / Keller Postman',
      ranking: 'Consumer Rights Firm',
      location: 'Chicago, IL',
      size: '50+ attorneys',
      practice_areas: 'Consumer and privacy class actions with cy pres awards',
      revenue: 'Growing practice',
      website: 'https://www.kellerpostman.com',
      source: 'Cy Pres Specialist',
      data_type: 'law_firm'
    },
    {
      name: 'Quinn Emanuel Urquhart & Sullivan LLP',
      ranking: 'Global Litigation Powerhouse',
      location: 'Los Angeles, CA',
      size: '900+ attorneys',
      practice_areas: 'Complex litigation including class actions with cy pres negotiations',
      revenue: '$1.4B+ annual revenue',
      website: 'https://www.quinnemanuel.com',
      source: 'Cy Pres Negotiator',
      data_type: 'law_firm'
    }
  ];

  try {
    // Add administrators
    for (const admin of administrators) {
      admin.hash = generateHash(admin);
      const { error } = await supabase
        .from('scraped_law_firms')
        .upsert(admin, { onConflict: 'hash' });
      
      if (error) {
        console.error('Error adding administrator:', error);
      } else {
        console.log(`Added administrator: ${admin.name}`);
      }
    }
    
    // Add additional law firms
    for (const firm of additionalLawFirms) {
      firm.hash = generateHash(firm);
      const { error } = await supabase
        .from('scraped_law_firms')
        .upsert(firm, { onConflict: 'hash' });
      
      if (error) {
        console.error('Error adding law firm:', error);
      } else {
        console.log(`Added law firm: ${firm.name}`);
      }
    }
    
    console.log('Successfully added all administrators and law firms!');
  } catch (error) {
    console.error('Error:', error);
  }
}

addAdministratorsAndFirms();