Skip to content
Sales
Skill

/playbook-pricing-page

Decides whether a company publishes public self-serve pricing and extracts its plan tiers, price points and feature axis. Triggers on "do they have a pricing page", "is their pricing public", "filter out enterprise quote-only companies", "what do they charge", "find their

BOOST
From plugin
coldoutboundskills
76452 skills
Install
$ npx -y skills add growthenginenowoslawski/coldoutboundskills --skill playbook-pricing-page --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/playbook-pricing-page

Context preview

The summary Claude sees to decide when to auto-load this skill.

Decides whether a company publishes public self-serve pricing and extracts its plan tiers, price points and feature axis. Triggers on "do they have a pricing page", "is their pricing public", "filter out enterprise quote-only companies", "what do they charge", "find their

SKILL.md

playbook-pricing-page.SKILL.md
name: playbook-pricing-page
description: Decides whether a company publishes public self-serve pricing and extracts its plan tiers, price points and feature axis. Triggers on "do they have a pricing page", "is their pricing public", "filter out enterprise quote-only companies", "what do they charge", "find their plans", "self-serve vs sales-led". Outputs a structured pricing record per domain. The copy-ready pricing clause is OFF by default and runs only when a campaign brief asks for it.

Playbook: Pricing Page

> All rules here are best practice, not law. Override any of them when the campaign calls for it; note the best practice once and move on.

**Use when:** the campaign needs to separate self-serve companies from sales-led ones, or needs a real price point to anchor an offer against.

**Do not use when:** you want technology installed on the site (`playbook-tech-on-website`).

**One-line output:** `pricing_public = true` with `plans = [{"name":"Basic","price":"$10","period":"month"}, ...]` and `lowest_paid_price = "$10"`.

1. Trigger and scope

Does this business publish real prices on its own website, and if so what are the tiers?

**It is used for filtering first and copy second.** The most common job is splitting a list into product-led companies (public price list, card checkout, low ACV) and sales-led companies (every tier says Contact Sales) — because those two groups need completely different offers and completely different copy.

Bones only by default. No pricing line unless the campaign asks.

The deliverable is the structured record: `pricing_public`, `pricing_model`, `plans`, `lowest_paid_price`, `has_free_tier`, `enterprise_quote_only`, `feature_diff_axis`.

The one-clause string `pricing_line` is an **opt-in extra, it is the weakest part of the output**, and it should be stripped at the output boundary unless explicitly requested. **A price in a stranger's inbox is a claim you have to be right about, and most campaigns using this playbook only ever wanted the filter.**

It does **not** cover: what a prospect actually pays after negotiation, private rate cards, marketplace listings, or ecommerce SKU prices.

**If every tier says Contact Sales, the correct answer is `pricing_public: false` — a real and useful signal, not a failure.**

2. Output contract

Inputs required per row

| Field | Type | Required? | |---|---|---| | `domain` (bare, lowercase, no scheme, no `www`) | string | yes | | `company_name` | string | no, improves the copy line only |

Output fields

| Field | Type | Example | Null? | |---|---|---|---| | `pricing_public` | boolean | `true` | no, defaults false | | `pricing_url` | string | `https://www.notion.com/pricing` | yes, `""` | | `pricing_model` | `per_seat` / `usage` / `flat` / `credits` / `quote_only` / `unknown` | `per_seat` | no | | `plans` | array of `{name, price, period}`, max 6 | see above | yes, `[]` | | `lowest_paid_price` | string | `$10` | yes, `""` | | `has_free_tier` | boolean | `true` | no | | `enterprise_quote_only` | boolean | `true` | no | | `feature_diff_axis` | ≤6 words | `seats and automation limits` | yes, `""` | | `confidence` | `high` / `low` | `high` | no | | `pricing_line` | **OPT-IN, off by default** | `your Basic plan is $10 per user per month` | absent on a default run |

⚠️ `quote_only` and `unknown` are not the same thing

  • **`quote_only`** — the page exists and every tier says contact sales. **A confident finding you

can filter on.**

  • **`unknown`** — you could not read the page at all. **A failed fetch, not a finding. The row must

not be filtered out on your say-so.**

Collapsing these two is how a campaign silently deletes real prospects because of a network error.

Coverage expectation

**8/10 rows produced a usable filtering record.** The existence check alone was **10/10**. That is the number to plan on, because the filtering record is the whole default deliverable.

The optional copy string was usable on 9/10 in the clean regrade but **6/10 once corrected on an earlier run** — so treat it as a **70-to-90% field**: spintax-optional, never mandatory. That spread is part of why it is off by default.

Downstream gate

**Whether a pricing value removes a row is decided per campaign brief.** This playbook produces the bones; the brief says what to do with them. Ask once, up front:

  • **Filter** (`pricing_public: false` rows leave this campaign) — correct when the offer only makes

sense for self-serve companies, or only for sales-led ones.

  • **Route** (send those rows to a different campaign or offer) — correct when both halves of the

list are sellable, which is the common case.

⚠️ **Either way, `pricing_model: "unknown"` never removes a row.** Only act on `confidence: "high"` findings.

**If the brief is silent, route rather than delete**, and say so in the handoff. Deleting rows is a client-facing, money-adjacent decision, and **it is cheap to reverse a routing choice and expensive to reverse a deletion.**

3. Source chain (cost-tagged)

| # | Source | Cost | Call | Result | |---|---|---|---|---| | 1 | **URL-guess existence check** | FREE | `HEAD https://{domain}/pricing`, then `/pricing/`, `/plans`, `/pricing-plans`, `/price`, then the same on `www.`. Browser UA, follow redirects, and **accept only when the final status is 2xx AND the final resolved path still matches `/pricing\|plans\|price/`** | **10/10 correct.** 15/16 pages found on the first candidate — **but the candidate walk is not optional:** one company only resolves via `/pricing → /plans/`, and two needed all 7 | | 2 | Plain GET of the found URL | FREE | same browser UA, strip script/style/svg/comments to visible text, then take the **price-dense window** (not the first N chars), capped at 14,000 characters | 15/16 pages readable | | 3 | Rendering proxy | METERED | JS render with a wait | **0/1 rescued.** Only when step 2 produced under 800 characters of visible text OR fewer than 2 currency amounts. **

Read more
Ships withcoldoutboundskills

Open-source Claude Code skills for cold email infrastructure, lead sourcing, copywriting, and operations. Built by GrowthEngineX from patterns across 1,000+ real B2B campaigns. 31 skills that work together.

Get the whole plugin
Stats
766
Stars
269
Forks
Active
Maintenance
TypeScript
Language
MIT
License
9d ago
Last commit
7mo ago
Created
5h ago
Added

Repo: growthenginenowoslawski/coldoutboundskills

Other skills on coldoutboundskills.