AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a systematic approach to instrumenting FastAPI applications with PostHog. It covers the full lifecycle of integration, from initial setup and configuration to advanced implementation patterns like user identification, custom event tracking, feature flags, and error reporting. The skill emphasizes best practices such as using environment variables for sensitive keys, leveraging FastAPI's dependency injection, and maintaining a clean separation between event properties and user identification data to ensure privacy.
What it does
- Provides a step-by-step workflow for PostHog integration.
- Demonstrates how to initialize PostHog within FastAPI's lifespan context manager.
- Shows how to implement user identification and property tracking.
- Explains how to capture custom events and manage feature flags.
- Guides the implementation of manual exception tracking for critical API operations.
- Enforces security best practices regarding PII and environment variable usage.
When to use it
- When you need to add analytics to a new or existing FastAPI project.
- When you want to track user behavior, conversion funnels, or churn.
- When you need to implement feature flags to control application functionality.
- When you need to improve observability through automated and manual error tracking.
Advantages
- Follows established patterns for FastAPI dependency injection and configuration.
- Ensures consistent event tracking across server-side business logic.
- Promotes secure handling of sensitive data and API keys.
- Includes clear examples for complex tasks like user correlation between frontend and backend.
Usage examples
- “How do I initialize PostHog in my FastAPI app?”
- The skill guides you to use the lifespan context manager, configuring the Posthog() constructor with your project token and host, and ensuring proper shutdown with atexit.
- “How should I track user signups in FastAPI?”
- The skill demonstrates using the context-based API to identify the user via email and capture the 'user_signed_up' event with relevant properties.
- “How do I track errors in my API routes?”
- The skill provides a pattern for wrapping critical operations in a try-except block and using posthog.capture_exception(e) to report failures.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/posthog/integration-fastapi/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip integration-fastapi.zip -d .agents/skills
Documentation by PostHog
PostHog integration for FastAPI
This skill helps you add PostHog analytics to FastAPI applications.
Workflow
Follow these steps in order to complete the integration:
basic-integration-1.0-begin.md- PostHog Setup - Begin ← Start herebasic-integration-1.1-edit.md- PostHog Setup - Editbasic-integration-1.2-revise.md- PostHog Setup - Revisebasic-integration-1.3-conclude.md- PostHog Setup - Conclusion
Reference files
references/EXAMPLE.md- FastAPI example project codereferences/python.md- Python - docsreferences/identify-users.md- Identify users - docsreferences/basic-integration-1.0-begin.md- PostHog setup - beginreferences/basic-integration-1.1-edit.md- PostHog setup - editreferences/basic-integration-1.2-revise.md- PostHog setup - revisereferences/basic-integration-1.3-conclude.md- PostHog setup - conclusion
The example project shows the target implementation pattern. Consult the documentation for API details.
Key principles
Environment variables: Always use environment variables for PostHog keys. Never hardcode them.
Minimal changes: Add PostHog code alongside existing integrations. Don't replace or restructure existing code.
Match the example: Your implementation should follow the example project's patterns as closely as possible.
Framework guidelines
Initialize PostHog in the lifespan context manager on startup using posthog.api_key and posthog.host
Call posthog.flush() in the lifespan shutdown to ensure all events are sent before the app exits
Use Pydantic Settings with @lru_cache decorator on get_settings() for caching and easy test overrides
Use FastAPI dependency injection (Depends) for accessing current_user and settings in route handlers
Use the same context API pattern as Flask/Django (with new_context(), identify_context(user_id), then capture())
Remember that source code is available in the venv/site-packages directory
posthog is the Python SDK package name
Install dependencies with
pip install posthogorpip install -r requirements.txtand do NOT use unquoted version specifiers like>=directly in shell commandsIn CLIs and scripts: MUST call posthog.shutdown() before exit or all events are lost
Always use the Posthog() class constructor (instance-based API) instead of module-level posthog.api_key config
Always include enable_exception_autocapture=True in the Posthog() constructor to automatically track exceptions
NEVER send PII in capture() event properties — no emails, full names, phone numbers, physical addresses, IP addresses, or user-generated content
PII belongs in identify() person properties, NOT in capture() event properties. Safe event properties are metadata like message_length, form_type, boolean flags.
Register posthog_client.shutdown with atexit.register() to ensure all events are flushed on exit
The Python SDK has NO identify() method — use posthog_client.set(distinct_id=user_id, properties={...}) to set person properties, or use identify_context(user_id) within a context
Identifying users
Identify users during login and signup events. Refer to the example code and documentation for the correct identify pattern for this framework. If both frontend and backend code exist, pass the client-side session and distinct ID using X-POSTHOG-DISTINCT-ID and X-POSTHOG-SESSION-ID headers to maintain correlation.
Error tracking
Add PostHog error tracking to relevant files, particularly around critical user flows and API boundaries.
Files
- ATTRIBUTION.mdAdded by AutoGineer957 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md3.6 KiB
- references/EXAMPLE.md40.9 KiB
- references/basic-integration-1.0-begin.md2.1 KiB
- references/basic-integration-1.1-edit.md2.5 KiB
- references/basic-integration-1.2-revise.md937 B
- references/basic-integration-1.3-conclude.md1.6 KiB
- references/identify-users.md8.1 KiB
- references/python.md31.1 KiB
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an API key, Needs Python
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- PostHog
- Publisher
- PostHog (Official)
- Source
- PostHog/skills · skills/posthog/integration/skills/fastapi · commit a5d30e7
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Also distributed in
- PostHog/skills
AutoGineer is not affiliated with or endorsed by PostHog or PostHog.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download integration-fastapi.zip