# User Cohort Forensics

> Investigates individual users and user populations in Amplitude — resolve users by email/ID, read profiles, batch-analyze event timelines, spot-check cohort membership. Use for "what did user X do", attribution audits, population sampling, and email-to-user-ID resolution.

- Skill: `amplitude/user-cohort-forensics` (Agent Skill)
- Install (CLI): `npx skillmds@latest add amplitude/user-cohort-forensics`
- Raw SKILL.md: https://api.skillmd.com/api/skills/amplitude/user-cohort-forensics/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: amplitude (https://skillmd.com/u/amplitude)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/amplitude/user-cohort-forensics

---


# User & Cohort Forensics

## The arcs

**Single user deep-dive:** `get_amp_user_data` `include: 'id'` (resolve the
user: email, user ID, device ID, or amplitude ID) → `include: 'profile'`
(lifecycle, acquisition, usage stats) → `include: 'timeline'` (session-aware
event history). `include: 'both'` gets profile + timeline in one call when
you know you'll need both. Summarize journeys; don't dump raw events.

**Population analysis (batched):** build the user set first
(`query_amplitude_data` with a user-ID group_by to rank by volume, or
`use_amplitude_cohorts` `action: 'find'` for a filtered set) →
`get_amp_user_data` `include: 'timeline'` in parallel batches — up to 10
identifiers per call, 10–20 calls in flight is normal for population
analysis; hundreds of calls total is fine. Keep each call narrow (event
types, window) so responses stay small.

**Cohort spot-check:** prefer existing cohorts — `use_amplitude_cohorts`
`action: 'list'` or `action: 'get'` before building ad
hoc definitions. `action: 'membership'` verifies specific users. Check a
member's timeline for the exact markers (purchase, typing, checkout events)
rather than trusting the cohort definition blindly.

**Email → ID resolution:** `get_amp_user_data` `include: 'id'` per email;
uploaded email lists are resolved in batches of ≤10 identifiers per call.
For bulk exports, batch and note the retry pattern on individual failures.

## Parameterization notes

- `include: 'timeline'`: always bound the window (last 30 days by default)
  and pass event-type filters when you know what you're looking for —
  unfiltered timelines are large and slow.
- Rate-limit failures come back flagged `retryable` with `retryAfterMs` —
  back off instead of churning.
- User identity: a user can match multiple IDs (device, user, email). Say
  which identity you resolved and flag ambiguous matches instead of picking
  one silently.

