Skip to main content

AdvancedFraudDetectionAPI:CompleteGuidetoIP,EmailandPhoneRiskScoring

Advanced fraud detection explained: IP, email and phone risk scoring from one API, plus how to add your own device checks and backtest on your own data.

Robby Frank

Robby Frank

CEO & Founder

January 17, 2024
42 min read
Featured image for Advanced Fraud Detection API: Complete Guide to IP, Email and Phone Risk Scoring
Table of Contents

The Critical Role of Advanced Fraud Detection in Digital Business Security

Traditional security measures are no longer sufficient against sophisticated fraudsters who use VPNs, proxies, automated bots, and synthetic identities to bypass basic validation.

The Fraud Detection Imperative

Advanced fraud detection scores several signals together, so a decision rests on how the connection, the contact details and your own account history line up rather than on any one of them. 1Lookup supplies the contact and network signals: it takes an email, a phone number and an IP address, and returns a fraud score with risk signals. Device fingerprinting and behavioral analysis are separate techniques that a team can add alongside it with its own tooling; 1Lookup does not provide them. No accuracy figure appears in this guide, ours or a competitor's, because fraud rates differ by orders of magnitude between businesses and a number measured on somebody else's traffic tells you nothing about yours. The backtest later in this guide produces the figure that does.

This guide covers advanced fraud detection from IP geolocation and email and phone checks to real-time risk scoring, and shows where device fingerprinting and behavioral analysis fit when you add them with your own tooling.

What is Advanced Fraud Detection?

Advanced Fraud Detection Architecture

Advanced fraud detection is a multi-layered security approach that combines multiple intelligence sources to identify and prevent fraudulent activities in real-time. Unlike traditional fraud detection that relies on rules-based systems, advanced fraud detection scores several independent signals together, often with machine learning, to detect sophisticated fraud patterns.

Core Components of Advanced Fraud Detection

A complete fraud stack has several layers. 1Lookup supplies the first two: it takes an email, a phone number and an IP address, and returns a fraud score and risk signals for each. The other layers are yours to build, or to add with separate tooling.

1. IP Intelligence and Geolocation (from 1Lookup)

  • Real-time IP geolocation
  • VPN, proxy, and Tor network detection
  • A 0-100 IP fraud score with the risk factors behind it
  • ISP and network type identification

2. Email and Phone Intelligence (from 1Lookup)

  • Email deliverability, disposable and role-based flags, and a 0-100 fraud score
  • Phone number status, line type (mobile, landline or VoIP) and a risk level
  • One API key and one credit balance for all three checks

3. Device Fingerprinting and Identification (your own tooling)

  • A stable identifier built from browser and hardware attributes
  • Canvas and WebGL rendering differences used as part of that identifier
  • Spotting one device behind many accounts
  • 1Lookup does not do this: its API has no field for a device ID or a fingerprint, so this layer needs a separate client-side script and a place to store the identifiers

4. Behavioral Analysis and Pattern Recognition (your own tooling)

  • Typing cadence and pointer movement
  • Session and navigation patterns
  • Velocity: how often the same card, email, phone number or IP shows up
  • Anomaly models trained on your own history
  • 1Lookup does not collect or score any of this

5. Risk Scoring and Decision Engine (yours)

  • A combined score on a 0-100 scale, from weights you choose
  • Thresholds for approve, verify, review and decline that match your business rules
  • The reasons behind every decision logged, so a decline can be explained

6. Advanced Threat Intelligence (outside this guide's examples)

  • Shared fraud databases and known-fraudster lists
  • Synthetic identity detection
  • Account takeover pattern recognition

Fraud Detection vs Traditional Security: Understanding the Difference

While traditional security focuses on prevention through rules and signatures, advanced fraud detection emphasizes intelligence and adaptability:

Traditional Security

  • Approach: Rules-based, signature matching
  • Detection: Known threats and patterns
  • Response Time: Reactive, post-incident
  • False Positives: High due to rigid rules
  • Adaptability: Manual updates required

Advanced Fraud Detection

  • Approach: Several signals scored together
  • Detection: Known and unknown threats
  • Response Time: Real-time, predictive
  • False Positives: Depends on your thresholds, so count them with the backtest later in this guide
  • Adaptability: Self-learning and automatic updates

Best Practice: Use traditional security as a foundation, enhance with advanced fraud detection for comprehensive protection.

Why Advanced Fraud Detection Matters: The Business Impact

The Escalating Cost of Online Fraud

Financial Losses:

  • Direct Fraud Losses: The goods or funds lost on each fraudulent transaction
  • Chargeback Processing: Your processor's fee on every chargeback, on top of the lost sale
  • Recovery Costs: Staff time spent investigating each fraud case
  • Reputational Damage: Long-term revenue impact from lost trust
  • Regulatory Fines: Penalties for compliance violations, set by each regulator

Operational Inefficiencies:

  • Manual Review Burden: Staff time spent on every suspicious transaction
  • Customer Experience Degradation: Additional verification steps
  • False Positive Costs: Lost legitimate sales from overzealous fraud detection
  • Investigation Resources: Dedicated fraud teams and specialized tools

Security and Compliance Risks:

  • Account Takeover: Stolen or reused credentials let an attacker in as a legitimate customer
  • Identity Fraud: Synthetic identities mix real and invented details, so no single check catches them
  • Payment Fraud: CNP (Card Not Present) orders carry more risk than in-person payments, because the seller cannot see the card
  • Compliance Violations: GDPR and PCI DSS penalties for inadequate fraud prevention

Industry-Specific Impact Analysis

No percentages appear below, deliberately. Fraud base rates differ by orders of magnitude between these sectors and between two businesses in the same sector, so a single reduction figure would be invented rather than measured. What differs by sector is which signal carries the weight, and that is worth knowing before you evaluate anything.

E-commerce Platforms: the decisive signal is usually the mismatch set, IP country against billing country against the card's issuing country, combined with velocity on the same card, email or phone number. The expensive error is rejecting a real buyer at checkout, so weight false positives heavily.

Financial Services: signals about the device and the session dominate, because the attack is usually account takeover on a legitimate customer rather than a fake identity at the door. Those come from your own tooling; 1Lookup's part is the IP, email and phone checks around them. Regulatory constraints also mean you need the decision to be explainable, which rules out some scoring approaches regardless of their accuracy.

SaaS and Subscription Services: the attack is cheap identity creation at scale, so disposable email, VPN and datacenter connection, and phone line type do most of the work. Losses per incident are small, volume is large, and the tolerance for friction at signup is lower than anywhere else on this list.

Healthcare and Insurance: synthetic identity is the hard case, and it is hard precisely because no single signal catches it. Expect to combine identity checks, contact checks (email and phone) and your own account history, and expect a slower decision than the sectors above.

To turn any of this into numbers for your business, run the backtest described later in this guide against your own labelled history.

How Advanced Fraud Detection APIs Work

The Technical Architecture

A fraud pipeline processes several data streams, and they do not all come from the same place. This is the usual shape, with the part 1Lookup covers marked:

  1. Data Collection Layer (yours)

    • Real-time capture of the signup, login or checkout event
    • Multi-channel aggregation (web, mobile, API)
    • Secure data transmission with encryption
    • Rate limiting and abuse prevention
  2. Signal Layer

    • From 1Lookup: IP geolocation and reputation, VPN, proxy and Tor flags, disposable and role-based email flags, phone line type and carrier, and a fraud score or risk level on each
    • From your own tooling, optional: device fingerprinting, behavioral analysis, order velocity and account history
  3. Risk Assessment Framework (yours)

    • Weights that turn the signals into one score
    • Dynamic threshold calculation
    • Decision tree and rule engine processing
  4. Response and Mitigation Layer (yours)

    • Real-time decision making
    • Automated action triggers
    • Manual review queue management
    • Integration with existing security systems
  5. Learning and Adaptation Layer (yours)

    • Feedback loop from confirmed fraud outcomes
    • Performance monitoring and threshold tuning
    • A scheduled re-run of the backtest later in this guide

API Implementation Examples

Both examples send 1Lookup exactly what it takes: an email, a phone number and an IP address. Each call returns its own risk signals:

  • IP lookup: a 0-100 fraud score and VPN, proxy and Tor flags
  • Email lookup: a 0-100 fraud score and disposable and role-based flags
  • Phone lookup: number status, line type, VoIP detection and a risk level

The rule that combines them is yours. The weights below are placeholders to tune on the backtest later in this guide, not recommendations. If you also run device fingerprinting or behavioral analysis with your own tooling, pass its output in as extraRisk (a list of points and a reason, built by your own code). 1Lookup never sees that data and does not score it.

JavaScript/Node.js Implementation:

const axios = require('axios');

class FraudCheckService {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseUrl = 'https://app.1lookup.io/api/v1';
    this.riskThresholds = {
      low: 30,
      medium: 60,
      high: 80,
      critical: 90
    };
  }

  async analyzeTransaction(transactionData, context = {}) {
    // The only data sent to 1Lookup: an email, a phone number and an IP address
    const email = transactionData.email ?? transactionData.customer?.email;
    const phone = transactionData.phone ?? transactionData.customer?.phone;

    const [ip, emailResult, phoneResult] = await Promise.all([
      transactionData.ip ? this.analyzeIP(transactionData.ip) : null,
      email ? this.analyzeEmail(email) : null,
      phone ? this.analyzePhone(phone) : null
    ]);

    const intelligence = { ip, email: emailResult, phone: phoneResult };
    const analysis = this.scoreSignals(intelligence, context.extraRisk || []);
    const decision = this.makeRiskDecision(analysis);

    return {
      riskScore: analysis.riskScore,
      riskLevel: decision.riskLevel,
      reasons: analysis.reasons,
      recommendations: decision.recommendations,
      intelligence
    };
  }

  async analyzeIP(ipAddress) {
    try {
      const response = await axios.post(`${this.baseUrl}/ip`, { ip: ipAddress }, {
        headers: { 'Authorization': `Bearer ${this.apiKey}` },
        timeout: 2000
      });

      const data = response.data.data;

      return {
        country: data.insights.location.country,
        region: data.insights.location.region,
        city: data.insights.location.city,
        isp: data.insights.network.isp,
        isVpn: data.classification.service_type === 'VPN_SERVICE',
        isProxy: data.classification.connection_type === 'PROXY_SERVER',
        isTor: data.insights.security.tor_exit_node,
        riskScore: data.risk_assessment.fraud_score,
        reputation: data.insights.security.reputation_score,
        riskFactors: data.risk_assessment.risk_factors
      };
    } catch (error) {
      console.error('IP analysis failed:', error.message);
      return { error: 'IP analysis unavailable' };
    }
  }

  async analyzeEmail(email) {
    try {
      const response = await axios.post(`${this.baseUrl}/email`, { email }, {
        headers: { 'Authorization': `Bearer ${this.apiKey}` },
        timeout: 2000
      });

      const data = response.data.data;

      return {
        deliverable: data.classification.deliverability_status === 'DELIVERABLE',
        isDisposable: data.classification.provider_tier === 'DISPOSABLE',
        isRoleBased: data.classification.email_type === 'ROLE_BASED',
        riskScore: data.risk_assessment.fraud_score
      };
    } catch (error) {
      console.error('Email analysis failed:', error.message);
      return { error: 'Email analysis unavailable' };
    }
  }

  async analyzePhone(phone) {
    try {
      const response = await axios.post(`${this.baseUrl}/phone`, { phone_number: phone }, {
        headers: { 'Authorization': `Bearer ${this.apiKey}` },
        timeout: 2000
      });

      const data = response.data.data;

      return {
        numberStatus: data.classification.number_status,
        lineType: data.classification.line_type,
        isVoip: data.insights?.risk_indicators?.voip_detected || false,
        riskLevel: data.risk_assessment.risk_level
      };
    } catch (error) {
      console.error('Phone analysis failed:', error.message);
      return { error: 'Phone analysis unavailable' };
    }
  }

  scoreSignals({ ip, email, phone }, extraRisk) {
    // Example weights only: tune them on your own labelled history
    let riskScore = 0;
    const reasons = [];

    if (ip?.isVpn) {
      riskScore += 25;
      reasons.push('VPN connection');
    }

    if (ip?.isProxy) {
      riskScore += 30;
      reasons.push('Proxy connection');
    }

    if (ip?.isTor) {
      riskScore += 35;
      reasons.push('Tor exit node');
    }

    if (ip?.riskScore > 50) {
      riskScore += ip.riskScore * 0.5;
      reasons.push('High IP fraud score');
    }

    if (email?.isDisposable) {
      riskScore += 20;
      reasons.push('Disposable email');
    }

    if (email?.riskScore > 50) {
      riskScore += email.riskScore * 0.5;
      reasons.push('High email fraud score');
    }

    if (phone?.isVoip) {
      riskScore += 15;
      reasons.push('VoIP phone line');
    }

    // Signals your own systems produced, for example order velocity
    for (const signal of extraRisk) {
      riskScore += signal.points;
      reasons.push(signal.reason);
    }

    return { riskScore: Math.min(Math.round(riskScore), 100), reasons };
  }

  makeRiskDecision(analysis) {
    const score = analysis.riskScore;
    let riskLevel, recommendations;

    if (score >= this.riskThresholds.critical) {
      riskLevel = 'critical';
      recommendations = ['Block transaction', 'Flag for investigation', 'Notify security team'];
    } else if (score >= this.riskThresholds.high) {
      riskLevel = 'high';
      recommendations = ['Require additional verification', 'Limit transaction amount', 'Monitor closely'];
    } else if (score >= this.riskThresholds.medium) {
      riskLevel = 'medium';
      recommendations = ['Request additional information', 'Send verification code', 'Review manually'];
    } else {
      riskLevel = 'low';
      recommendations = ['Approve transaction', 'Log for monitoring'];
    }

    return { riskLevel, recommendations };
  }
}

// Usage example
const fraudDetector = new FraudCheckService('your-api-key');

async function processTransaction(transactionData) {
  try {
    const result = await fraudDetector.analyzeTransaction(transactionData);

    console.log('Risk Analysis:', result);

    if (result.riskLevel === 'critical') {
      // Block transaction
      return { approved: false, reason: 'High fraud risk detected' };
    }

    if (result.riskLevel === 'high') {
      // Additional verification required
      const verificationResult = await requestAdditionalVerification();
      return verificationResult;
    }

    // Approve transaction
    return { approved: true, riskScore: result.riskScore };

  } catch (error) {
    console.error('Transaction processing failed:', error);
    // Fallback to manual review
    return { approved: false, reason: 'Analysis failed - manual review required' };
  }
}

Python Implementation:

import requests
from dataclasses import dataclass
from typing import Any, Dict, List, Optional


@dataclass
class FraudAnalysisResult:
    risk_score: int
    risk_level: str
    reasons: List[str]
    recommendations: List[str]
    intelligence: Dict[str, Any]


class FraudCheckService:
    def __init__(self, api_key: str, base_url: str = "https://app.1lookup.io/api/v1"):
        self.base_url = base_url
        self.session = requests.Session()
        self.session.headers.update({
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json'
        })
        self.risk_thresholds = {
            'low': 30,
            'medium': 60,
            'high': 80,
            'critical': 90
        }

    def analyze_transaction(self, transaction_data: Dict[str, Any],
                            extra_risk: Optional[List[Dict[str, Any]]] = None) -> FraudAnalysisResult:
        """Score an email, a phone number and an IP address with 1Lookup."""

        # The only data sent to 1Lookup: an email, a phone number and an IP address
        intelligence = {}

        if transaction_data.get('ip'):
            intelligence['ip'] = self._analyze_ip(transaction_data['ip'])

        if transaction_data.get('email'):
            intelligence['email'] = self._analyze_email(transaction_data['email'])

        if transaction_data.get('phone'):
            intelligence['phone'] = self._analyze_phone(transaction_data['phone'])

        risk_score, reasons = self._score_signals(intelligence, extra_risk or [])
        risk_level, recommendations = self._make_risk_decision(risk_score)

        return FraudAnalysisResult(
            risk_score=risk_score,
            risk_level=risk_level,
            reasons=reasons,
            recommendations=recommendations,
            intelligence=intelligence
        )

    def _analyze_ip(self, ip_address: str) -> Dict[str, Any]:
        try:
            response = self.session.post(
                f'{self.base_url}/ip',
                json={'ip': ip_address},
                timeout=2
            )
            response.raise_for_status()
            data = response.json()['data']

            return {
                'country': data['insights']['location']['country'],
                'region': data['insights']['location']['region'],
                'city': data['insights']['location']['city'],
                'isp': data['insights']['network']['isp'],
                'is_vpn': data['classification'].get('service_type') == 'VPN_SERVICE',
                'is_proxy': data['classification']['connection_type'] == 'PROXY_SERVER',
                'is_tor': data['insights']['security'].get('tor_exit_node', False),
                'risk_score': data['risk_assessment']['fraud_score'],
                'reputation': data['insights']['security'].get('reputation_score'),
                'risk_factors': data['risk_assessment'].get('risk_factors', [])
            }
        except requests.RequestException:
            return {'error': 'IP analysis unavailable'}

    def _analyze_email(self, email: str) -> Dict[str, Any]:
        try:
            response = self.session.post(
                f'{self.base_url}/email',
                json={'email': email},
                timeout=2
            )
            response.raise_for_status()
            data = response.json()['data']

            return {
                'deliverable': data['classification']['deliverability_status'] == 'DELIVERABLE',
                'is_disposable': data['classification'].get('provider_tier') == 'DISPOSABLE',
                'is_role_based': data['classification']['email_type'] == 'ROLE_BASED',
                'risk_score': data['risk_assessment']['fraud_score']
            }
        except requests.RequestException:
            return {'error': 'Email analysis unavailable'}

    def _analyze_phone(self, phone: str) -> Dict[str, Any]:
        try:
            response = self.session.post(
                f'{self.base_url}/phone',
                json={'phone_number': phone},
                timeout=2
            )
            response.raise_for_status()
            data = response.json()['data']

            return {
                'number_status': data['classification']['number_status'],
                'line_type': data['classification']['line_type'],
                'is_voip': data['insights'].get('risk_indicators', {}).get('voip_detected', False),
                'risk_level': data['risk_assessment']['risk_level']
            }
        except requests.RequestException:
            return {'error': 'Phone analysis unavailable'}

    def _score_signals(self, intelligence: Dict[str, Any],
                       extra_risk: List[Dict[str, Any]]):
        # Example weights only: tune them on your own labelled history
        risk_score = 0
        reasons = []

        ip = intelligence.get('ip', {})
        email = intelligence.get('email', {})
        phone = intelligence.get('phone', {})

        if ip.get('is_vpn'):
            risk_score += 25
            reasons.append('VPN connection')

        if ip.get('is_proxy'):
            risk_score += 30
            reasons.append('Proxy connection')

        if ip.get('is_tor'):
            risk_score += 35
            reasons.append('Tor exit node')

        if ip.get('risk_score', 0) > 50:
            risk_score += ip['risk_score'] * 0.5
            reasons.append('High IP fraud score')

        if email.get('is_disposable'):
            risk_score += 20
            reasons.append('Disposable email')

        if email.get('risk_score', 0) > 50:
            risk_score += email['risk_score'] * 0.5
            reasons.append('High email fraud score')

        if phone.get('is_voip'):
            risk_score += 15
            reasons.append('VoIP phone line')

        # Signals your own systems produced, for example order velocity
        for signal in extra_risk:
            risk_score += signal['points']
            reasons.append(signal['reason'])

        return min(round(risk_score), 100), reasons

    def _make_risk_decision(self, score: int):
        if score >= self.risk_thresholds['critical']:
            return 'critical', ['Block transaction', 'Flag for investigation']
        if score >= self.risk_thresholds['high']:
            return 'high', ['Require additional verification', 'Limit amount']
        if score >= self.risk_thresholds['medium']:
            return 'medium', ['Request additional information', 'Review manually']
        return 'low', ['Approve transaction']


# Usage example
def main():
    fraud_detector = FraudCheckService('your-api-key')

    transaction = {
        'ip': '203.0.113.42',
        'email': 'user@example.com',
        'phone': '+14155550123'
    }

    result = fraud_detector.analyze_transaction(transaction)

    print("Fraud Analysis Result:")
    print(f"Risk Score: {result.risk_score}")
    print(f"Risk Level: {result.risk_level}")
    print(f"Reasons: {', '.join(result.reasons)}")
    print(f"Recommendations: {', '.join(result.recommendations)}")

    # Make decision based on risk level
    if result.risk_level in ['critical', 'high']:
        print("Transaction blocked or held for verification")
    elif result.risk_level == 'medium':
        print("Additional verification required")
    else:
        print("Transaction approved")

if __name__ == "__main__":
    main()

Adding Device Fingerprinting and Behavioral Signals Alongside 1Lookup

Device fingerprinting and behavioral analysis are general fraud techniques, and a team can add them next to 1Lookup. They are not part of 1Lookup. The fraud API has no field for a device ID, a browser fingerprint or session behavior, and it returns nothing about either.

If your risk model needs them, build or buy that layer separately:

  • Device fingerprinting: a client-side script in your own code builds an identifier from browser and hardware attributes, and your own server stores it so you can see one device behind many accounts
  • Behavioral analysis: your own code records timing and interaction patterns, for example how fast a form was completed, and flags sessions that look scripted
  • Privacy: check the consent and privacy rules in each market you serve before you collect either, because both describe a person's device or behavior

Then turn each finding into points in your own decision rule. The 1Lookup score and your own points add up in the same place, and the email, phone number and IP address are still the only things sent to 1Lookup:

// Built by your own tooling and stored in your own database.
// 1Lookup never receives it.
const extraRisk = [];
if (await db.deviceSeenOnManyAccounts(deviceId)) {
  extraRisk.push({ points: 25, reason: 'Same device on many accounts' });
}

const result = await fraudDetector.analyzeTransaction(
  { email, phone, ip },
  { extraRisk }
);

Business Applications and Use Cases

Use Case 1: E-commerce Fraud Prevention and Chargeback Reduction

Scenario: Major e-commerce platform processing 1M transactions monthly

Implementation Strategy:

  1. Real-time Transaction Analysis: Every checkout gets comprehensive fraud scoring
  2. Risk-Based Authentication: High-risk transactions require additional verification
  3. Velocity Checks: Count orders per card, email, phone and IP over short windows
  4. Post-Transaction Review: Automated flagging for manual investigation

Advanced Implementation:

class EcommerceFraudPrevention {
  constructor(fraudDetector, paymentProcessor) {
    this.fraudDetector = fraudDetector;
    this.paymentProcessor = paymentProcessor;
    this.riskThresholds = {
      autoDecline: 85,
      requireVerification: 70,
      manualReview: 60
    };
    this.velocityChecks = new VelocityChecker();
  }

  async processCheckout(checkoutData) {
    // Step 1: Collect comprehensive transaction data
    const transactionData = this.enrichTransactionData(checkoutData);

    // Step 2: Perform velocity checks
    const velocityRisk = await this.velocityChecks.assessVelocityRisk(transactionData);

    // Step 3: Score the email, phone and IP with 1Lookup
    const fraudAnalysis = await this.fraudDetector.analyzeTransaction(transactionData);

    // Step 4: Make risk-based decision
    const decision = await this.makeRiskDecision(fraudAnalysis, velocityRisk);

    // Step 5: Execute decision
    return await this.executeDecision(decision, transactionData);
  }

  enrichTransactionData(checkoutData) {
    return {
      amount: checkoutData.total,
      currency: checkoutData.currency,
      items: checkoutData.items,
      customer: {
        email: checkoutData.customer.email,
        phone: checkoutData.customer.phone,
        billingAddress: checkoutData.billingAddress,
        shippingAddress: checkoutData.shippingAddress,
        accountAge: checkoutData.customer.accountAge,
        orderHistory: checkoutData.customer.orderHistory
      },
      payment: {
        method: checkoutData.payment.method,
        cardBin: checkoutData.payment.cardBin,
        cardCountry: checkoutData.payment.cardCountry
      },
      ip: checkoutData.ip,
      timestamp: new Date().toISOString()
    };
  }

  async makeRiskDecision(fraudAnalysis, velocityRisk) {
    const totalRiskScore = (fraudAnalysis.riskScore + velocityRisk.score) / 2;

    if (totalRiskScore >= this.riskThresholds.autoDecline) {
      return {
        action: 'decline',
        reason: 'High fraud risk detected',
        riskScore: totalRiskScore,
        requiresReview: false
      };
    }

    if (totalRiskScore >= this.riskThresholds.requireVerification) {
      return {
        action: 'require_verification',
        reason: 'Additional verification required',
        riskScore: totalRiskScore,
        verificationMethods: this.selectVerificationMethods(fraudAnalysis)
      };
    }

    if (totalRiskScore >= this.riskThresholds.manualReview) {
      return {
        action: 'manual_review',
        reason: 'Manual review required',
        riskScore: totalRiskScore,
        priority: totalRiskScore > 75 ? 'high' : 'medium'
      };
    }

    return {
      action: 'approve',
      reason: 'Low risk transaction',
      riskScore: totalRiskScore
    };
  }

  selectVerificationMethods(fraudAnalysis) {
    const methods = [];

    if (fraudAnalysis.intelligence?.email?.deliverable) {
      methods.push('email_otp');
    }

    if (fraudAnalysis.intelligence?.phone && !fraudAnalysis.intelligence.phone.isVoip) {
      methods.push('sms_otp');
    }

    return methods;
  }

  async executeDecision(decision, transactionData) {
    switch (decision.action) {
      case 'decline':
        await this.logDeclinedTransaction(transactionData, decision);
        return { success: false, reason: decision.reason };

      case 'require_verification':
        const verificationResult = await this.requestVerification(
          transactionData,
          decision.verificationMethods
        );
        return verificationResult;

      case 'manual_review':
        await this.queueForManualReview(transactionData, decision);
        return { success: true, status: 'under_review' };

      case 'approve':
        const paymentResult = await this.paymentProcessor.process(transactionData);
        await this.logApprovedTransaction(transactionData, decision);
        return paymentResult;
    }
  }
}

What to measure:

  • Fraud loss, before against after, on comparable months
  • Chargeback rate, measured at least 90 days out so late chargebacks are counted
  • False positives, as good orders the rules would have blocked, from the backtest
  • Checkout conversion, watched for the drop a new friction step can cause

Use Case 2: Financial Services Account Protection and KYC Enhancement

Scenario: Digital banking platform with 500,000 active customers

Implementation Strategy:

  1. Account Opening Fraud Detection: Multi-layer verification during registration
  2. Transaction Monitoring: Real-time analysis of all financial transactions
  3. Login Security: Re-check the email, phone and IP address at each login
  4. Regulatory Compliance: Automated KYC and AML monitoring

Enterprise Implementation:

class FinancialFraudProtection {
  constructor(fraudDetector, complianceEngine, riskEngine) {
    this.fraudDetector = fraudDetector;
    this.complianceEngine = complianceEngine;
    this.riskEngine = riskEngine;
    this.kycThreshold = 75;
    this.transactionThresholds = {
      low: { amount: 100, riskLimit: 60 },
      medium: { amount: 1000, riskLimit: 75 },
      high: { amount: 10000, riskLimit: 85 }
    };
  }

  async processAccountOpening(accountData) {
    // Enhanced KYC with fraud detection
    const kycAnalysis = await this.performEnhancedKYC(accountData);

    // Compliance checking
    const complianceResult = await this.complianceEngine.checkCompliance(accountData);

    // Risk assessment
    const riskProfile = await this.riskEngine.assessCustomerRisk(accountData, kycAnalysis);

    // Final decision
    return await this.makeAccountDecision(kycAnalysis, complianceResult, riskProfile);
  }

  async performEnhancedKYC(accountData) {
    const kycAnalysis = await this.fraudDetector.analyzeTransaction({
      type: 'account_opening',
      customer: accountData.customer,
      documents: accountData.documents,
      ip: accountData.ip
    });

    // Additional KYC-specific checks
    const enhancedChecks = await this.performKYCChecks(accountData);

    return {
      ...kycAnalysis,
      kycChecks: enhancedChecks,
      overallScore: this.calculateOverallKYCScore(kycAnalysis, enhancedChecks)
    };
  }

  async performKYCChecks(accountData) {
    return {
      identityVerification: await this.verifyIdentity(accountData),
      addressVerification: await this.verifyAddress(accountData),
      documentAuthenticity: await this.verifyDocuments(accountData),
      sourceOfFunds: await this.verifySourceOfFunds(accountData),
      riskProfile: await this.assessCustomerRiskProfile(accountData)
    };
  }

  async processTransaction(transactionData, accountData) {
    // Real-time transaction fraud detection
    const transactionAnalysis = await this.fraudDetector.analyzeTransaction({
      ...transactionData,
      email: accountData.email,
      phone: accountData.phone
    });

    // Transaction-specific risk assessment
    const transactionRisk = await this.assessTransactionRisk(
      transactionData,
      accountData,
      transactionAnalysis
    );

    // Compliance monitoring
    const complianceCheck = await this.complianceEngine.checkTransactionCompliance(
      transactionData,
      accountData
    );

    return await this.makeTransactionDecision(
      transactionAnalysis,
      transactionRisk,
      complianceCheck
    );
  }

  assessTransactionRisk(transactionData, accountData, analysis) {
    const amount = transactionData.amount;
    const thresholds = this.getTransactionThresholds(amount);

    let riskScore = analysis.riskScore;

    // Amount-based risk adjustment
    if (amount > thresholds.high.amount) {
      riskScore += 20;
    } else if (amount > thresholds.medium.amount) {
      riskScore += 10;
    }

    // Account-based risk factors
    if (accountData.riskProfile === 'high') {
      riskScore += 15;
    }

    // Time-based risk factors
    const hour = new Date().getHours();
    if (hour < 6 || hour > 22) { // Unusual hours
      riskScore += 10;
    }

    return {
      score: Math.min(riskScore, 100),
      level: this.getRiskLevel(riskScore),
      thresholds: thresholds
    };
  }

  getTransactionThresholds(amount) {
    if (amount >= this.transactionThresholds.high.amount) {
      return this.transactionThresholds.high;
    }
    if (amount >= this.transactionThresholds.medium.amount) {
      return this.transactionThresholds.medium;
    }
    return this.transactionThresholds.low;
  }

  getRiskLevel(score) {
    if (score >= 80) return 'critical';
    if (score >= 60) return 'high';
    if (score >= 40) return 'medium';
    return 'low';
  }
}

What to measure:

  • Confirmed account takeovers per 10,000 active accounts, before against after
  • Step-up verifications triggered, split by whether the account turned out to be compromised
  • Time from application to KYC decision, median rather than mean
  • Applications abandoned at the new verification step, which is the cost side

Use Case 3: Gaming and Digital Goods Fraud Prevention

Scenario: Online gaming platform with 2M active users

Implementation Strategy:

  1. Account Registration: Email, phone and IP checks during signup
  2. Purchase Protection: Real-time analysis of in-game purchases
  3. Multi-Account Detection: Identification of account farming
  4. Payment Fraud Prevention: Chargeback reduction through verification

Advanced Implementation:

class GamingFraudProtection {
  constructor(fraudDetector, gameEngine, paymentProcessor) {
    this.fraudDetector = fraudDetector;
    this.gameEngine = gameEngine;
    this.paymentProcessor = paymentProcessor;
    this.purchaseThresholds = {
      low: { amount: 10, riskLimit: 50 },
      medium: { amount: 50, riskLimit: 70 },
      high: { amount: 100, riskLimit: 85 }
    };
  }

  async processGameRegistration(registrationData) {
    // Account uniqueness checking
    const uniquenessCheck = await this.checkAccountUniqueness(registrationData);

    // Score the signup email, phone and IP with 1Lookup
    const fraudAnalysis = await this.fraudDetector.analyzeTransaction({
      type: 'game_registration',
      email: registrationData.email,
      phone: registrationData.phone,
      ip: registrationData.ip
    });

    return await this.makeRegistrationDecision(uniquenessCheck, fraudAnalysis);
  }

  async checkAccountUniqueness(registrationData) {
    // Check for duplicate accounts based on various factors
    const checks = {
      email: await this.isEmailUnique(registrationData.email),
      ip: await this.checkIPHistory(registrationData.ip),
      payment: registrationData.paymentMethod ?
        await this.isPaymentMethodUnique(registrationData.paymentMethod) : true
    };

    const uniquenessScore = Object.values(checks).filter(Boolean).length / Object.keys(checks).length * 100;

    return {
      score: uniquenessScore,
      isUnique: uniquenessScore > 80,
      duplicates: Object.entries(checks).filter(([_, unique]) => !unique).map(([type, _]) => type)
    };
  }

  async processInGamePurchase(purchaseData, playerData) {
    // Real-time purchase fraud detection
    const purchaseAnalysis = await this.fraudDetector.analyzeTransaction({
      type: 'game_purchase',
      amount: purchaseData.amount,
      item: purchaseData.item,
      email: playerData.email,
      phone: playerData.phone,
      ip: purchaseData.ip
    });

    // Purchase pattern analysis
    const patternAnalysis = await this.analyzePurchasePatterns(purchaseData, playerData);

    // Risk decision
    const decision = await this.makePurchaseDecision(purchaseAnalysis, patternAnalysis);

    return await this.executePurchaseDecision(decision, purchaseData);
  }

  async analyzePurchasePatterns(purchaseData, playerData) {
    const patterns = {
      unusualAmount: this.isAmountUnusual(purchaseData.amount, playerData),
      frequentPurchases: this.isPurchaseFrequencyUnusual(purchaseData, playerData),
      unusualItem: this.isItemUnusual(purchaseData.item, playerData),
      timeUnusual: this.isPurchaseTimeUnusual(purchaseData.timestamp, playerData)
    };

    const patternScore = Object.values(patterns).filter(Boolean).length * 25;

    return {
      score: patternScore,
      unusualPatterns: Object.entries(patterns).filter(([_, unusual]) => unusual).map(([pattern, _]) => pattern)
    };
  }

  isAmountUnusual(amount, playerData) {
    const avgPurchase = playerData.purchaseHistory?.reduce((sum, p) => sum + p.amount, 0) /
                       playerData.purchaseHistory?.length || 0;
    return amount > avgPurchase * 3;
  }

  isPurchaseFrequencyUnusual(purchaseData, playerData) {
    const recentPurchases = playerData.purchaseHistory?.filter(p =>
      new Date(p.timestamp) > new Date(Date.now() - 24 * 60 * 60 * 1000)
    ).length || 0;
    return recentPurchases > 5; // More than 5 purchases in 24 hours
  }
}

What to measure:

  • Signups flagged as high risk, sampled and manually checked so you know the flag is right
  • Chargeback rate on virtual goods, before against after
  • Registrations completed, watched for a drop caused by the new checks
  • Support tickets from players who were wrongly blocked, which is the signal that the threshold is too tight

ROI Analysis: Calculating Your Advanced Fraud Detection Investment

No worked scenario with filled-in numbers appears below, because the fraud rate, the average loss per case and the review hours are the three inputs that decide the answer and all three are specific to you. Made-up inputs produce a made-up answer no matter how carefully the arithmetic is done.

Use this structure with your own numbers, in this order:

Monthly investment

  • API cost at your real monthly scored volume, at the price you were actually quoted
  • Any analytics or case management tooling you would add alongside it
  • Implementation, as engineering hours times your loaded rate, amortized over 12 months so it can sit in a monthly comparison

Monthly return, and only fill in a line if you measured it:

  • Fraud prevented: from the backtest earlier in this guide. Cases the threshold would have caught, times your actual average loss per case, which you can get from your chargeback records rather than from a benchmark.
  • Chargeback fees avoided: cases caught times your processor's fee per chargeback. Exact, and often overlooked.
  • Manual review saved: hours your team currently spends on review that automated decisioning would remove, times the loaded hourly rate. Time a sample of reviews rather than estimating.
  • Minus false positives: good orders the threshold would have blocked, times your margin on them. This line is negative and it belongs in the same table as everything else.

Report it as a payback period in months, not as an annual ROI percentage. A percentage return calculated against a small monthly software fee produces a number in the thousands that tells nobody whether the project is worth doing, which is precisely why fraud vendors quote it.

Comparative Analysis: Advanced Fraud Detection Services Comparison

Top Fraud Detection Providers Matrix

Feature 1Lookup Sift Riskified Kount Why It Matters
Fraud detection accuracy Test it Test it Test it Test it Every vendor measures on its own labelled set, so published figures are not comparable. Score the same 90 days of your history through each.
What you send Email, phone and IP address Check vendor docs Check vendor docs Check vendor docs Vendors differ in what they ask for and 1Lookup takes only these three, so ask each what it needs and what you would have to collect yourself
Integration complexity Simple API Moderate Complex Moderate Easier integration reduces implementation time
False positive rate Test it Test it Test it Test it Same problem, and this is the number that decides the purchase. Count flags on customers who have paid you for six months.
Cost per transaction See pricing Vendor site Vendor site Vendor site List prices move without notice, so read each on the day you compare rather than trusting a table.

Detailed Provider Analysis

1Lookup

  • Strengths: Fast processing, IP, email and phone intelligence behind one API key rather than three integrations
  • Best For: Businesses that want phone, email and IP signals behind one integration
  • Pricing: 1 credit per phone, email or IP check, with no separate fraud contract; the credit price for each plan is on the pricing page
  • Unique Features: Multi-channel intelligence, with email, phone and IP checks in one integration

Sift - Established Player

  • Strengths: Good balance of features, reliable platform, extensive integrations
  • Best For: Mid-size businesses with moderate fraud detection needs
  • Pricing: Read it on the vendor's site on the day you compare

Riskified - E-commerce Focus

  • Strengths: Specialized for e-commerce, good chargeback reduction
  • Best For: Online retailers and e-commerce platforms
  • Pricing: Read it on the vendor's site on the day you compare
  • Limitations: Limited to e-commerce use cases

Kount - Legacy Provider

  • Strengths: Established reputation, good for traditional retail
  • Best For: Businesses with existing Kount infrastructure
  • Pricing: Read it on the vendor's site on the day you compare

Pricing Analysis and Recommendations

Cost Comparison:

  • 1Lookup: 1 credit per phone, email or IP check, priced on the pricing page
  • Every other vendor: no figure is quoted here, because list prices move without notice and are often quoted per contract

Recommendation Guide by Business Size:

Startup/Small Business:

  • Choose 1Lookup if you want phone, email and IP signals without a separate fraud contract
  • Expected monthly cost: your monthly scored volume times the credit price on your plan
  • Best for: Early fraud prevention and growth protection

Mid-Size Business:

  • Choose 1Lookup for phone, email and IP signals in one API
  • Expected monthly cost: your monthly scored volume times the credit price on your plan
  • Best for: Fraud checks that scale with volume

Enterprise:

  • Choose 1Lookup if phone, email and IP signals are the layer you are missing
  • Expected monthly cost: your monthly scored volume times the credit price on your plan
  • Best for: Teams that will add device and behavior signals from their own tooling around it

How to Prove This on Your Own Data Before You Buy

No case studies appear in this guide, because we are not prepared to publish results we cannot evidence. What follows instead is the evaluation we would want run against us. It produces a defensible number in about a week, and unlike a case study it is about your traffic.

1. Assemble a labelled history

Pull 90 days of past transactions or account events, whichever you intend to score. Each row needs the signals the API would have seen at decision time (IP, email, phone, amount, geography, plus any signals from your own tooling) and the outcome you learned afterwards: chargeback, confirmed fraud, account takeover, or clean.

Ninety days matters because chargebacks arrive late. Scoring last month's orders against last month's chargebacks understates fraud badly, since most of it has not landed yet.

2. Score it blind

Send every row through the API. Do not act on the results and do not let anyone tune thresholds while looking at outcomes. Most vendors will price a one-off bulk scoring run for an evaluation, and it is worth asking.

3. Build the confusion matrix, not an accuracy figure

At each candidate threshold, count four numbers separately:

Fraud actually occurred Clean
Would have blocked caught false positive
Would have allowed missed correct

A single accuracy percentage is useless here, because fraud is rare. A model that blocks nothing is "99% accurate" on a population with 1% fraud, and it is worthless.

4. Price each cell

  • Caught: your average loss per fraud case, including the chargeback fee and the goods.
  • Missed: no change from today, this is your current state.
  • False positive: the margin on that order, plus whatever a rejected good customer's future value is worth to you. Do not set this to zero. This is the cell that kills otherwise-attractive fraud programmes.
  • Correct: nothing.

Net value at a threshold is caught times loss per case, minus false positives times cost per rejection, minus the API cost at your real query volume.

5. Plot the curve and pick a point

Repeat at four or five thresholds and look at the shape. The right threshold is a business decision about how many good customers you will reject to stop one fraudster, and it is different for a marketplace, a lender and a subscription product. No vendor can pick it for you, and any vendor that offers to should be asked what they assumed about your false-positive cost.

6. Re-run it after 90 days live

Fraud adapts. The threshold that was right at launch drifts, and the only way to know is to repeat the matrix on fresh data. Put it in the calendar at implementation time, because nobody does it voluntarily.

Emerging Technologies Shaping the Industry

1. AI-Powered Predictive Fraud Prevention (2024-2025)

  • Machine learning models that adapt to new fraud patterns
  • Predictive analytics for identifying fraud patterns before execution
  • Automated rule generation and optimization
  • Real-time model adaptation to new threats

2. Advanced Behavioral Biometrics (2025-2027)

  • Continuous authentication using behavioral patterns
  • Multi-modal biometrics integration (facial, voice, typing)
  • Device-agnostic user identification
  • Passive authentication without user interaction

3. Quantum-Resistant Security (2026-2028)

  • Post-quantum cryptography for fraud detection systems
  • Quantum-safe algorithms for data protection
  • Advanced encryption for sensitive transaction data
  • Quantum-resistant machine learning models

4. Decentralized Fraud Intelligence (2027-2030)

  • Blockchain-based fraud intelligence sharing
  • Decentralized identity verification systems
  • Privacy-preserving fraud detection networks
  • Global threat intelligence marketplaces

Industry Predictions and Developments

Short-term (2024-2025):

  • AI becomes standard feature in fraud prevention
  • Behavioral biometrics adoption grows
  • Real-time processing becomes universal requirement

Medium-term (2025-2027):

  • Predictive fraud prevention becomes mainstream
  • Multi-modal authentication becomes common
  • Automated response systems take on more of manual review
  • Global fraud intelligence networks emerge

Long-term (2027-2030):

  • Zero-trust architectures become universal
  • AI-powered autonomous fraud prevention systems
  • Seamless integration with ambient computing
  • Quantum-resistant fraud detection becomes essential

1Lookup's Position in the Evolving Landscape

1Lookup's part in that picture is the signal layer:

  • Phone, email and IP checks behind one API key and one credit balance
  • A 0-100 fraud score on every email and IP check, and a risk level on every phone check
  • VPN, proxy, datacenter and Tor exit flags on every IP lookup

Implementation Resources: Your 30-Day Advanced Fraud Detection Action Plan

Phase 1: Foundation Setup (Days 1-7)

Week 1 Tasks:

  1. Current Fraud Assessment: Analyze existing fraud patterns and losses
  2. API Account Setup: Create 1Lookup account and obtain API keys
  3. Data Collection Planning: Identify data sources for fraud intelligence
  4. Basic Integration: Implement simple fraud scoring in test environment

Resources Needed:

  • API documentation access
  • Development environment (Node.js/Python preferred)
  • Sample transaction data for testing
  • Basic understanding of REST APIs

Success Metrics:

  • API connection established
  • Basic fraud scoring working
  • Response times measured on your own test calls

Phase 2: Core Implementation (Days 8-21)

Weeks 2-3 Tasks:

  1. Production Integration: Deploy fraud detection to staging environment
  2. Risk Threshold Configuration: Set up risk-based decision making
  3. Your Own Signals (optional): Add velocity checks, and any device or behavior signals from your own tooling, as extra points in your decision rule
  4. Backtest: Run the blind backtest from this guide and set thresholds from the curve
  5. Performance Optimization: Set up caching and batch processing

Advanced Features to Implement:

  • Real-time IP, email and phone intelligence
  • Velocity checks on your own order history
  • Optional device and behavior signals from your own tooling
  • Automated decision workflows

Success Metrics:

  • API uptime and response time tracked on your own monitoring
  • A confusion matrix built from your own history at four or five thresholds
  • False positives counted on customers who have paid you for six months

Phase 3: Optimization and Scaling (Days 22-30)

Week 4 Tasks:

  1. Production Deployment: Full production rollout with monitoring
  2. Performance Monitoring: Set up dashboards and alerting systems
  3. ROI Tracking: Implement fraud loss and savings metrics
  4. Team Training: Train fraud analysts and support teams
  5. Continuous Improvement: Set up feedback loops for model training

Optimization Strategies:

  • A/B testing of risk thresholds
  • Fraud pattern analysis and rule optimization
  • Cost optimization through intelligent caching
  • User experience optimization for legitimate users

Success Metrics:

  • Fraud losses compared with your 90-day baseline
  • Support tickets from wrongly blocked customers, which show whether the threshold is too tight
  • Payback period in months, built from the ROI structure above
  • The backtest re-run on fresh data every quarter

Common Challenges and Solutions

Challenge 1: High False Positive Rates

  • Solution: Implement confidence scoring and gradual risk thresholds
  • Prevention: Use your own order history and account age for context

Challenge 2: Integration Complexity

  • Solution: Start with simple API integration, then add advanced features
  • Prevention: Use SDKs and pre-built integrations when available

Challenge 3: Performance Impact

  • Solution: Implement asynchronous processing and intelligent caching
  • Prevention: Use edge computing and CDN distribution

Challenge 4: Privacy Compliance

  • Solution: Implement data minimization and consent management
  • Prevention: Design privacy-first architecture from the start

Tools and Resources Required

Technical Tools:

  • API testing tools (Postman, Insomnia)
  • Monitoring solutions (DataDog, New Relic)
  • Database for caching (Redis, MongoDB)
  • Analytics platform (Mixpanel, Amplitude)

Business Tools:

  • Fraud management platform
  • Customer support ticketing system
  • Financial reporting tools
  • Compliance management system

Educational Resources:

  • 1Lookup developer documentation
  • Fraud detection best practices guides
  • Industry webinars and case studies
  • Privacy and compliance regulations

Conclusion: Transform Your Fraud Prevention with Advanced Detection

Advanced fraud detection scores several signals together instead of leaning on any one of them. Whether it pays for itself in your business is something to measure on your own history, not to assume, and the backtest in this guide shows how.

Key Takeaways:

  • Fraud is rare, so accuracy is the wrong metric. Build a confusion matrix at several thresholds instead.
  • The cost of blocking a good customer belongs in the model. Leaving it out is what makes fraud ROI numbers look absurd.
  • Chargebacks arrive late. Any measurement window shorter than 90 days understates your fraud rate.
  • Report a payback period, not a return multiple.
  • Re-run the matrix quarterly. Fraud adapts and thresholds drift.

What 1Lookup gives you:

  1. Accuracy you measure yourself: run the blind backtest above rather than taking a published detection rate from us or anyone else
  2. Real-time checks: a single synchronous API call per phone, email or IP
  3. Signals, not just a score: VPN, proxy, datacenter and Tor flags on every IP, disposable and role flags on every email
  4. Enterprise-Grade Security: Encrypted in transit and at rest, with GDPR and CCPA data rights supported
  5. Volume: CSV uploads of up to 2 million rows, 200 API requests per 10 seconds for each API key, and each account can make up to 1,000 requests a minute in total across all its keys
  6. Developer-Friendly: Simple REST API with extensive documentation
  7. An evaluation path that does not require trusting us: bulk-score your own history, build the confusion matrix, and decide on the curve

Next Steps for Success:

  1. Assess Your Current Fraud Losses: pull 90 days of outcomes so you have a labelled set to score against
  2. Audit Your Existing Security: Identify gaps in current fraud detection
  3. Test 1Lookup's Fraud Detection API: Get 100 free fraud analyses
  4. Plan Your Implementation: Start with pilot project, then scale enterprise-wide
  5. Enhance with Multi-Layer Protection: Combine with email and phone validation

Ready to Transform Your Fraud Prevention?

Start your free trial today with 100 fraud analyses and see the difference advanced fraud detection can make for your business. Join thousands of companies worldwide who trust 1Lookup for their critical fraud prevention, risk assessment, and security intelligence needs.

Get Started with 1Lookup Advanced Fraud Detection API

Transform your fraud prevention from a cost center into a strategic business advantage with the industry's most comprehensive fraud detection platform.

fraud detection
IP intelligence
email risk scoring
phone risk scoring
risk scoring
fraud prevention
security
About the Author

Meet the Expert Behind the Insights

Real-world experience from building and scaling B2B SaaS companies

Robby Frank - Head of Growth at 1Lookup

Robby Frank

Head of Growth at 1Lookup

"Calm down, it's just life"

12+
Years Experience
1K+
Campaigns Run

About Robby

Self-taught entrepreneur and technical leader with 12+ years building profitable B2B SaaS companies. Specializes in rapid product development and growth marketing with 1,000+ outreach campaigns executed across industries.

Author of "Evolution of a Maniac" and advocate for practical, results-driven business strategies that prioritize shipping over perfection.

Core Expertise

Technical Leadership
Full-Stack Development
Growth Marketing
1,000+ Campaigns
Rapid Prototyping
0-to-1 Products
Crisis Management
Turn Challenges into Wins

Key Principles

Build assets, not trade time
Skills over credentials always
Continuous growth is mandatory
Perfect is the enemy of shipped

Try It on Your Own Data

Sign up and run your own phone numbers, emails, and IP addresses through the 1Lookup API. The free trial lasts 7 days.