Skip to main content

Bulk-upload Steam achievements to the Steamworks partner portal via browser automation

Project description

steam-ach-upload

Bulk-upload Steam achievements to the Steamworks partner portal using browser automation (Playwright). Reads a CSV file of achievements and uploads each one — including icons — without you having to click through the portal manually.

Features

  • Uploads name, description, achieved icon, and unachieved icon for every achievement in one run
  • Browser opens visibly so you can monitor progress and intervene if needed
  • Login session is persisted, so you only authenticate once
  • --start N lets you resume mid-way after a failure
  • --dry-run prints the upload plan without touching the browser

Requirements

  • Python 3.10+
  • uv (recommended) or pip

Installation

From source (recommended for development)

git clone https://github.com/rhedak/steam_achievement_bulk_upload
cd steam-ach-upload
uv sync
uv run playwright install chromium

From PyPI (once published)

pip install steam-ach-upload
playwright install chromium

CSV format

Create a CSV file with the following columns (see sample/achievements.csv for an example):

Column Description
API Name Steam internal achievement identifier (e.g. ACH_FIRST_STEPS)
Display Name (EN) Name shown to players
Description (EN) Description shown to players
Achieved Icon Path to unlocked icon, relative to the CSV file
Unachieved Icon Path to locked icon, relative to the CSV file

Icon paths are resolved relative to the CSV file's directory, so you can keep icons in a subfolder next to the CSV (e.g. icons/my_ach_done.png).

Usage

# Upload all achievements
steam-ach-upload 1234567 path/to/achievements.csv

# Preview what would be uploaded (no browser)
steam-ach-upload 1234567 path/to/achievements.csv --dry-run

# Resume from row 15 after a failure
steam-ach-upload 1234567 path/to/achievements.csv --start 15

# Use a custom directory for the browser session
steam-ach-upload 1234567 path/to/achievements.csv --profile-dir ~/.steam_browser_session

# Debug: open browser, click New Achievement once, print page HTML, then exit
steam-ach-upload 1234567 path/to/achievements.csv --debug

Replace 1234567 with your actual Steam App ID, found in the Steamworks dashboard URL: https://partner.steamgames.com/apps/achievements/YOUR_APP_ID

First run / login

On first run the browser will open to the achievements page. Log in with your Steamworks account, then the upload will start automatically. Subsequent runs reuse the saved session.

Running with uv (no install)

uv run --with steam-ach-upload steam-ach-upload 1234567 achievements.csv

Or from a local clone:

uv run python -m steam_ach_upload 1234567 achievements.csv

Running tests

uv run pytest

How it works

The portal requires achievements to be saved before icons can be attached. The tool therefore uploads each achievement in two passes:

  1. Fill in the API name, display name, and description → Save
  2. Re-open the saved row via Edit → upload achieved icon → upload unachieved icon → Save

If a row fails, the error is printed with the --start N command to retry from that point.

License

See LICENSE.

Disclaimer

Built with support by Claude Code.

Self-Promotion

If this package has been at all helpful to you consider checking out my game.

Steam

Itcho.io

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

steam_ach_upload-0.1.0.tar.gz (30.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

steam_ach_upload-0.1.0-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file steam_ach_upload-0.1.0.tar.gz.

File metadata

  • Download URL: steam_ach_upload-0.1.0.tar.gz
  • Upload date:
  • Size: 30.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for steam_ach_upload-0.1.0.tar.gz
Algorithm Hash digest
SHA256 324658fc08e75e37004817141d8a488e7671c35792935efea0c7c796512c81fa
MD5 05cabc68a63797f6f8d9251ab4e3f637
BLAKE2b-256 ee37637f62af46b0ca857de7a1cadb083cad00d2ce3db911069e7676f5d988e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for steam_ach_upload-0.1.0.tar.gz:

Publisher: publish.yml on rhedak/steam_achievement_bulk_upload

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file steam_ach_upload-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for steam_ach_upload-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 58ae91a62e6729054b77a55a3e2d050121fabea1d5e998bb1d67d8defc8ffbac
MD5 55778aebab9db61fee765e4231718955
BLAKE2b-256 77809fdcabde774b79e22515463488494997b01157212476f36ea7a803052bd1

See more details on using hashes here.

Provenance

The following attestation bundles were made for steam_ach_upload-0.1.0-py3-none-any.whl:

Publisher: publish.yml on rhedak/steam_achievement_bulk_upload

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page