Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Leak Check Personal Info

FSecurity

> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.

81 stars
0 votes
0 copies
0 views
Added 9/19/2026
developmentpythonbashfastapitestinggitapidatabasesecurity

Works with

cliapi

Security Analysis

F9/100
criticalPipes output to a shell interpreter
mediumUses curl or wget to download content
criticalExfiltrates credentials via HTTP — exact pattern from Snyk ToxicSkills study
criticalDownloads and executes remote scripts — classic supply chain attack
mediumInstalls packages at runtime which could introduce malicious dependencies

Scanned 9/19/2026

Install to Claude Code

$npx -y skills add reason-machines/trending-skills --skill leak-check-personal-info --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Leak Check Personal Info?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Leak Check Personal Info
[![Security: F — Skills Directory](https://www.skillsdirectory.com/api/skills/reason-machines-leak-check-personal-info/badge)](https://www.skillsdirectory.com/skills/reason-machines-leak-check-personal-info)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
```markdown
---
name: leak-check-personal-info
description: Personal information leak detection API interface for checking if data has been exposed in breaches
triggers:
  - check if my data was leaked
  - personal information leak detection
  - use leak-check API
  - detect data breach exposure
  - install leak-check tool
  - check email in data breach
  - query leaked personal information
  - run leak check scan
---

# leak-check — Personal Information Leak Detection

> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.

## What It Does

`leak-check` is a personal information "leak" detection interface (`个人信息"泄漏"检测接口`) that allows you to query whether personal data (emails, phone numbers, usernames, etc.) has appeared in known data breaches or leaks. It provides a hosted API at [leak-check.garinasset.com](https://leak-check.garinasset.com) and a local installable tool.

## Installation

### One-line Install (recommended)

```bash
curl -LsSf https://raw.githubusercontent.com/garinasset/leak-check/refs/heads/main/install.sh | bash
```

### From Source

```bash
git clone https://github.com/garinasset/leak-check.git
cd leak-check
pip install -r requirements.txt
```

### Python Package

```bash
pip install requests  # primary dependency
```

## Configuration

Set your API credentials via environment variables:

```bash
export LEAK_CHECK_API_KEY="your_api_key_here"
export LEAK_CHECK_BASE_URL="https://leak-check.garinasset.com"
```

Or create a `.env` file:

```ini
LEAK_CHECK_API_KEY=your_api_key_here
LEAK_CHECK_BASE_URL=https://leak-check.garinasset.com
```

## API Usage

### Basic Query — Check an Email

```python
import os
import requests

API_KEY = os.environ["LEAK_CHECK_API_KEY"]
BASE_URL = os.environ.get("LEAK_CHECK_BASE_URL", "https://leak-check.garinasset.com")

def check_email(email: str) -> dict:
    """Check if an email address appears in known data leaks."""
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    }
    response = requests.post(
        f"{BASE_URL}/api/check",
        json={"query": email, "type": "email"},
        headers=headers,
        timeout=10,
    )
    response.raise_for_status()
    return response.json()

result = check_email("user@example.com")
print(result)
```

### Check Phone Number

```python
def check_phone(phone: str) -> dict:
    """Check if a phone number appears in known data leaks."""
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    }
    response = requests.post(
        f"{BASE_URL}/api/check",
        json={"query": phone, "type": "phone"},
        headers=headers,
        timeout=10,
    )
    response.raise_for_status()
    return response.json()

result = check_phone("+8613800138000")
print(result)
```

### Check Username

```python
def check_username(username: str) -> dict:
    """Check if a username appears in known data leaks."""
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    }
    response = requests.post(
        f"{BASE_URL}/api/check",
        json={"query": username, "type": "username"},
        headers=headers,
        timeout=10,
    )
    response.raise_for_status()
    return response.json()
```

## LeakCheck Client Class

```python
import os
import requests
from typing import Literal, Optional

QueryType = Literal["email", "phone", "username", "ip"]

class LeakCheckClient:
    """Client for the leak-check personal information detection API."""

    def __init__(
        self,
        api_key: Optional[str] = None,
        base_url: Optional[str] = None,
        timeout: int = 10,
    ):
        self.api_key = api_key or os.environ["LEAK_CHECK_API_KEY"]
        self.base_url = (
            base_url
            or os.environ.get("LEAK_CHECK_BASE_URL", "https://leak-check.garinasset.com")
        ).rstrip("/")
        self.timeout = timeout
        self.session = requests.Session()
        self.session.headers.update(
            {
                "Authorization": f"Bearer {self.api_key}",
                "Content-Type": "application/json",
            }
        )

    def check(self, query: str, query_type: QueryType = "email") -> dict:
        """
        Check if a piece of personal information appears in known leaks.

        Args:
            query: The value to search for (email, phone, username, etc.)
            query_type: The type of data being queried

        Returns:
            dict with leak results
        """
        response = self.session.post(
            f"{self.base_url}/api/check",
            json={"query": query, "type": query_type},
            timeout=self.timeout,
        )
        response.raise_for_status()
        return response.json()

    def bulk_check(self, items: list[dict]) -> list[dict]:
        """
        Check multiple items in one request.

        Args:
            items: List of dicts with 'query' and 'type' keys

        Returns:
            List of results
        """
        response = self.session.post(
            f"{self.base_url}/api/bulk-check",
            json={"items": items},
            timeout=self.timeout,
        )
        response.raise_for_status()
        return response.json()

    def get_sources(self) -> list[dict]:
        """Retrieve the list of breach databases being checked."""
        response = self.session.get(
            f"{self.base_url}/api/sources",
            timeout=self.timeout,
        )
        response.raise_for_status()
        return response.json()


# Usage
client = LeakCheckClient()

# Single check
result = client.check("user@example.com", "email")
if result.get("found"):
    print(f"Found in {result.get('sources', [])} breach(es)")
else:
    print("No leaks detected")

# Bulk check
results = client.bulk_check([
    {"query": "user@example.com", "type": "email"},
    {"query": "+8613800138000", "type": "phone"},
])
```

## CLI Usage

After installation via the install script:

```bash
# Check an email
leak-check email user@example.com

# Check a phone number
leak-check phone +8613800138000

# Check a username
leak-check username johndoe

# Output as JSON
leak-check email user@example.com --json

# Use a specific API key
leak-check email user@example.com --api-key $LEAK_CHECK_API_KEY
```

## Handling API Responses

```python
def process_leak_result(result: dict) -> None:
    """Parse and display leak check results."""
    if not result.get("found", False):
        print("✅ No leaks detected")
        return

    print(f"⚠️  Found in {result.get('count', 0)} breach(es)")

    for source in result.get("sources", []):
        print(f"  - Source: {source.get('name', 'Unknown')}")
        print(f"    Date: {source.get('date', 'Unknown')}")
        print(f"    Fields: {', '.join(source.get('fields', []))}")


client = LeakCheckClient()
result = client.check("test@example.com", "email")
process_leak_result(result)
```

## Error Handling

```python
from requests.exceptions import HTTPError, ConnectionError, Timeout

def safe_check(client: LeakCheckClient, query: str, query_type: str) -> dict | None:
    try:
        return client.check(query, query_type)
    except HTTPError as e:
        if e.response.status_code == 401:
            print("Invalid API key — check LEAK_CHECK_API_KEY env var")
        elif e.response.status_code == 429:
            print("Rate limit exceeded — slow down requests")
        elif e.response.status_code == 400:
            print(f"Bad request: {e.response.json().get('message', 'unknown error')}")
        else:
            print(f"API error: {e}")
        return None
    except ConnectionError:
        print("Cannot reach leak-check server — check your network or BASE_URL")
        return None
    except Timeout:
        print("Request timed out — server may be slow")
        return None
```

## Batch Processing with Rate Limiting

```python
import time

def batch_check_emails(
    client: LeakCheckClient,
    emails: list[str],
    delay: float = 0.5,
) -> list[dict]:
    """Check a list of emails with rate limiting."""
    results = []
    for email in emails:
        result = safe_check(client, email, "email")
        if result is not None:
            results.append({"query": email, "result": result})
        time.sleep(delay)  # respect rate limits
    return results


emails = ["alice@example.com", "bob@example.com", "charlie@example.com"]
client = LeakCheckClient()
all_results = batch_check_emails(client, emails)

leaked = [r for r in all_results if r["result"].get("found")]
print(f"{len(leaked)}/{len(emails)} emails found in breaches")
```

## Integration with FastAPI

```python
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, EmailStr
import os

app = FastAPI()
client = LeakCheckClient()


class CheckRequest(BaseModel):
    query: str
    type: str = "email"


@app.post("/check-leak")
async def check_leak(req: CheckRequest):
    try:
        result = client.check(req.query, req.type)
        return result
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))
```

## Troubleshooting

### "401 Unauthorized"
- Verify `LEAK_CHECK_API_KEY` is set and correct
- Check the API key hasn't expired on the dashboard

### "Connection refused" or DNS error
- Confirm `LEAK_CHECK_BASE_URL` points to the correct server
- Default: `https://leak-check.garinasset.com`

### "429 Too Many Requests"
- Add delays between requests (`time.sleep(1)`)
- Use the bulk endpoint for multiple queries

### Install script fails
```bash
# Manual install fallback
git clone https://github.com/garinasset/leak-check.git
cd leak-check
python -m pip install -r requirements.txt
python main.py --help
```

### SSL Certificate errors
```python
# Only for development/testing — never in production
response = requests.post(url, json=data, verify=False)
```

## Common Patterns

```python
# Pattern: Audit a list of employees' emails
client = LeakCheckClient()
employee_emails = load_emails_from_csv("employees.csv")  # your function

report = []
for email in employee_emails:
    result = client.check(email, "email")
    if result.get("found"):
        report.append({
            "email": email,
            "breaches": result.get("count", 0),
            "sources": result.get("sources", []),
        })

print(f"Security report: {len(report)} exposed accounts found")
```
```

Attribution

reason-machinesreason-machines
View sourceMore from reason-machines →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Browser Extension Developer

Use this skill when developing or maintaining browser extension code in the `browser/` directory, including Chrome/Firefox/Edge compatibility, content scripts, background scripts, or i18n updates.

281612 votes

Seo Optimizer

SEO optimization with keyword analysis, readability assessment, technical validation, content quality. Use for search rankings, blog posts, content audits, or encountering keyword density, readability scores, meta tags, schema markup errors.

2132 votes

Google Official Seo Guide

Official Google SEO guide covering search optimization, best practices, Search Console, crawling, indexing, and improving website search visibility based on official Google documentation

1862 votes

Tanstack Start

Build a full-stack TanStack Start app on Cloudflare Workers from scratch — SSR, file-based routing, server functions, D1+Drizzle, better-auth, Tailwind v4+shadcn/ui. Use whenever the user mentions TanStack Start, asks to scaffold a full-stack Cloudflare app with SSR, wants an SSR dashboard, or asks for a React 19 + Cloudflare Workers app with file-based routing and server functions — even if they don't name TanStack Start specifically. No template repo — Claude generates every file fresh per ...

9881 votes

Pentest

PTES-aligned adversarial security audit for backend, frontend, and mobile applications. Produces a CVSS-scored Hacker Report with verified PoCs and phased remediation.

5491 votes
View all in development →