{"library":"minimal-snowplow-tracker","title":"Minimal Snowplow Tracker","description":"minimal-snowplow-tracker is a Python library that provides a minimal event tracker for Snowplow analytics. It is a fork of the original `snowplow-python-tracker` (v0.8.0), stripped down to include only basic emitters and support for structured and unstructured event tracking. Last released in 2018 as version 0.0.2, it is primarily maintained as an internal dependency for projects like dbt-core for anonymous usage tracking, rather than an actively developed standalone library.","language":"python","status":"maintenance","last_verified":"Sat May 16","install":{"commands":["pip install minimal-snowplow-tracker"],"cli":null},"imports":["from snowplow_tracker import Tracker","from snowplow_tracker import Emitter"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom snowplow_tracker import Tracker, Emitter\nfrom snowplow_tracker.self_describing_json import SelfDescribingJson\n\n# Replace with your Snowplow Collector endpoint\nCOLLECTOR_URL = os.environ.get('SNOWPLOW_COLLECTOR_URL', 'http://localhost:9090')\n\n# Initialize an emitter to send events to the collector\nemitter = Emitter(COLLECTOR_URL)\n\n# Initialize the tracker with a namespace and application ID\ntracker = Tracker(emitters=[emitter], namespace='my_app_namespace', app_id='my-python-app')\n\n# Track a structured event\ntracker.track_struct_event(\n    category='example_category',\n    action='example_action',\n    label='example_label',\n    property='example_property',\n    value=1.0\n)\n\n# Track an unstructured event with a self-describing JSON schema\nexample_schema = 'iglu:com.example_company/example_event/jsonschema/1-0-0'\nexample_data = {\n    'event_detail': 'This is an unstructured event',\n    'session_id': 'abc-123'\n}\nunstructured_event = SelfDescribingJson(example_schema, example_data)\ntracker.track_unstruct_event(unstructured_event)\n\nprint(f\"Events sent to {COLLECTOR_URL} using minimal-snowplow-tracker.\")\n# In a real application, you might want to gracefully close the emitter or ensure all events are sent.\n# For simple scripts, events are often sent synchronously or on program exit.","lang":"python","description":"This quickstart demonstrates how to initialize the tracker and send a structured event and an unstructured event. It uses the `snowplow_tracker` import path, which is the internal module name for `minimal-snowplow-tracker`. You will need a running Snowplow Collector (e.g., Snowplow Mini) at `COLLECTOR_URL` to receive events.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"0.0.2","pypi_latest":"0.0.2","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3,"avg_import_s":0.61,"wheel_type":"sdist"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"minimal-snowplow-tracker","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.54,"mem_mb":10.2,"disk_size":"22.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"minimal-snowplow-tracker","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":2.7,"import_time_s":0.42,"mem_mb":10.2,"disk_size":"23M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"minimal-snowplow-tracker","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.73,"mem_mb":11.2,"disk_size":"25.4M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"minimal-snowplow-tracker","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":2.7,"import_time_s":0.65,"mem_mb":11.2,"disk_size":"26M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"minimal-snowplow-tracker","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.66,"mem_mb":11.6,"disk_size":"15.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"minimal-snowplow-tracker","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.4,"import_time_s":0.74,"mem_mb":11.6,"disk_size":"16M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"minimal-snowplow-tracker","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.66,"mem_mb":11.9,"disk_size":"15.0M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"minimal-snowplow-tracker","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.3,"import_time_s":0.63,"mem_mb":11.9,"disk_size":"15M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"minimal-snowplow-tracker","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.57,"mem_mb":9.8,"disk_size":"22.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"minimal-snowplow-tracker","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.1,"import_time_s":0.47,"mem_mb":9.8,"disk_size":"23M"}]}}