@opendirectory.dev/skills 0.1.43 → 0.1.45

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.
Files changed (32) hide show
  1. package/package.json +1 -1
  2. package/registry.json +16 -0
  3. package/skills/oss-launch-kit/.env.example +2 -0
  4. package/skills/oss-launch-kit/PRD.md +122 -0
  5. package/skills/oss-launch-kit/README.md +27 -0
  6. package/skills/oss-launch-kit/SKILL.md +33 -0
  7. package/skills/oss-launch-kit/TECHNICAL_DESIGN.md +187 -0
  8. package/skills/oss-launch-kit/evals/cli-cli.full.md +49 -0
  9. package/skills/oss-launch-kit/evals/evals.json +44 -0
  10. package/skills/oss-launch-kit/evals/octocat-hello-world.full.md +53 -0
  11. package/skills/oss-launch-kit/evals/pydantic-pydantic.full.md +152 -0
  12. package/skills/oss-launch-kit/evals/vercel-next-js.full.md +152 -0
  13. package/skills/oss-launch-kit/hero.png +0 -0
  14. package/skills/oss-launch-kit/references/channel_rules.md +9 -0
  15. package/skills/oss-launch-kit/references/launch_framework.md +10 -0
  16. package/skills/oss-launch-kit/references/output_template.md +3 -0
  17. package/skills/oss-launch-kit/scripts/__pycache__/build_product_brief.cpython-313.pyc +0 -0
  18. package/skills/oss-launch-kit/scripts/__pycache__/generate_assets.cpython-313.pyc +0 -0
  19. package/skills/oss-launch-kit/scripts/build_product_brief.py +335 -0
  20. package/skills/oss-launch-kit/scripts/fetch_repo_context.py +169 -0
  21. package/skills/oss-launch-kit/scripts/generate_assets.py +526 -0
  22. package/skills/oss-launch-kit/scripts/run.py +41 -0
  23. package/skills/oss-launch-kit/scripts/test_logic.py +99 -0
  24. package/skills/pricing-finder/.env.example +15 -0
  25. package/skills/pricing-finder/README.md +142 -0
  26. package/skills/pricing-finder/SKILL.md +748 -0
  27. package/skills/pricing-finder/evals/evals.json +124 -0
  28. package/skills/pricing-finder/references/extraction-guide.md +156 -0
  29. package/skills/pricing-finder/references/positioning-guide.md +114 -0
  30. package/skills/pricing-finder/references/pricing-models.md +113 -0
  31. package/skills/pricing-finder/requirements.txt +8 -0
  32. 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 |
@@ -0,0 +1,8 @@
1
+ # pricing-finder dependencies
2
+ # All free -- no accounts or API keys required.
3
+ # Install with: pip install -r requirements.txt
4
+
5
+ ddgs>=0.1.0
6
+ requests>=2.31.0
7
+ beautifulsoup4>=4.12.0
8
+ html2text>=2024.2.26