CtrlK
BlogDocsLog inGet started
Tessl Logo

filtering-bot-traffic

Identify, measure, and exclude bot / crawler / AI-agent traffic in PostHog web and product analytics using the traffic classification surface (the isLikelyBot / getTrafficType HogQL functions and the $virt_* virtual properties). Use when the user asks to "exclude bots", "filter out crawlers", "remove bot traffic from my numbers", "how much of my traffic is bots / AI crawlers", "is GPTBot / ChatGPT / Claude hitting my site", "break down traffic by human vs bot", or wants clean human-only counts in an insight or dashboard. For the real-time Live tab bot tiles, use exploring-live-traffic instead.

73

Quality

90%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

80%

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A dense, actionable skill body with excellent copy-paste recipes and no padding, covering the classification surface thoroughly. It loses points only on the multi-step server-log ingestion workflow lacking an explicit checkpoint sequence and on keeping large reference tables inline rather than splitting them into a one-level-deep reference file.

Suggestions

In 'Seeing bots that don't run JS', replace the implicit path with an explicit numbered sequence with a checkpoint, e.g. 1) confirm whether $http_log events are ingested, 2) if not, point the user to server-side capture (Vercel logs / edge worker / capture API), 3) only then build bot insights.

Move the virtual-property and HogQL-function reference tables into a single references file (e.g. references/classification-api.md) and link to it from SKILL.md so the main file is a lean overview with one-level-deep navigation.

Tighten the duplicated keep-vs-drop framing: keep the per-bucket 'default move' only in the traffic-types table and trim the overlapping bullets from the intro.

DimensionReasoningScore

Conciseness

The body assumes Claude's knowledge (no explaining what PostHog, HogQL, or analytics are) and goes straight to classification surfaces, tables, and copy-paste recipes; the only minor redundancy is the keep-vs-drop framing appearing in both the intro bullets and the traffic-types table, but it stays above the 'could be tightened' bar of a 2.

3 / 3

Actionability

Provides fully executable, copy-paste-ready JSON property filters, TrendsQuery objects, and SQL with a real coalesce/nullIf user-agent expression, so it clears the 'fully executable, copy-paste ready' anchor rather than the pseudocode level of a 2.

3 / 3

Workflow Clarity

Recipes are clear and unambiguous single actions (the simple-skill guideline permits a 3 for those), but the genuine multi-step path in 'Seeing bots that don't run JS' (no JS fired -> need server log ingestion -> then build bot insights) has an implicit rather than explicit ordered sequence with no validation checkpoint, landing at the 'steps present but checkpoints implicit' level of a 2.

2 / 3

Progressive Disclosure

The file is well-organized with clear sections, tables, and recipes, but at ~177 lines it exceeds the under-50-line simple-skill carve-out, keeps the substantial property/function reference tables inline, and references only a single internal source path rather than signaled one-level-deep reference files, so it sits at 'some structure but content that should be separate is inline' rather than a 3.

2 / 3

Total

10

/

12

Passed

Description

100%

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong, specific description that clearly states what the skill does, gives a rich set of natural trigger phrases, and explicitly carves out its scope against the sibling exploring-live-traffic skill. It is concise yet comprehensive with no fluff.

DimensionReasoningScore

Specificity

Names three concrete actions ("Identify, measure, and exclude bot / crawler / AI-agent traffic") and the exact surface (isLikelyBot, getTrafficType, $virt_* virtual properties), which exceeds the 'names some actions' bar of a 2.

3 / 3

Completeness

Explicitly answers both what (identify/measure/exclude bot traffic via the named functions and virtual properties) and when via a full "Use when the user asks to..." clause, satisfying the both-what-and-when anchor.

3 / 3

Trigger Term Quality

Quotes many natural phrasings users would actually say ("exclude bots", "filter out crawlers", "is GPTBot / ChatGPT / Claude hitting my site", "break down traffic by human vs bot"), with broad coverage well beyond the 'some keywords' level of a 2.

3 / 3

Distinctiveness Conflict Risk

Has a clear PostHog bot-classification niche with distinct triggers and actively disambiguates from a sibling skill ("For the real-time Live tab bot tiles, use exploring-live-traffic instead"), so it is unlikely to trigger for the wrong skill.

3 / 3

Total

12

/

12

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository
PostHog/posthog
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.