# Find feature entitlement friction

> See which locked features users try to access, which plans hit upgrade prompts, and where entitlement gates create conversion opportunities.

## Agent adaptation contract

- Canonical human page: https://agentry.sh/workflows/feature-entitlement-friction
- Execution mode: on_demand
- Immutable automation template: none
- Applies to: b2c-saas, b2b-saas, devtools-api, enterprise-sales
- Required example events: feature_locked_viewed, upgrade_prompt_clicked
- Required Agentry resources: none declared
- Do not use when:
  - Do not use until the example events are mapped to observed project signals, the current onboarding state is verified, and live event/property reads prove the required data is present.
  - Do not recommend this for products without a real revenue lifecycle or an equivalent paid-account signal.
- Ask before using:
  - Which observed events map to feature_locked_viewed, upgrade_prompt_clicked? Is the current onboarding state verified, and do live event/property reads show non-synthetic traffic for them?
  - Which live properties provide feature_locked_viewed.feature, feature_locked_viewed.plan, feature_locked_viewed.account_id, upgrade_prompt_clicked.feature, upgrade_prompt_clicked.plan, upgrade_prompt_clicked.account_id, and which stable user or account identifier joins the signals?

This is an adaptable workflow example, not an API recipe. Map event and property names to the project's saved signal map, require status: "verified" from GET /v1/projects/:project_id/onboarding, and confirm the required signals through live event/property metadata and rows. Fetch current OpenAPI or query-blueprint details before making calls. Do not infer unattended authority from this page.

## Why this matters

Locked-feature views are demand signals. If many starter accounts repeatedly hit the same feature gate, that is either a pricing opportunity or a product packaging problem.

## What you get

- Locked features ranked by demand
- Prompt click-through and conversion
- Accounts showing repeated expansion intent
- Packaging recommendations by plan

## Walk through it

**You:**
> Which locked features are creating upgrade demand?

**Agent:**
> I'll compare gate impressions to prompt clicks and later plan changes.

```text
Endpoint: POST /v1/projects/:project_id/analytics/query
Exact shape: /v1/openapi.json?path=%2Fv1%2Fprojects%2F%7Bproject_id%7D%2Fanalytics%2Fquery&method=post
Custom HogQL goes in the OpenAPI-defined `query` field.
Concept fields:
  query: "SELECT properties.feature AS feature, properties.plan AS plan, countIf(event = 'feature_locked_viewed') AS locked_views, countIf(event = 'upgrade_prompt_clicked') AS prompt_clicks, count(DISTINCT properties.account_id) AS accounts FROM events WHERE event IN ('feature_locked_viewed','upgrade_prompt_clicked') AND timestamp > now() - INTERVAL 30 DAY GROUP BY feature, plan ORDER BY locked_views DESC LIMIT 30"
```

## The output

The agent returns feature gates with demand and likely action: improve copy, adjust entitlement, or route accounts to sales.

## Setting it up

Emit events wherever the product blocks or upsells a feature. Include account and plan.

## Variations

- *"Show only accounts above 80% quota."*
- *"Find features that get viewed but never upgraded."*
- *"Draft pricing-page copy for the top gated feature."*
