@opendirectory.dev/skills 0.1.42 → 0.1.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/registry.json +16 -0
- package/skills/competitor-pr-finder/.env.example +13 -0
- package/skills/competitor-pr-finder/README.md +127 -0
- package/skills/competitor-pr-finder/SKILL.md +767 -0
- package/skills/competitor-pr-finder/evals/evals.json +120 -0
- package/skills/competitor-pr-finder/references/pitch-guide.md +119 -0
- package/skills/competitor-pr-finder/references/pr-channel-types.md +81 -0
- package/skills/competitor-pr-finder/references/tier-scoring.md +91 -0
- package/skills/competitor-pr-finder/scripts/research.py +292 -0
- package/skills/pricing-finder/.env.example +15 -0
- package/skills/pricing-finder/README.md +142 -0
- package/skills/pricing-finder/SKILL.md +748 -0
- package/skills/pricing-finder/evals/evals.json +124 -0
- package/skills/pricing-finder/references/extraction-guide.md +156 -0
- package/skills/pricing-finder/references/positioning-guide.md +114 -0
- package/skills/pricing-finder/references/pricing-models.md +113 -0
- package/skills/pricing-finder/requirements.txt +8 -0
- package/skills/pricing-finder/scripts/research.py +449 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "eval_001",
|
|
4
|
+
"name": "B2B SaaS project management -- full happy path",
|
|
5
|
+
"description": "A developer-focused issue tracking tool. Validates the full 10-step workflow: fetch, competitor discovery, confirmation, pricing page fetch, extraction, pattern analysis, positioning, and recommendation.",
|
|
6
|
+
"input": {
|
|
7
|
+
"prompt": "Find pricing benchmarks for my startup: https://linear.app",
|
|
8
|
+
"env": {
|
|
9
|
+
"dependencies": "duckduckgo-search requests beautifulsoup4 html2text -- all installed",
|
|
10
|
+
"TAVILY_API_KEY": "not set",
|
|
11
|
+
"FIRECRAWL_API_KEY": "not set"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"expected_behavior": [
|
|
15
|
+
"Fetches linear.app via requests+BS4",
|
|
16
|
+
"Product analysis: taxonomy maps to developer tools > project management > issue tracking",
|
|
17
|
+
"Phase 1 discovers 5 issue tracking / project management competitors (Jira, Shortcut, Height, Plane, Asana or similar)",
|
|
18
|
+
"Step 5 shows competitor list with pricing URLs and pauses for confirmation",
|
|
19
|
+
"Phase 2 fetches all 5 pricing pages -- at least 3 return content_length > 500 chars via requests",
|
|
20
|
+
"Step 7 extracts per-seat model for at least 3 competitors",
|
|
21
|
+
"Step 7 records 'Contact Sales' as-is for enterprise tiers (never estimates a price)",
|
|
22
|
+
"Step 8 identifies per-seat as dominant model",
|
|
23
|
+
"Step 8 benchmark table has entry_tier median between $8-$20/mo",
|
|
24
|
+
"Step 9 recommendation references specific median from benchmark table",
|
|
25
|
+
"Step 9 identifies at least one underserved gap in the positioning map",
|
|
26
|
+
"Output saved to docs/pricing-intel/linear-[date].md",
|
|
27
|
+
"No em dashes in output",
|
|
28
|
+
"No banned buzzwords in recommendation"
|
|
29
|
+
],
|
|
30
|
+
"expected_output": "Full pricing intel report: per-seat model dominant, benchmark table with 4-5 competitors, positioning map, concrete recommended pricing strategy with justified prices"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "eval_002",
|
|
34
|
+
"name": "API/payments tool -- usage-based pricing dominates",
|
|
35
|
+
"description": "A payment processing API. Validates that the skill correctly identifies usage-based (per-transaction %) as the dominant model, not flat-rate or per-seat.",
|
|
36
|
+
"input": {
|
|
37
|
+
"prompt": "Pricing research for: https://stripe.com",
|
|
38
|
+
"env": {
|
|
39
|
+
"dependencies": "all installed",
|
|
40
|
+
"TAVILY_API_KEY": "not set",
|
|
41
|
+
"FIRECRAWL_API_KEY": "not set"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"expected_behavior": [
|
|
45
|
+
"Taxonomy maps to fintech > payments > payment processing",
|
|
46
|
+
"Competitors are payment processors (PayPal, Square, Braintree, Adyen, Paddle, etc.)",
|
|
47
|
+
"Step 7 extracts percentage-based pricing (e.g., '2.9% + $0.30 per transaction')",
|
|
48
|
+
"Step 8 identifies usage-based as dominant model",
|
|
49
|
+
"Benchmark table shows transaction fees / percentage rates, not flat monthly prices",
|
|
50
|
+
"Step 9 recommendation reflects usage-based model, not per-seat or flat-rate",
|
|
51
|
+
"Recommendation references specific transaction fee benchmarks from the extracted data"
|
|
52
|
+
],
|
|
53
|
+
"expected_output": "Pricing intel showing usage-based dominance, transaction fee benchmarks, recommendation with fee-based pricing structure"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "eval_003",
|
|
57
|
+
"name": "Description-only input (no URL) -- skips fetch, uses description",
|
|
58
|
+
"description": "User provides a product description with no URL. Validates that Steps 3-4 fetch are skipped and the skill proceeds with the pasted text.",
|
|
59
|
+
"input": {
|
|
60
|
+
"prompt": "Find pricing benchmarks. We build AI-powered legal contract review for in-house legal teams at mid-market companies. Pre-seed, US-focused.",
|
|
61
|
+
"env": {
|
|
62
|
+
"dependencies": "all installed",
|
|
63
|
+
"TAVILY_API_KEY": "not set",
|
|
64
|
+
"FIRECRAWL_API_KEY": "not set"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"expected_behavior": [
|
|
68
|
+
"Detects no URL in input",
|
|
69
|
+
"Skips Step 3 (no fetch attempt)",
|
|
70
|
+
"Skips Step 4 page fetch (no requests+BS4 call)",
|
|
71
|
+
"AI derives product analysis from description: taxonomy maps to software > legaltech > contract review",
|
|
72
|
+
"Stage noted in analysis as 'pre-seed (stated by user)'",
|
|
73
|
+
"Competitor discovery finds legaltech / contract review tools",
|
|
74
|
+
"data_quality_flags includes: 'Product analysis from user description, not live page'"
|
|
75
|
+
],
|
|
76
|
+
"expected_output": "Full pricing intel using description-derived taxonomy, legaltech-focused competitors, data_quality_flags noting description source"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "eval_004",
|
|
80
|
+
"name": "Pricing page blocked -- 3-tier fallback completes gracefully",
|
|
81
|
+
"description": "A competitor's pricing page is JS-rendered and blocked. Validates the fallback chain: requests fails, Google cache fails, search snippet fallback used, data_quality flagged as low, analysis still proceeds.",
|
|
82
|
+
"input": {
|
|
83
|
+
"prompt": "Find pricing benchmarks: https://notion.so",
|
|
84
|
+
"env": {
|
|
85
|
+
"dependencies": "all installed",
|
|
86
|
+
"TAVILY_API_KEY": "not set",
|
|
87
|
+
"FIRECRAWL_API_KEY": "not set"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"expected_behavior": [
|
|
91
|
+
"For at least one competitor, requests fetch returns content_length < 500",
|
|
92
|
+
"Google cache attempt is made for that competitor",
|
|
93
|
+
"If Google cache also fails, DuckDuckGo search snippet fallback is used",
|
|
94
|
+
"That competitor's data_quality is marked 'low'",
|
|
95
|
+
"data_quality_note explains the fallback",
|
|
96
|
+
"Pattern analysis proceeds with a note about reduced confidence for that competitor",
|
|
97
|
+
"Recommendation is still generated but notes which competitors had low-quality data",
|
|
98
|
+
"No crash or stop -- skill completes the full run"
|
|
99
|
+
],
|
|
100
|
+
"expected_output": "Full pricing intel report completed, with data_quality_flags noting which competitors had snippet-only data"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "eval_005",
|
|
104
|
+
"name": "Missing pip dependency -- immediate stop with clear instructions",
|
|
105
|
+
"description": "The duckduckgo-search package is not installed. Validates that Step 1 dependency check catches this and stops immediately with the exact install command.",
|
|
106
|
+
"input": {
|
|
107
|
+
"prompt": "Find pricing benchmarks: https://notion.so",
|
|
108
|
+
"env": {
|
|
109
|
+
"dependencies": "duckduckgo-search NOT installed",
|
|
110
|
+
"TAVILY_API_KEY": "not set",
|
|
111
|
+
"FIRECRAWL_API_KEY": "not set"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"expected_behavior": [
|
|
115
|
+
"Step 1 dependency check detects duckduckgo_search import fails",
|
|
116
|
+
"Stops immediately at Step 1",
|
|
117
|
+
"Tells user: 'Missing Python dependencies. Run: pip install duckduckgo-search requests beautifulsoup4 html2text -- all free, no accounts needed.'",
|
|
118
|
+
"Does NOT fetch the product page",
|
|
119
|
+
"Does NOT attempt any searches",
|
|
120
|
+
"Does NOT proceed past Step 1"
|
|
121
|
+
],
|
|
122
|
+
"expected_output": "Immediate stop at Step 1 with exact pip install command. No partial output."
|
|
123
|
+
}
|
|
124
|
+
]
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Pricing Page Extraction Guide
|
|
2
|
+
|
|
3
|
+
## What You're Extracting
|
|
4
|
+
|
|
5
|
+
From every pricing page, extract the following fields. All values must come verbatim from the fetched content -- do not fill from AI training knowledge.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Identifying Tiers
|
|
10
|
+
|
|
11
|
+
**Signals that indicate a tier boundary:**
|
|
12
|
+
- Repeated heading structure: `## Starter`, `## Pro`, `## Business`
|
|
13
|
+
- Card-like sections with a name, a price, and a list of features
|
|
14
|
+
- A comparison table with tier names as column headers
|
|
15
|
+
- Repeated price+CTA pairs: `$29/mo [Get started]`, `$79/mo [Get started]`
|
|
16
|
+
|
|
17
|
+
**Tier name extraction:**
|
|
18
|
+
- Use the exact name shown on the page. Do not rename or paraphrase.
|
|
19
|
+
- Common names: Free, Starter, Basic, Plus, Pro, Business, Team, Growth, Scale, Enterprise
|
|
20
|
+
- If no tier name is visible: use "Plan 1", "Plan 2", etc.
|
|
21
|
+
|
|
22
|
+
**If there is only one paid plan:** record it as a single tier. Do not invent additional tiers.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Extracting Prices
|
|
27
|
+
|
|
28
|
+
**Monthly price signals:**
|
|
29
|
+
- "$29/month", "$29/mo", "$29 per month", "$29 monthly"
|
|
30
|
+
- "$29" with "/month" nearby
|
|
31
|
+
|
|
32
|
+
**Annual price signals:**
|
|
33
|
+
- "$290/year", "$24.17/month billed annually", "Save 20% with annual"
|
|
34
|
+
- Always record the per-month equivalent: $290/year = $24.17/month
|
|
35
|
+
- "Billed annually" or "Save X%" indicates annual billing
|
|
36
|
+
|
|
37
|
+
**Free tier price:** Record as `0` (integer), not `null` or `"Free"`.
|
|
38
|
+
|
|
39
|
+
**Contact Sales / Custom pricing:**
|
|
40
|
+
- Record `enterprise_pricing` as `"Contact Sales"` exactly
|
|
41
|
+
- Set `price_monthly: null` for these tiers
|
|
42
|
+
- Never estimate or replace with a number
|
|
43
|
+
|
|
44
|
+
**"Starting at" pricing:** Record the starting price. Note "starting at" in `price_note`.
|
|
45
|
+
|
|
46
|
+
**If no price is visible on the page:** This is common for JS-rendered pages. Record `price_monthly: null` and `price_note: "not found in page data"`.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Extracting Limits
|
|
51
|
+
|
|
52
|
+
Look for numbers associated with units. Common limit types:
|
|
53
|
+
|
|
54
|
+
| Limit type | Example signals |
|
|
55
|
+
|---|---|
|
|
56
|
+
| Users / seats | "up to 5 users", "per seat", "unlimited members" |
|
|
57
|
+
| Storage | "5 GB storage", "100 GB included" |
|
|
58
|
+
| API calls | "1,000 API calls/month", "10k requests" |
|
|
59
|
+
| Projects / workspaces | "up to 3 projects", "unlimited workspaces" |
|
|
60
|
+
| Records / rows | "up to 10,000 records", "unlimited rows" |
|
|
61
|
+
| Messages / emails | "5,000 emails/month" |
|
|
62
|
+
| Integrations | "up to 3 integrations", "unlimited integrations" |
|
|
63
|
+
| History | "7 day history", "unlimited version history" |
|
|
64
|
+
|
|
65
|
+
Record limits as plain strings: `"up to 5 users"`, `"1,000 API calls/month"`. Do not convert or normalize.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Extracting Features
|
|
70
|
+
|
|
71
|
+
**Key features per tier:** The 3-5 most prominent features listed for that tier. Extract from:
|
|
72
|
+
- Bullet lists under each tier card
|
|
73
|
+
- Checkmarks in a comparison table
|
|
74
|
+
- "Includes everything in [lower tier], plus:" language
|
|
75
|
+
|
|
76
|
+
**Feature gate identification:**
|
|
77
|
+
- A feature is "always free" if it appears in the free/starter tier across all competitors
|
|
78
|
+
- A feature is "always paid" if it appears only in paid tiers across all competitors
|
|
79
|
+
- Features shown with a lock icon, strikethrough, or grayed-out are gated behind higher tiers
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Identifying the Pricing Model
|
|
84
|
+
|
|
85
|
+
Use the signals from `references/pricing-models.md`. Key rules:
|
|
86
|
+
|
|
87
|
+
1. If the price varies with user count: **per-seat**
|
|
88
|
+
2. If price is fixed regardless of users: **flat-rate** or **tiered-flat**
|
|
89
|
+
3. If price varies with consumption (API calls, messages, etc.): **usage-based**
|
|
90
|
+
4. If there is a free tier with feature gating: **freemium** (may also be per-seat or tiered-flat)
|
|
91
|
+
5. If multiple scaling dimensions exist: **hybrid**
|
|
92
|
+
|
|
93
|
+
When unsure between flat-rate and tiered-flat: tiered-flat has 3+ named tiers; flat-rate typically has 1-2.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Billing Cadence
|
|
98
|
+
|
|
99
|
+
- **Monthly:** "billed monthly", "pay monthly", no mention of annual
|
|
100
|
+
- **Annual:** "billed annually", "per year", annual-only pricing shown
|
|
101
|
+
- **Both:** monthly and annual prices both shown (common -- record both)
|
|
102
|
+
|
|
103
|
+
**Annual discount:**
|
|
104
|
+
- Calculate from: `(monthly_price - annual_monthly_equivalent) / monthly_price * 100`
|
|
105
|
+
- Or read directly from: "Save 20%", "20% off annual"
|
|
106
|
+
- Round to nearest integer
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Free Tier vs Free Trial
|
|
111
|
+
|
|
112
|
+
This distinction is critical:
|
|
113
|
+
|
|
114
|
+
| Signal | Means |
|
|
115
|
+
|---|---|
|
|
116
|
+
| "Free forever", "Always free", "Free plan" | **Free tier** -- permanent, no credit card |
|
|
117
|
+
| "14-day free trial", "Try free for 30 days", "No credit card required" | **Free trial** -- time-limited |
|
|
118
|
+
| "Free trial" with no "free plan" | Trial only, no permanent free tier |
|
|
119
|
+
| Both | Some products offer both -- record both as `true` |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## CTAs (Call to Action) as Tier Signals
|
|
124
|
+
|
|
125
|
+
| CTA text | What it means |
|
|
126
|
+
|---|---|
|
|
127
|
+
| "Get started free", "Sign up free" | Free tier or free trial entry point |
|
|
128
|
+
| "Start free trial", "Try for free" | Free trial (time-limited) |
|
|
129
|
+
| "Get started", "Subscribe now" | Paid tier, direct signup |
|
|
130
|
+
| "Contact Sales", "Talk to Sales", "Request a demo" | Enterprise tier |
|
|
131
|
+
| "Upgrade", "Unlock" | Upgrade prompt from free tier |
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Regional Pricing
|
|
136
|
+
|
|
137
|
+
Flag if you see:
|
|
138
|
+
- Non-USD currency symbols: ₹ (India), € (Europe), £ (UK), R$ (Brazil)
|
|
139
|
+
- "Local pricing" or "India pricing" or "Pricing for [region]"
|
|
140
|
+
- Different prices shown based on detected country
|
|
141
|
+
|
|
142
|
+
Record regional pricing as a string: `"India: ₹999/mo"`, `"Europe: €25/mo"`.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Data Quality Assessment
|
|
147
|
+
|
|
148
|
+
Assign `data_quality` based on what was fetched:
|
|
149
|
+
|
|
150
|
+
| Score | Condition |
|
|
151
|
+
|---|---|
|
|
152
|
+
| `high` | Full pricing page fetched (content > 2000 chars), prices clearly extracted |
|
|
153
|
+
| `medium` | Page fetched but content incomplete (500-2000 chars), or Google cache used |
|
|
154
|
+
| `low` | Page not fetched, using search snippet only (< 500 chars) |
|
|
155
|
+
|
|
156
|
+
When `data_quality: low`, note it in the output: prices may be outdated or incomplete.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Competitive Positioning Guide
|
|
2
|
+
|
|
3
|
+
## The Four Quadrants
|
|
4
|
+
|
|
5
|
+
Map every competitor onto two axes: **price** (entry tier monthly price) and **feature density** (number of features / complexity of offering).
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
High price
|
|
9
|
+
|
|
|
10
|
+
| [Simple+Premium] [Feature-rich+Expensive]
|
|
11
|
+
| rare, luxury feel enterprise, complex
|
|
12
|
+
|
|
|
13
|
+
|-------------------------------------> High feature density
|
|
14
|
+
|
|
|
15
|
+
| [Cheap+Simple] [Cheap+Complex]
|
|
16
|
+
| common entry play rare, usually unsustainable
|
|
17
|
+
|
|
|
18
|
+
Low price
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Cheap + Simple:** Low entry price, few tiers, limited features. Target: individual users or very small teams. Example: a $9/mo tool with 2 tiers.
|
|
22
|
+
|
|
23
|
+
**Feature-rich + Expensive:** High price, many tiers, deep feature set. Target: mid-market and enterprise. Example: Salesforce, HubSpot Professional.
|
|
24
|
+
|
|
25
|
+
**Simple + Premium:** High price, few features, strong brand or niche value. Rare. Example: some design tools, high-end professional services SaaS.
|
|
26
|
+
|
|
27
|
+
**Cheap + Complex:** Low price but feature-heavy. Often unsustainable (or a market disruptor using VC subsidy). Example: early-stage PLG tools burning cash on free tiers.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Identifying the Underserved Gap
|
|
32
|
+
|
|
33
|
+
After mapping all 5 competitors, look for empty quadrants or unoccupied price ranges.
|
|
34
|
+
|
|
35
|
+
**Common gap types:**
|
|
36
|
+
|
|
37
|
+
**Price gap:** All competitors cluster at $15-$79/mo. No one at $99-$199/mo (mid-market gap) or below $10/mo (micro-SMB gap).
|
|
38
|
+
|
|
39
|
+
**Model gap:** All competitors use per-seat pricing. No flat-rate option for teams that hate per-user billing.
|
|
40
|
+
|
|
41
|
+
**Tier gap:** All competitors have 3+ tiers with complex feature gates. No simple 2-tier product (free + one paid).
|
|
42
|
+
|
|
43
|
+
**Segment gap:** All competitors target enterprises with Contact Sales. No self-serve option for the startup/SMB segment.
|
|
44
|
+
|
|
45
|
+
**Feature gap:** All competitors include features X and Y but no one prominently leads with feature Z (even if Z is in the product). Z could be the lead differentiator.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Positioning the Recommendation
|
|
50
|
+
|
|
51
|
+
**Anchor pricing principle:** The highest tier sets the perceived value ceiling for lower tiers. A $499/mo enterprise plan makes $99/mo feel cheap and accessible, even if $99/mo was always the real target.
|
|
52
|
+
|
|
53
|
+
**Implication for recommendation:** Always design top-down: set a high anchor (enterprise or top tier) first, then position the intended primary tier below it to feel like a deal.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Freemium Decision Framework
|
|
58
|
+
|
|
59
|
+
Ask: how many of the 5 competitors have a free tier?
|
|
60
|
+
|
|
61
|
+
| Free tier count | Implication |
|
|
62
|
+
|---|---|
|
|
63
|
+
| 4-5 out of 5 | Free tier is table stakes in this space. Not having one is a significant disadvantage for self-serve acquisition. Recommend free tier. |
|
|
64
|
+
| 2-3 out of 5 | Free tier is common but not universal. Consider it if PLG is part of the go-to-market. Not having one is defensible if sales-led. |
|
|
65
|
+
| 0-1 out of 5 | Free tier is not the norm. Not expected by buyers. Skip it unless there's a specific PLG reason. |
|
|
66
|
+
|
|
67
|
+
**Exception:** If the product's primary differentiator is something that should NOT be given away free (e.g., an AI model that costs money to run per query), recommend against free tier regardless of competitor prevalence.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Annual Discount Framework
|
|
72
|
+
|
|
73
|
+
**Market norm:** 15-20% discount for annual commitment is standard across most B2B SaaS.
|
|
74
|
+
|
|
75
|
+
**When to go higher (25-30%):** If competitors all offer 20% and annual commitment is strategically important (reduces churn, improves cash flow).
|
|
76
|
+
|
|
77
|
+
**When to skip annual discount:** If the product is month-to-month by nature (e.g., seasonal tools, event-based tools) or if the team is too small to benefit from annual cash upfront.
|
|
78
|
+
|
|
79
|
+
**Annual discount calculation benchmark:**
|
|
80
|
+
- 15% annual discount = $1 saved for every $6.67/mo
|
|
81
|
+
- 20% annual discount = $1 saved for every $5/mo
|
|
82
|
+
- Standard formula: annual_monthly_equivalent = monthly_price * (1 - discount)
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Feature Gate Strategy
|
|
87
|
+
|
|
88
|
+
**What to gate behind paid:**
|
|
89
|
+
1. The product's primary differentiator -- the thing users upgrade for
|
|
90
|
+
2. Collaboration features (more users, sharing, permissions)
|
|
91
|
+
3. Advanced integrations (enterprise SSO, API access, webhooks)
|
|
92
|
+
4. Historical data, exports, or reporting
|
|
93
|
+
5. Priority support or SLAs
|
|
94
|
+
|
|
95
|
+
**What to keep free:**
|
|
96
|
+
1. Core product functionality that demonstrates value (enough to get hooked)
|
|
97
|
+
2. Onboarding flows and templates
|
|
98
|
+
3. Basic integrations (1-2 popular tools)
|
|
99
|
+
4. Community / public sharing features (if they drive viral growth)
|
|
100
|
+
|
|
101
|
+
**The golden rule of free tier design:** The free tier should be good enough that users get real value and tell others -- but not so good that they never upgrade.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Race-to-the-Bottom Warning Signs
|
|
106
|
+
|
|
107
|
+
If the market shows these signals, do NOT recommend competing on price:
|
|
108
|
+
|
|
109
|
+
- Multiple competitors have recently lowered prices (check for "we've lowered our prices" blog posts in search results)
|
|
110
|
+
- The lowest entry tier is below $5/mo
|
|
111
|
+
- Freemium tiers are extremely generous (unlimited users on free tier, etc.)
|
|
112
|
+
- Several competitors have shut down or pivoted recently
|
|
113
|
+
|
|
114
|
+
**Instead:** Recommend competing on: a specific underserved segment, a specific workflow that competitors ignore, or a model innovation (e.g., flat-rate in a per-seat market).
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Pricing Models
|
|
2
|
+
|
|
3
|
+
## The Six Models
|
|
4
|
+
|
|
5
|
+
### Per-Seat / Per-User
|
|
6
|
+
Price scales with the number of users on the account.
|
|
7
|
+
|
|
8
|
+
**How to identify from a pricing page:**
|
|
9
|
+
- "per user/month", "per seat/month", "per member"
|
|
10
|
+
- Tier descriptions include a user count or say "unlimited users" as a feature
|
|
11
|
+
- Price shown as "$X per user" or "$X × [N] users"
|
|
12
|
+
|
|
13
|
+
**Common in:** Project management (Jira, Linear, Asana), CRM (Salesforce, HubSpot), collaboration tools (Notion, Confluence), communication tools (Slack, Zoom)
|
|
14
|
+
|
|
15
|
+
**Why spaces adopt it:** Revenue scales naturally with team size. Easy to understand. Aligns cost with value (bigger team = more value extracted).
|
|
16
|
+
|
|
17
|
+
**Risk for new entrants:** Per-seat pricing raises the cost of adoption at the team level. Enterprises resist it because seats are hard to forecast. Often results in "seat-sharing" workarounds.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
### Flat-Rate
|
|
22
|
+
One fixed price for all users, regardless of team size.
|
|
23
|
+
|
|
24
|
+
**How to identify:**
|
|
25
|
+
- Single price shown prominently, no mention of per-user scaling
|
|
26
|
+
- "Unlimited users" or "your whole team" as a feature, not a tier limit
|
|
27
|
+
- Simple 1-2 plan structure
|
|
28
|
+
|
|
29
|
+
**Common in:** Single-operator tools, small business software, simple utilities
|
|
30
|
+
|
|
31
|
+
**Why spaces adopt it:** Removes friction for SMB buyers who hate per-seat math. Good for tools where most value comes from the tool itself, not from network effects within a team.
|
|
32
|
+
|
|
33
|
+
**Risk:** Revenue doesn't scale with usage or team size. Hard to grow ARPU without tier upgrades.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
### Usage-Based / Consumption
|
|
38
|
+
Price scales with how much the product is used (API calls, messages, rows, compute minutes, etc.).
|
|
39
|
+
|
|
40
|
+
**How to identify:**
|
|
41
|
+
- Pricing page shows units: "per 1,000 API calls", "per GB", "per message sent", "per transaction"
|
|
42
|
+
- Overage fees listed
|
|
43
|
+
- "Pay as you go" or "credits" system
|
|
44
|
+
- Calculator on the pricing page
|
|
45
|
+
|
|
46
|
+
**Common in:** APIs (Stripe, Twilio, OpenAI), data tools (Snowflake, BigQuery), infrastructure (AWS, Vercel), AI/ML tools
|
|
47
|
+
|
|
48
|
+
**Why spaces adopt it:** Revenue scales with customer success. Low barrier to entry (start free, pay as you grow). Natural fit when value is directly proportional to consumption.
|
|
49
|
+
|
|
50
|
+
**Risk:** Hard to forecast revenue. Customers may optimize usage aggressively to cut costs. Requires strong unit economics.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
### Freemium
|
|
55
|
+
Permanent free tier with paid upgrades for more features, users, or limits.
|
|
56
|
+
|
|
57
|
+
**How to identify:**
|
|
58
|
+
- "Free forever" plan (not a trial -- permanent)
|
|
59
|
+
- Feature gating: key features locked behind paid tiers
|
|
60
|
+
- Clear upgrade prompts within the product
|
|
61
|
+
- "Upgrade to unlock" language
|
|
62
|
+
|
|
63
|
+
**Common in:** PLG (product-led growth) companies, developer tools, consumer apps, productivity tools
|
|
64
|
+
|
|
65
|
+
**Why spaces adopt it:** Drives viral adoption and self-serve discovery. Users qualify themselves -- heavy free users convert to paid. Removes sales friction.
|
|
66
|
+
|
|
67
|
+
**Risk:** Free tier creates support costs without revenue. Can anchor willingness-to-pay too low. Hard to convert free users if free tier is too generous.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### Tiered Flat (Most Common SaaS Pattern)
|
|
72
|
+
Fixed tiers (Starter / Pro / Business / Enterprise) with a flat price per tier. Upgrading a tier unlocks more features or higher limits -- not more users.
|
|
73
|
+
|
|
74
|
+
**How to identify:**
|
|
75
|
+
- 3-4 named tiers (Starter, Pro, Business, Enterprise)
|
|
76
|
+
- Each tier has a fixed monthly price
|
|
77
|
+
- Feature comparison table showing what's included at each tier
|
|
78
|
+
- No per-user multiplier within a tier (or per-user pricing is one of several factors)
|
|
79
|
+
|
|
80
|
+
**Common in:** Most B2B SaaS: email tools, analytics, HR software, marketing platforms
|
|
81
|
+
|
|
82
|
+
**Why spaces adopt it:** Predictable revenue. Easy to understand. Allows packaging features strategically to drive upgrades.
|
|
83
|
+
|
|
84
|
+
**Risk:** Customers may downgrade to cheaper tier when budget is tight. Feature selection per tier requires deep knowledge of what customers value.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### Hybrid
|
|
89
|
+
Combination of two or more models -- most commonly per-seat within tiers, or usage caps within flat tiers.
|
|
90
|
+
|
|
91
|
+
**How to identify:**
|
|
92
|
+
- Tiers have both a flat base price AND per-user scaling: "$50/mo base + $10/user"
|
|
93
|
+
- Or: tiers have a flat price but also include usage caps (e.g., "up to 10,000 API calls/mo included")
|
|
94
|
+
- Or: flat tiers + usage-based overages
|
|
95
|
+
|
|
96
|
+
**Common in:** CRM, marketing automation, enterprise platforms
|
|
97
|
+
|
|
98
|
+
**Why spaces adopt it:** Captures revenue from both team growth and product usage. More complex but reflects true value delivery.
|
|
99
|
+
|
|
100
|
+
**Risk:** Customer confusion. Hard to predict billing. Often requires a calculator on the pricing page.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Quick Reference Table
|
|
105
|
+
|
|
106
|
+
| Model | Scales with | Entry barrier | Revenue predictability | Best for |
|
|
107
|
+
|---|---|---|---|---|
|
|
108
|
+
| Per-seat | Team size | Medium | High | Collaboration, CRM |
|
|
109
|
+
| Flat-rate | Nothing | Low | High | SMB, single-operator tools |
|
|
110
|
+
| Usage-based | Consumption | Very low | Low | APIs, infrastructure |
|
|
111
|
+
| Freemium | Feature needs | None | Medium | PLG, developer tools |
|
|
112
|
+
| Tiered flat | Feature needs | Low | High | Most B2B SaaS |
|
|
113
|
+
| Hybrid | Multiple factors | Medium | Medium | Enterprise platforms |
|