{"id":36695474,"url":"https://github.com/aptabase/aptabase-python","last_synced_at":"2026-01-12T11:30:18.153Z","repository":{"id":328340936,"uuid":"1115127788","full_name":"aptabase/aptabase-python","owner":"aptabase","description":"Python SDK for Aptabase: Open Source, Privacy-First and Simple Analytics for Mobile, Desktop and Web Apps","archived":false,"fork":false,"pushed_at":"2025-12-12T17:20:49.000Z","size":134,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-14T04:29:03.315Z","etag":null,"topics":["analytics","aptabase","privacy","python"],"latest_commit_sha":null,"homepage":"https://aptabase.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aptabase.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-12T11:33:52.000Z","updated_at":"2025-12-12T17:20:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aptabase/aptabase-python","commit_stats":null,"previous_names":["aptabase/aptabase-python"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/aptabase/aptabase-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aptabase%2Faptabase-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aptabase%2Faptabase-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aptabase%2Faptabase-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aptabase%2Faptabase-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aptabase","download_url":"https://codeload.github.com/aptabase/aptabase-python/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aptabase%2Faptabase-python/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T10:58:46.209Z","status":"ssl_error","status_checked_at":"2026-01-12T10:58:42.742Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analytics","aptabase","privacy","python"],"created_at":"2026-01-12T11:30:13.282Z","updated_at":"2026-01-12T11:30:18.120Z","avatar_url":"https://github.com/aptabase.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aptabase Python SDK\n\n[![PyPI downloads](https://img.shields.io/pypi/dm/aptabase.svg)](https://pypi.org/project/aptabase/)\n[![PyPI - Version](https://img.shields.io/pypi/v/aptabase)](https://img.shields.io/pypi/v/aptabase)\n[![Python versions](https://img.shields.io/pypi/pyversions/aptabase.svg)](https://pypi.org/project/aptabase/)\n\n\nPython SDK for [Aptabase](https://aptabase.com/) - privacy-first analytics for mobile, desktop and web applications.\n\n## Features\n\n- 🚀 **Fully async** - Built with `httpx` and `asyncio`\n- 🔒 **Privacy-first** - No personal data collection\n- 🏃 **Modern Python** - Requires Python 3.11+\n- 🔄 **Auto-batching** - Efficient event batching and flushing\n- ⚡ **Lightweight** - Minimal dependencies\n\n## Installation\n\n```bash\nuv add aptabase\n# or\npip install aptabase\n```\n\n## Quick Start\n\n```python\nimport asyncio\nfrom aptabase import Aptabase\n\nasync def main():\n    async with Aptabase(\"A-EU-1234567890\") as client:\n        # Track a simple event\n        await client.track(\"app_started\")\n\n        # Track an event with properties\n        await client.track(\"user_action\", {\n            \"action\": \"button_click\",\n            \"button_id\": \"login\",\n            \"screen\": \"home\"\n        })\n\n        # Events are automatically flushed, but you can force it\n        await client.flush()\n\nasyncio.run(main())\n```\n\n## Samples\n\n- [Simple Script](https://github.com/aptabase/aptabase-python/tree/main/samples/simple-script)\n- [Textual Counter App](https://github.com/aptabase/aptabase-python/tree/main/samples/textual-counter)\n- [Textual Dashboard App](https://github.com/aptabase/aptabase-python/tree/main/samples/textual-dashboard)\n\n## Configuration\n\n```python\nclient = Aptabase(\n    app_key=\"A-EU-1234567890\",          # Your Aptabase app key\n    app_version=\"1.2.3\",                # Your app version\n    is_debug=False,                     # Enable debug mode\n    max_batch_size=25,                  # Max events per batch (max 25)\n    flush_interval=10.0,                # Auto-flush interval in seconds\n    timeout=30.0                        # HTTP timeout in seconds\n)\n```\n\n## App Key Format\n\nYour app key determines the server region:\n- `A-EU-*` - European servers\n- `A-US-*` - US servers\n\nGet your app key from the [Aptabase dashboard](https://aptabase.com/).\n\n## Event Tracking\n\n### Simple Events\n\n```python\nawait client.track(\"page_view\")\n```\n\n### Events with Properties\n\n```python\nawait client.track(\"purchase\", {\n    \"product_id\": \"abc123\",\n    \"price\": 29.99,\n    \"currency\": \"USD\"\n})\n```\n\n## Lifecycle\n\n### Context Manager\n\n```python\nasync with Aptabase(\"A-EU-1234567890\") as client:\n    await client.track(\"event\")\n    # Automatically handles start/stop and flushing\n```\n\n### Manual\n\n```python\nclient = Aptabase(\"A-EU-1234567890\")\nawait client.start()\ntry:\n    await client.track(\"event\")\nfinally:\n    await client.stop()  # Ensures all events are flushed\n```\n\n## Error Handling\n\n```python\nfrom aptabase import Aptabase, AptabaseError, NetworkError\n\ntry:\n    async with Aptabase(\"A-EU-1234567890\") as client:\n        await client.track(\"event\")\nexcept NetworkError as e:\n    print(f\"Network error: {e}, status: {e.status_code}\")\nexcept AptabaseError as e:\n    print(f\"Aptabase error: {e}\")\n```\n\n## Development\n\nInstall development dependencies:\n\n```bash\nuv sync --dev\n```\n\nRun tests:\n\n```bash\nuv run pytest\n```\n\nCode formatting:\n\n```bash\nuv run ruff check .\n```\n\nType checking:\n\n```bash\nuv run mypy .\n```\n\n## License\n\n[MIT License](LICENSE)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faptabase%2Faptabase-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faptabase%2Faptabase-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faptabase%2Faptabase-python/lists"}