Query PostHog analytics data using HogQL (SQL-like queries). Use when asked about analytics, events, user behavior, funnels, page views, or any PostHog data. Supports arbitrary HogQL queries with ASCII table output.
Resources
4Install
npx skillscat add skyfallsin/pi-skill-posthog Install via the SkillsCat registry.
SKILL.md
PostHog
Query PostHog analytics via HogQL.
Setup
Set environment variables (add to ~/.zshenv or similar):
export POSTHOG_API_KEY="phx_..." # Personal API key from PostHog settings
export POSTHOG_PROJECT_ID="12345" # Project ID from PostHog URL
export POSTHOG_HOST="https://us.posthog.com" # or https://eu.posthog.comGet your API key: PostHog → Settings → Personal API Keys → Create
Usage
Run a HogQL query
node scripts/query.js "SELECT event, count() as cnt FROM events WHERE timestamp > now() - interval 1 day GROUP BY event ORDER BY cnt DESC LIMIT 20"Common queries
Events today:
node scripts/query.js "SELECT event, count() as cnt FROM events WHERE timestamp > now() - interval 1 day GROUP BY event ORDER BY cnt DESC LIMIT 20"Unique users (last 7 days):
node scripts/query.js "SELECT count(DISTINCT person_id) as unique_users FROM events WHERE timestamp > now() - interval 7 day"Page views by URL:
node scripts/query.js "SELECT properties.\$current_url as url, count() as views FROM events WHERE event = '\$pageview' AND timestamp > now() - interval 7 day GROUP BY url ORDER BY views DESC LIMIT 20"Events for a specific user:
node scripts/query.js "SELECT event, timestamp, properties FROM events WHERE person_id = 'xxx' AND timestamp > now() - interval 1 day ORDER BY timestamp DESC LIMIT 50"Funnel-style sequential query:
node scripts/query.js "SELECT event, count() as cnt FROM events WHERE event IN ('\$pageview', 'sign_up', 'purchase') AND timestamp > now() - interval 30 day GROUP BY event ORDER BY cnt DESC"Event properties breakdown:
node scripts/query.js "SELECT properties.\$browser as browser, count() as cnt FROM events WHERE event = '\$pageview' AND timestamp > now() - interval 7 day GROUP BY browser ORDER BY cnt DESC LIMIT 10"Options
--limit N— Override result limit (default: 100)--json— Output raw JSON instead of ASCII table--csv— Output CSV format
HogQL Reference
HogQL is PostHog's SQL dialect over ClickHouse. Key tables:
events— all tracked events (event, timestamp, person_id, properties.*)persons— person profiles (id, properties.*)sessions— session data
Common properties accessed via properties.$prop_name:
properties.$current_url,properties.$browser,properties.$osproperties.$referring_domain,properties.$screen_height- Custom properties:
properties.my_custom_prop
Time functions: now(), interval N day/hour/minute, toDate(), toStartOfDay()