Discover/HLLRecords API
live

HLLRecords APIhllrecords.com

Search Hell Let Loose players and retrieve combat stats, K/D ratios, ELO ratings, win rates, and playstyle data via the HLLRecords.com API.

Endpoint health
verified 3d ago
search_players
get_player_profile
2/2 passing latest checkself-healing
Endpoints
2
Updated
17d ago

What is the HLLRecords API?

The HLLRecords.com API provides two endpoints for querying Hell Let Loose player data: search players by username and retrieve detailed profiles containing 10+ fields including enemy kills, team kills, K/D ratio, ELO rating, win rate, and level. The get_player_profile endpoint supports time-period filters ranging from 30 days to full lifetime stats, making it suitable for tracking performance trends over specific seasons or patches.

Try it
Player username or partial username to search for (e.g. 'soldier', 'sniper').
api.parse.bot/scraper/2d54c33e-03d9-4f5e-9ebe-571b6c0de49c/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/2d54c33e-03d9-4f5e-9ebe-571b6c0de49c/search_players?query=soldier' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace hllrecords-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
HLLRecords Player Data API Client

This module provides a Python client for searching and retrieving Hell Let Loose
player combat records and statistics from HLLRecords.com via the Parse API.

Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Optional, Any


class ParseClient:
    """Client for interacting with the HLLRecords Player Data API via Parse."""

    def __init__(self, api_key: Optional[str] = None):
        """Initialize the Parse API client.

        Args:
            api_key: API key for authentication. If not provided, will use PARSE_API_KEY env var.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "2d54c33e-03d9-4f5e-9ebe-571b6c0de49c"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")

        if not self.api_key:
            raise ValueError(
                "API key not provided. Set PARSE_API_KEY environment variable or pass api_key parameter."
            )

    def _call(self, endpoint: str, method: str = "POST", **params) -> dict[str, Any]:
        """Make a request to the Parse API.

        Args:
            endpoint: The API endpoint name (e.g., 'search_players')
            method: HTTP method ('GET' or 'POST')
            **params: Parameters to send with the request

        Returns:
            JSON response from the API

        Raises:
            requests.exceptions.RequestException: If the request fails
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}

        if method.upper() == "GET":
            response = requests.get(url, headers=headers, params=params, timeout=30)
        elif method.upper() == "POST":
            payload = params if params else {}
            response = requests.post(url, headers=headers, json=payload, timeout=30)
        else:
            raise ValueError(f"Unsupported HTTP method: {method}")

        response.raise_for_status()
        return response.json()

    def search_players(self, query: str) -> dict[str, Any]:
        """Search for Hell Let Loose players by username.

        Args:
            query: Player username or partial username to search for

        Returns:
            Dictionary containing list of matching players and count
        """
        return self._call("search_players", method="GET", query=query)

    def get_player_profile(
        self, player_id: str, period: Optional[str] = None
    ) -> dict[str, Any]:
        """Get detailed player profile including combat statistics.

        Args:
            player_id: Player external ID (Steam ID or hash) from search results
            period: Time period filter ('365d', '180d', '90d', '30d', '2025' or None for lifetime)

        Returns:
            Dictionary containing detailed player profile and statistics
        """
        params = {"player_id": player_id}
        if period:
            params["period"] = period
        return self._call("get_player_profile", method="GET", **params)


def format_player_summary(player: dict[str, Any]) -> str:
    """Format a player search result for display."""
    return f"  • {player['name']} (ID: {player['external_id']}) - Last seen: {player['last_seen']}"


def format_player_stats(profile: dict[str, Any], period_label: str = "Lifetime") -> str:
    """Format player profile statistics for display."""
    playstyle = profile.get("playstyle_stats", {})
    stats = [
        f"\n{'='*60}",
        f"Player: {profile['name']} | Level: {profile['level']}",
        f"Period: {period_label}",
        f"{'='*60}",
        f"Matches Played: {profile['matches_played']}",
        f"Total Time: {profile['total_on_servers']}",
        f"K/D Ratio: {profile['kd_ratio']} | Win Rate: {profile['win_rate']}",
        f"Infantry Kill ELO: {profile['infantry_kill_elo']}",
        f"Enemy Kills: {profile['enemy_kills']} | Total Deaths: {profile['total_deaths']}",
        f"Team Kills: {profile['team_kills']} | Melee: {profile['melee_kills']}",
        f"Faction Preference: {profile['faction_preference']}",
        f"\nPlaystyle Metrics:",
        f"  KPM: {playstyle.get('kpm', 'N/A')} | DPM: {playstyle.get('dpm', 'N/A')} | KDR: {playstyle.get('kdr', 'N/A')}",
        f"  Combat Score: {playstyle.get('combat_score', 'N/A')}/min | Support Score: {playstyle.get('support_score', 'N/A')}/min",
        f"  Defense: {playstyle.get('defense', 'N/A')} | Offense: {playstyle.get('offense', 'N/A')}",
        f"  Duel Strength: {playstyle.get('duel_strength', 'N/A')}",
        f"First Seen: {profile['first_seen']}",
    ]
    return "\n".join(stats)


if __name__ == "__main__":
    # Initialize the client
    client = ParseClient()

    print("\n" + "="*60)
    print("HLLRecords Player Data Lookup - Competitive Analysis")
    print("="*60)

    # Search for players matching a criteria
    search_query = "soldier"
    print(f"\nSearching for players with username containing '{search_query}'...")

    try:
        search_results = client.search_players(search_query)
        print(f"\n✓ Search complete - Found {search_results['count']} player(s)")

        if search_results["count"] == 0:
            print(f"No players found matching '{search_query}'")
        else:
            print("\nTop Matches:")
            for i, player in enumerate(search_results["players"][:5], 1):
                print(f"{i}. {format_player_summary(player)}")

            print("\n" + "-"*60)
            print("Analyzing top 3 players in detail...")
            print("-"*60)

            # Analyze top 3 players in detail
            for idx, player in enumerate(search_results["players"][:3], 1):
                player_id = player["external_id"]
                player_name = player["name"]

                print(f"\n[{idx}/3] Fetching detailed profile for: {player_name}")

                # Get lifetime stats
                lifetime_profile = client.get_player_profile(player_id)
                print(format_player_stats(lifetime_profile, "Lifetime"))

                # Get recent 30-day stats for comparison
                recent_profile = client.get_player_profile(player_id, period="30d")
                print(format_player_stats(recent_profile, "Last 30 Days"))

                # Compare performance trend
                lifetime_kd = float(lifetime_profile["kd_ratio"])
                recent_kd = float(recent_profile["kd_ratio"])
                trend = "📈 Improving" if recent_kd > lifetime_kd else "📉 Declining" if recent_kd < lifetime_kd else "➡️ Stable"
                print(f"\nTrend Analysis: {trend}")

            print("\n" + "="*60)
            print("Analysis Complete")
            print("="*60 + "\n")

    except requests.exceptions.RequestException as e:
        print(f"❌ Error communicating with API: {e}")
    except KeyError as e:
        print(f"❌ Unexpected API response format: {e}")
    except ValueError as e:
        print(f"❌ Configuration error: {e}")
All endpoints · 2 totalmissing one? ·

Search for Hell Let Loose players by username. Returns a list of matching players with their external IDs, names, last seen timestamps, and avatar URLs.

Input
ParamTypeDescription
queryrequiredstringPlayer username or partial username to search for (e.g. 'soldier', 'sniper').
Response
{
  "type": "object",
  "fields": {
    "count": "integer - number of matching players",
    "players": "array of player objects with external_id, name, last_seen, last_seen_name, avatar"
  },
  "sample": {
    "data": {
      "count": 1,
      "players": [
        {
          "name": "John Doe",
          "avatar": "https://avatars.steamstatic.com/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb_full.jpg",
          "last_seen": "2026-06-25T15:44:44Z",
          "external_id": "76561199384752782",
          "last_seen_name": "John Doe"
        }
      ]
    },
    "status": "success"
  }
}

About the HLLRecords API

Player Search

The search_players endpoint accepts a full or partial username string and returns a list of matching players. Each result includes the player's external_id (Steam ID or hash), display name, last_seen timestamp, last_seen_name, and avatar URL. The external_id returned here is the required input for fetching a full profile.

Player Profiles and Combat Statistics

The get_player_profile endpoint accepts a player_id (obtained from search_players) and an optional period parameter. Valid period values are 30d, 90d, 180d, 365d, and 2025; omitting the parameter returns lifetime statistics. The response includes enemy_kills, team_kills, kd_ratio, win_rate, level, first_seen, steam_id, avatar, and player_id. The name field reflects the player's current display name, while the search endpoint's last_seen_name can differ if the player has renamed.

Data Coverage and Identifiers

Player identity is anchored to a Steam ID, so records persist across username changes. The first_seen field marks when HLLRecords first logged activity for the account, providing a rough tenure signal. All numeric stats — kills, ratios, rates — are returned as strings, so downstream code should cast them before arithmetic operations.

Reliability & maintenanceVerified

The HLLRecords API is a managed, monitored endpoint for hllrecords.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when hllrecords.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official hllrecords.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
3d ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a Hell Let Loose stat tracker that compares K/D ratios and win rates across time periods
  • Identify smurf or alternate accounts by cross-referencing last_seen_name history against Steam IDs
  • Integrate player ELO and level data into a community tournament seeding tool
  • Monitor a squad's enemy kill counts and team kill rates over rolling 30-day windows
  • Look up a player's first_seen date to estimate account age before accepting a clan application
  • Aggregate win rate and K/D data across multiple players to rank a unit's overall performance
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does HLLRecords.com have an official developer API?+
HLLRecords.com does not publish an official public developer API or documented REST endpoints for third-party use.
What does the `period` parameter in `get_player_profile` actually filter?+
The period parameter restricts the returned combat statistics to a specific time window. Accepted values are 30d, 90d, 180d, 365d, and 2025 (a calendar-year filter). Omitting it returns lifetime aggregated stats. All other response fields — name, level, steam_id, avatar — are not time-scoped.
Does the API return match history or individual game logs?+
Not currently. The API covers aggregated statistics per player — kills, team kills, K/D ratio, win rate, ELO, and level — across configurable time periods, but individual match records or session-level logs are not exposed. You can fork this API on Parse and revise it to add an endpoint targeting per-match data if that becomes available on HLLRecords.
Can I filter the `search_players` results by level, ELO, or win rate?+
The search_players endpoint only accepts a username query string; it does not support filtering by level, ELO, or win rate. Those fields are available in get_player_profile responses after you retrieve a specific player. You can fork this API on Parse and revise it to add server-side filtering logic once profiles are fetched.
Are stats available for all Hell Let Loose servers, or only specific ones?+
HLLRecords.com aggregates data from community-reported matches that report to its platform. Coverage depends on which servers submit data; not all community or private servers participate. Player profiles with no recorded activity on tracked servers will return limited or empty stat fields.
Page content last updated . Spec covers 2 endpoints from hllrecords.com.
Related APIs in SportsSee all →
transfermarkt.com API
Search Transfermarkt for football players and retrieve detailed player profiles, transfer histories, market value timelines, performance stats, and club squad/club information.
opendota.com API
Access detailed Dota 2 match statistics, player performance metrics, hero win rates, and professional tournament data to analyze gameplay trends and competitive performance. Search for specific players, explore custom data queries through SQL, and retrieve comprehensive match histories to improve your understanding of the game.
nhl.com API
Access data from nhl.com.
pro-football-reference.com API
Access comprehensive NFL data including season schedules, team standings, player statistics, game boxscores, play-by-play details, and player profiles to research teams, players, and game information. Search for specific players and dive into detailed game analysis with boxscore information and minute-by-minute play data.
fantasypros.com API
Access expert consensus rankings, player projections, average draft position data, injury reports, and the latest player news from FantasyPros. Search by player name or position to retrieve detailed stats, rankings, and expert analysis across all major scoring formats.
pinnacle.com API
Access real-time and pre-event sports betting odds, matchups, and markets from Pinnacle. Retrieve data across all available sports and leagues, monitor live events with scores and live odds, and explore political and entertainment betting markets. Covers full market depth including spreads, totals, moneylines, props, and alternate lines.
fifa.com API
Track FIFA world rankings for men's and women's teams, browse tournament schedules and standings, access detailed match information with live timelines, and explore comprehensive player statistics and profiles. Stay updated with the latest football news and easily search across teams, players, and matches all in one place.
livescore.com API
Track live scores and detailed statistics across football, hockey, basketball, tennis, and cricket with the ability to filter by date, sport, and league. Access match summaries, team overviews, standings, fixtures, and results to stay updated on your favorite competitions and teams.