# Fullstory Org Discovery

> Discover and document a Fullstory org's structure — funnels, pages, events, named elements, and StoryAI opportunities — into a persistent context file at ~/claude/accounts/{slug}-fullstory-context.md. This context file is then loaded by analysis skills (conversion investigation, CX health brief, POC insight finder) so they can run without rediscovering the org each time. Use this skill whenever someone says "discover the org", "learn this Fullstory org", "run org discovery", "set up Fullstory context", or "analyse this Fullstory org". Also trigger when someone asks what a Fullstory org contains, wants to understand its structure, or is about to run a POC and needs to orient themselves in the data.

- Skill: `aaronbali/fullstory-org-discovery` (Agent Skill)
- Install (CLI): `npx skillmds@latest add aaronbali/fullstory-org-discovery`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aaronbali/fullstory-org-discovery/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Product & Planning
- Author: aaronbali (https://skillmd.com/u/aaronbali)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/aaronbali/fullstory-org-discovery

---


# Fullstory Org Discovery

The goal is to produce a concise, accurate context file that captures the signal from a Fullstory org in a form that's immediately useful to both humans and analysis skills. Quality matters more than completeness — a curated file of 20 meaningful entries is far more useful than a raw dump of 200 auto-learned pages.

## Step 1 — Identify the org

If the org name or slug hasn't been provided, ask before proceeding:

> "What's the org name or slug? I'll save the context file to ~/claude/accounts/{slug}-fullstory-context.md."

Once you have a name, derive a slug (lowercase, hyphens, no spaces) and the output path.

## Step 2 — Parallel discovery

Fire all four of these simultaneously — they're independent and waiting is wasteful:

1. `get_managed_funnels()` — all defined funnels
2. `get_pages(regex=null)` — full page list (you'll curate this in Step 3)
3. `discover_org_context` with these queries and limit=5:
   ```
   checkout, purchase, order, cart, payment,
   login, signup, register,
   search, filter,
   confirm, success, complete, thank you,
   error, failed,
   product, listing, item,
   conversion, revenue
   ```
4. `get_opportunities(time_range="30d")` — StoryAI's pre-ranked issues org-wide

## Step 3 — Curate pages

The raw page list may contain hundreds of auto-learned entries. Keep:
- **All user-defined pages** — these are always meaningful, whatever they're named
- **Auto-learned pages** whose name or friendly_id contains any of: `checkout`, `cart`, `product`, `search`, `login`, `register`, `sign`, `confirm`, `order`, `home`, `landing`, `account`, `error`, `404`, `basket`, `booking`, `payment`, `success`, `thank`

Discard: root-only paths (`/`), UUID/hash paths, pages with no recognisable business purpose.

The goal is a curated list that a trading manager or COO could read and immediately understand — not an exhaustive inventory.

## Step 3b — Validate events against key pages

Pick the top pages by funnel importance — include all pages that appear in funnels, then fill remaining slots with high-signal pages (home, search results, PDP) up to a maximum of 10. Call `discover_groups` for each in parallel:

```
discover_groups(page_id=X, relative_time_range="30d", limit=5)
```

Use the results as a validation and enrichment pass — not a new output section:

- **Confirm active events**: Cross-reference the groups returned against the Defined Events and Named Elements you already found. Events/elements that appear in page signals are confirmed as genuinely active — note this in their table row (e.g. add a "Pages" column or parenthetical).
- **Flag outliers**: If a group appears prominently in page signals but has *no* match in your discovered events/elements, it's a potential gap in the org's instrumentation or a signal your discovery queries missed. Add it to the Notes section as: "Unmatched signal on [page]: [element/event] — consider including in analysis."

If everything from discover_groups matches what you already found, no output change needed. Only surface what's genuinely new or confirmatory.

## Step 4 — Synthesise and characterise

Now reason over everything you've collected. The output should make sense to a non-technical senior stakeholder, not just a developer:

- **Infer site type**: eCommerce, SaaS, financial services, travel, media, etc. — use the vocabulary of funnels, pages, and events to make this call
- **Map funnels to business purpose**: "Checkout Funnel" → "The primary path from product selection to completed purchase"
- **Write a site characterisation**: one paragraph a COO could read. What does this site do? What are the key user journeys? What's the scale of implementation (shallow/rich)?
- **Flag implementation gaps**: if there are no funnels, no named events, or very few user-defined pages, note this. It means analysis will be less precise and is important context for a POC.

## Step 5 — Write the context file

Write to `~/claude/accounts/{slug}-fullstory-context.md` using this structure exactly:

```markdown
# Fullstory Org Context: {Org Name}
Last updated: {YYYY-MM-DD}
Org slug: {slug}

## Site Characterisation
**Type:** {eCommerce / SaaS / financial services / travel / other}

{One paragraph describing the site: what it does, key user journeys, 
and the richness of the Fullstory implementation.}

## Funnels
| Name | ID | Business Purpose |
|------|----|-----------------|
| ... | ... | ... |

## Key Pages
| Name | ID | Type | Business Purpose |
|------|----|------|-----------------|
| ... | ... | user-defined / learned | ... |

## Defined Events
| Name | ID | Meaning |
|------|----|---------|
| ... | ... | ... |

## Named Elements
| Name | ID | Purpose |
|------|----|---------|
| ... | ... | ... |

## Custom User Variables
{List any user properties defined in this org — useful for building segments.
If none, write: "None defined."}

## Top StoryAI Opportunities (last 30 days)
| Title | Severity | Users Affected | Metric ID | Group ID |
|-------|----------|---------------|-----------|----------|
| ... | ... | ...% | ... | ... |

{Keep Metric ID and Group ID — analysis skills need these for drill-in.}

## Notes for Analysis Skills
{Any flags that would affect downstream analysis:
- No funnels defined → conversion analysis will need manual scoping
- No named events → rely on page/click patterns only
- Shallow implementation → StoryAI opportunities may be limited
- Unusual naming conventions → note them here
- Any other context useful to an analysis running against this org}
```

If a section has no data (e.g. no named elements), write "None found" rather than omitting the section — analysis skills need to know what's absent, not just what's present.

## Step 6 — Report to user

After writing the file, you MUST print this summary to the user. This is the primary output they see — don't skip it or bury it in prose.

```
Org discovery complete — {Org Name}
Saved to: ~/claude/accounts/{slug}-fullstory-context.md

Site type: {inferred type}
Found: {N} funnels · {N} key pages · {N} defined events · {N} named elements

Top 3 issues (StoryAI):
1. {title} — {severity}
2. {title} — {severity}
3. {title} — {severity}

Notes: {any flags from implementation gaps or outliers, or "None — implementation looks well-structured."}
```

**Example:**
```
Org discovery complete — Cargo Rentals
Saved to: ~/claude/accounts/cargo-rentals-fullstory-context.md

Site type: Peer-to-peer car rental marketplace
Found: 15 funnels · 23 key pages · 34 defined events · 26 named elements

Top 3 issues (StoryAI):
1. Script errors on checkout — 133 users (INVESTIGATING)
2. Dead clicks on "Add to Cart" button — 41 users (TICKET_OPENED)
3. "No cars found" modal after city search — 31 users (TICKET_OPENED)

Notes: Duplicate Revenue Event defined — verify KSNijoJTTEpe is the active one before building funnels. No custom user variables found.
```

