Skip to main content

ARK: Survival Ascended Save Parser

A Python library for extracting player, tribe, and server data from ARK: Survival Ascended save files.

Features

Player Data Extraction

  • Player names (Epic Games account names)
  • Character names (in-game names)
  • Tribe membership
  • Player levels and full stats (health, stamina, weight, etc.)

Tribe Data Extraction

  • Tribe names
  • Tribe owner information
  • Member lists with names and IDs
  • Tribe logs

Server Analytics

  • Player counts across servers
  • Tribe statistics
  • Save file metadata
  • Multi-server cluster support

Advanced Features (v0.2.0)

  • Tamed dino extraction from world saves
  • Structure/building data extraction
  • Real-time save file monitoring
  • Historical data tracking and analytics

What's New

Version 0.2.0 - Feature Complete Release

  • Dino Extraction - Extract all tamed dinos with species, level, stats, owner info
  • Structure Extraction - Parse buildings with categories (Storage, Defense, Crafting, etc.)
  • Real-time Save Watching - Monitor save directory for changes with callbacks
  • Historical Tracking - SQLite-based analytics for player progression, tribe growth
  • Full Player Stats - Health, stamina, weight, oxygen, food, water, melee, speed

Version 0.1.9

  • Full Player Stats - Extract all character stats from save files
  • PlayerStatsReader - Dedicated class for stat extraction

Version 0.1.7

  • Cluster Transfers - Parse ClusterObjects folder for uploaded items/dinos/characters
  • Transfer Tracking - scan_cluster_folder() categorizes transfers by type
  • Cluster Statistics - get_cluster_summary() for storage metrics

Version 0.1.6

  • Performance Tools - Profiling, benchmarking, and optimization utilities
  • Memory-Mapped Files - OptimizedReader for large files (>50MB)

Version 0.1.5

  • Async Support - New AsyncArkSaveReader for non-blocking file I/O
  • Discord Bot Friendly - Perfect for Discord.py with sync methods

Version 0.1.4

  • Bundled Default XP Table - No external JSON required
  • Enhanced Inventory Parser - Full struct array parsing

Installation

pip install ark-asa-parser

For async support:

pip install ark-asa-parser[async]

Quick Start

from ark_asa_parser import ArkSaveReader
from pathlib import Path

# Initialize reader with path to save directory
save_dir = Path("SavedArks/TheIsland_WP")
reader = ArkSaveReader(save_dir)

# Get all players
players = reader.get_all_players()
for player in players:
    print(f"{player.player_name} ({player.character_name})")
    print(f"  Tribe ID: {player.tribe_id}")
    print(f"  Level: {player.level}")

# Get all tribes
tribes = reader.get_all_tribes()
for tribe in tribes:
    print(f"{tribe.tribe_name}")
    print(f"  Owner: {tribe.owner_name}")
    print(f"  Members: {tribe.member_count}")

Dino Extraction

from ark_asa_parser import DinoExtractor
from pathlib import Path

world_ark = Path("SavedArks/TheIsland_WP/TheIsland_WP.ark")

# Get all tamed dinos
dinos = DinoExtractor.extract_dinos_from_world(world_ark)

for dino in dinos:
    print(f"{dino.species_name} - Level {dino.level}")
    if dino.dino_name:
        print(f"  Name: {dino.dino_name}")
    if dino.owner_name:
        print(f"  Owner: {dino.owner_name}")

# Get dino species summary
summary = DinoExtractor.get_dino_summary(world_ark)
for species, count in summary.items():
    print(f"{species}: {count}")

# Get dinos for a specific tribe
tribe_dinos = DinoExtractor.get_tribe_dinos(world_ark, tribe_id=123456)

Structure Extraction

from ark_asa_parser import StructureExtractor
from pathlib import Path

world_ark = Path("SavedArks/TheIsland_WP/TheIsland_WP.ark")

# Get all structures
structures = StructureExtractor.extract_structures_from_world(world_ark)

# Get structure summary with categories
summary = StructureExtractor.get_structure_summary(world_ark)
print(f"Total structures: {summary['total']}")
for category, count in summary['by_category'].items():
    print(f"  {category}: {count}")

# Get structures for a tribe
tribe_structures = StructureExtractor.get_tribe_structures(world_ark, tribe_id=123456)

Real-time Save Watching

from ark_asa_parser import SaveWatcher, AsyncSaveWatcher
from pathlib import Path

# Thread-based watching
save_dir = Path("SavedArks/TheIsland_WP")

def on_change(event):
    print(f"[{event.event_type}] {event.file_path.name}")
    if event.player_id:
        print(f"  Player: {event.player_id}")

watcher = SaveWatcher(save_dir, poll_interval=10.0)
watcher.add_callback(on_change)
watcher.start()

# For Discord bots - use AsyncSaveWatcher
async def setup_watcher(bot):
    async def on_player_join(event):
        if event.event_type == 'player_join':
            channel = bot.get_channel(CHANNEL_ID)
            await channel.send(f"Player joined: {event.player_id}")
    
    watcher = AsyncSaveWatcher(save_dir)
    watcher.add_callback(on_player_join)
    await watcher.start()

Historical Tracking

from ark_asa_parser import HistoricalTracker, PlayerSnapshot
from pathlib import Path
from datetime import datetime

# Initialize tracker with SQLite database
tracker = HistoricalTracker(Path("ark_history.db"))

# Record player snapshots
snapshot = PlayerSnapshot(
    timestamp=datetime.now(),
    eos_id="player_eos_id",
    player_name="PlayerName",
    character_name="CharName",
    level=85,
    experience=1234567.0,
    tribe_id=123456,
    server_name="TheIsland"
)
tracker.record_player_snapshot(snapshot)

# Get player progression over time
progression = tracker.get_player_level_progression("player_eos_id")

# Get top level gainers
top_players = tracker.get_top_level_gainers(days=7, limit=10)

# Get server population history
population = tracker.get_server_population_history("TheIsland", days=7)

# Activity summary
summary = tracker.get_activity_summary(days=7)
print(f"Unique players: {summary['unique_players']}")

Full Player Stats

from ark_asa_parser import PlayerStatsReader
from pathlib import Path

profile_path = Path("SavedArks/TheIsland_WP/player.arkprofile")

# Extract all character stats
stats = PlayerStatsReader.extract_player_stats(profile_path)

print(f"Health: {stats.health}")
print(f"Stamina: {stats.stamina}")
print(f"Weight: {stats.weight}")
print(f"Melee: {stats.melee_damage}")
print(f"Speed: {stats.movement_speed}")

Scanning Multiple Servers

from ark_asa_parser import scan_all_servers
from pathlib import Path

cluster_path = Path("R:/PhoenixArk")
servers = scan_all_servers(cluster_path)

for server_name, reader in servers.items():
    print(f"\nServer: {server_name}")
    players = reader.get_all_players()
    tribes = reader.get_all_tribes()
    print(f"  Players: {len(players)}")
    print(f"  Tribes: {len(tribes)}")

Data Classes

PlayerData

@dataclass
class PlayerData:
    eos_id: str              # Epic Online Services ID
    player_name: str         # Epic Games account name
    character_name: str      # In-game character name
    tribe_id: int           # Tribe membership ID
    level: int              # Character level
    experience: float       # Experience points

DinoData

@dataclass
class DinoData:
    species_name: str       # "Rex", "Raptor", etc.
    dino_name: str          # Custom name if set
    level: int              # Current level
    owner_name: str         # Owner player name
    tribe_id: int           # Owning tribe ID
    health: float           # Current health
    # ... and more stats

StructureData

@dataclass
class StructureData:
    structure_type: str     # "StorageBox", "Wall", etc.
    structure_name: str     # Custom name if set
    health: float           # Current health
    owner_name: str         # Owner name
    tribe_id: int           # Owning tribe
    is_locked: bool         # Lock status

Requirements

  • Python 3.8+
  • No external dependencies for core features
  • Optional: aiofiles for async support

Development Status

Implemented

  • Player name and character extraction
  • Tribe name and member lists
  • Full player stats (health, stamina, weight, etc.)
  • Tamed dino extraction from world saves
  • Structure/building data extraction
  • Real-time save file monitoring
  • Historical data tracking and analytics
  • Cluster transfer tracking
  • Async support
  • Performance optimization tools
  • Multi-server scanning

Contributing

Contributions are welcome! See CONTRIBUTING.md for guidelines.

License

MIT License - See LICENSE file for details

Credits

Developed by BoldPhoenix for the ARK: Survival Ascended community.

Support

Metadata

Release files for ark-asa-parser 0.2.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ark-asa-parser 0.2.4
File Size Uploaded Provenance
ark_asa_parser-0.2.4.tar.gz 46.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for ark-asa-parser 0.2.4
File Interpreter ABI Platform
ark_asa_parser-0.2.4-py3-none-any.whl Python 3 none any Details

Total release size: 86.1 kB

Release files / ark_asa_parser-0.2.4.tar.gz

Download URL ark_asa_parser-0.2.4.tar.gz
Size 46.5 kB
Tags Source
SHA-256 checksum
How to use checksums
7b7e1554b9eb3edf42b406df75f687b9b87d16fd56b39d07c647c013017935c6
BLAKE2b-256 checksum
How to use checksums
dd13a6ffee3f66d480ce03af4fc15eeca1f718d03600c559bf07fff50fd6d886
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release files / ark_asa_parser-0.2.4-py3-none-any.whl

Download URL ark_asa_parser-0.2.4-py3-none-any.whl
Size 39.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ee41121c7f83faad18de250586571f2988616904780a52e5e04fa56973fa6e57
BLAKE2b-256 checksum
How to use checksums
a7cd458e75da21b05056d1cc64990bc09a47de06dbd0dd30577cdbb7dcea657e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Security for ark-asa-parser 0.2.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page