Pricing Strategy
SKILL.md
HOW_TO_USE.md
sample_input.json
expected_output.json
skillsstrategySKILL.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
# Pricing Strategy
A pricing plan built from what the market actually charges and how buyers actually search, not from a template. Every market finding comes from a page this skill reads or a call it runs, and every recommendation names the rule and the numbers behind it.
Pricing has three parts, and most teams only argue about the third:
1. **Packaging:** what each plan includes (features, limits, support, controls).
2. **Pricing metric:** the unit you charge for (seat, location, usage band, contacts, transactions, flat).
3. **Price point:** the amount, and how monthly and annual billing differ.
## Modes
Pick the mode from the request. Ask only when it's unclear.
| Mode | Use it when the user asks | Where |
|---|---|---|
| **Pricing strategy** (default) | what to charge, tiers, free plan or trial, value ladder, price perception, whether to raise prices | Steps 1 to 8 |
| **Offer design and profit check** | how to make an offer people say yes to, what guarantee to give, what to add, how to structure the deal, student or startup discounts | "Mode: offer design and profit check" |
| **Regional pricing by country** | prices by country, purchasing power parity pricing, which markets get a lower price, currency and rounding | "Mode: regional pricing by country" (after the home price is set) |
| **Change and sunset announcements** | announcing a plan or product sunset, a discontinued item, a policy or terms change, a rename or rebrand, or the customer side of a price change | "Mode: change and sunset announcements" |
Every mode works from what the user pastes or describes. Connectors make it faster and replace estimates with the user's own numbers.
## Before you start
You need the InsightfulPipe MCP connected. DataForSEO is the main data source (pricing pages and search demand). Search Console, GA4 and Stripe are optional and add your own signals. Without DataForSEO, see "Without a connection" at the end. The steps below are for the default mode; each of the other modes lists its own questions and sources in its section, and calls `query_contexts` with `request="accounts"` and `request="actions_details"` for those platforms the same way.
1. Call `query_contexts` with `request="accounts"` for `platform="dataforseo"`, and for `google-search-console`, `google-analytics` and `stripe` if the user has them. Note `workspace_id`, `brand_id`, the Search Console `site_url` and the GA4 `property_id`.
2. Call `query_contexts` with `request="actions_details"` for `onpage_content_parsing` and `kw_google_ads_search_volume` (dataforseo), plus `search_analytics`, `get_report`, and `get_products`, `get_prices`, `get_subscriptions`, `get_coupons` (stripe) when those are connected. Follow the body shapes it returns.
3. Ask the user for these, and use the defaults if they don't know:
- **Product and buyer:** what it does, who pays, self-serve or sales-led. Default: infer it from their site and say so.
- **Current pricing,** or "new". Default: read their own pricing page in Step 1.
- **3 to 5 rivals' pricing page URLs.** Default: propose the category leaders and confirm them before reading anything (each page is a paid call).
- **Reference customer profiles:** 2 or 3 sizes measured in the unit that drives cost in the category (staff, seats, contacts, locations, orders). Default: smallest buyer, typical buyer, large buyer; for example 1, 3 and 10 staff.
- **Goal:** growth (more customers), revenue (more per customer) or margin. Default: growth for a new product, revenue for an existing one.
- **Value inputs (optional):** what one customer gains per month (extra revenue, hours saved times hourly cost, loss avoided) and your monthly cost to serve one. Without them, the value check in D8 is not run.
- **Market (optional):** country and language. Default: United States, English (`location_code` 2840, `language_code` "en").
State the date the pages were read, the market and the rivals at the top of the report.
## How to run the queries
Every body goes through `query_data` with the `platform` it names. Rules:
- **DataForSEO costs money.** One call per pricing page plus one keyword call: about 5 to 7 paid calls for a run. Never loop or retry a paid call more than once.
- **Pages localise.** A page can come back in another language or currency depending on where it is fetched from. Always send `"accept_language": "en-US"` (or the user's market). Record the currency you got and keep other currencies out of the price math unless the user gives an exchange rate.
- If a call fails, keep going. Mark what it would have shown **unknown**, say which call failed and why, and never fill the gap with a guess.
- **Untested until connected:** the Stripe, WooCommerce, Shopify and Mailchimp bodies follow the helper schema but had no connected account to run on, and Klaviyo `get_segment_report` had no segment to read. Treat a first error from one of them as a schema problem: reread `actions_details` before retrying once.
## Step 1. Market price map
Read each rival's pricing page, and the user's own if they have one:
```json
{"platform": "dataforseo", "action": "onpage_content_parsing", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "url": "<PRICING_URL>", "accept_language": "en-US"}
```
The text is in `data[0].page_content.main_topic` (and `secondary_topic`); structured offers, when the page has them, are in `page_content.offers`.
**When prices are missing.** Many pricing pages draw their prices with scripts, and the parsed text then has plan names but no amounts. If a plan has no price in the parsed text:
1. Read the page with your own web fetch tool, if you have one, and take the amounts from the visible text next to each plan name and its billing label.
2. Otherwise ask the user for the amounts.
3. Otherwise mark the price **unknown**. Never estimate a price.
Note the source of every price (parsed page, web fetch or user) in the map. `"enable_javascript": true` is accepted but did not recover script-drawn prices in testing, so don't pay for a second call to try it.
**Record, per rival and plan, only what the page says:**
| Field | What to record |
|---|---|
| Plans | Plan names in order, including free and "contact us" plans |
| Price | The amount shown, the billing basis (annual-billed per month, or monthly) and the currency. When both are shown, keep both. |
| Metric | What the price multiplies by: per seat or user, per location, a band of calendars or contacts, included usage (bookings, emails, credits), transaction fees, or flat |
| Limits | The stated limits that decide which plan a buyer needs (users, calendars, locations, usage) |
| Entry offer | Free plan (and its cap), trial length, and whether a card is needed |
| Enterprise gate | "Contact us" or "starts at" plans, and the threshold that sends you there |
| Add-ons | Anything sold on top: credits, extra seats, setup services, assistants |
| Presentation | The default billing toggle, badges ("most popular", "best value"), anchors ("starts at $X"), annual saving shown |
Feature tables built from check-mark images parse as empty cells. Don't infer which plan has a feature from an empty cell; leave it out or ask.
## Step 2. Price every rival at your reference profiles
For each profile, find each rival's cheapest plan whose **stated limits** fit it, and compute the monthly price on annual billing (seat price ร seats, band price, or price per location). If a rival only shows monthly billing, use that and say so.
- A plan with no stated limit for the profile's unit fits.
- A free plan counts at $0. Say what it costs instead, if the page says so (card fees, usage fees).
- A rival in another currency, or one whose metric can't be mapped to the profile (for example included bookings when the profile is staff), stays in the map but out of this table. Say why.
This table shows how each metric scales: seat pricing climbs with team size, band pricing climbs in steps, location pricing and fee-funded models stay flat.
## Step 3. Search demand and price sensitivity
One call with 20 to 30 keywords built from the category, the rivals and the segments:
```json
{"platform": "dataforseo", "action": "kw_google_ads_search_volume", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "keywords": ["<KEYWORD_1>", "<KEYWORD_2>"], "location_code": 2840, "language_code": "en"}
```
Each row gives `search_volume` (monthly average), `cpc` and `competition`. Build the list from these groups (C = category phrase, R = a rival, S = a segment):
| Group | Patterns |
|---|---|
| Head | "C", "C app" |
| Price research | "C pricing", "C cost", "R pricing" for every rival |
| Free-seeking | "free C", "free C app", "cheap C", "is <leader> free", "<leader> free plan" |
| Switching | "R alternative" for the 2 biggest rivals |
| Segment | "C for S", "S C" for each segment the user sells to |
| Enterprise | "enterprise C", "C for teams" |
Send both segment patterns for every segment the user names, and the whole list in one call. A keyword with no volume returns null: list it as "no data" and count it as 0 in the sums. Google Ads can merge close variants: two phrasings ("salon booking software", "booking software for salons") may come back with the same volume, CPC and monthly trend. List both, but count the pair once in a group's sum. Then compute:
- **Free-seeking share** = free-seeking volume รท (free-seeking + price-research volume). How strongly the market expects a no-cost way in.
- **Leader free check** = the leader's free-seeking volume รท "<leader> pricing" volume. How often buyers ask whether the leader is free before (or instead of) asking what it costs.
- **Segment CPC index** = a segment keyword's CPC รท the CPC of the highest-volume head keyword. What advertisers pay for that buyer relative to the average buyer, a proxy for how much that segment is worth.
- **Switching volume** per rival, and **enterprise volume**.
## Step 4. Your own signals (optional, when connected)
**4a. How searchers find your pricing (Search Console).** Last 90 complete days:
```json
{"platform": "google-search-console", "action": "search_analytics", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "site_url": "<SITE_URL>", "dimensions": ["query"], "start_date": "<START>", "end_date": "<END>", "row_limit": 1000}
```
Keep queries with a price word: price, pricing, cost, free, cheap, discount, coupon, plan, subscription, trial, vs, alternative. Group them like Step 3 and report impressions and clicks per group. This pull stops at 1,000 rows; when it returns exactly 1,000, say the shares are of the visible rows.
**4b. Does pricing traffic convert (GA4).** Last 30 complete days:
```json
{"platform": "google-analytics", "action": "get_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "property_id": "properties/<PROPERTY_ID>", "dimensions": ["pagePath"], "metrics": ["screenPageViews", "activeUsers", "sessions", "keyEvents"], "start_date": "<START>", "end_date": "<END>", "dimensionFilter": {"filter": {"fieldName": "pagePath", "stringFilter": {"matchType": "CONTAINS", "value": "pric"}}}, "limit": 20}
```
```json
{"platform": "google-analytics", "action": "get_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "property_id": "properties/<PROPERTY_ID>", "dimensions": ["eventName"], "metrics": ["eventCount", "totalUsers", "keyEvents"], "start_date": "<START>", "end_date": "<END>"}
```
Report sign-up or purchase key events per 100 pricing page viewers. If no key event fired in the window, the rate is **unknown**: a defined event that never fires measures nothing. The page itself (layout, anchors, objections) belongs to the Pricing Page Auditor skill.
**4c. What customers actually pay (Stripe).** Untested until a Stripe account is connected; the bodies follow the helper schema:
```json
{"platform": "stripe", "action": "get_products", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "active": true, "auto_paginate": true}
```
```json
{"platform": "stripe", "action": "get_prices", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "active": true, "auto_paginate": true}
```
```json
{"platform": "stripe", "action": "get_subscriptions", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "status": "all", "auto_paginate": true}
```
```json
{"platform": "stripe", "action": "get_coupons", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "auto_paginate": true}
```
From these: plan mix (active subscriptions per price), average revenue per customer, share on annual billing, share with a discount, trialing count, and cancellations in the last 90 days per plan. Amounts are in the smallest currency unit (cents): divide by 100.
**Signs you are underpriced** (any two): most customers sit on the cheapest paid plan while using it heavily; prospects rarely push back on price; you are well under the paid median at the typical profile (Step 2); cancellations rarely cite price; rivals raised prices recently. **Signs you are overpriced:** cancellations cluster on one plan, heavy discount use (over a third of active subscriptions), and pricing traffic that doesn't convert while other pages do.
## Step 5. Decisions
Apply each rule, show the numbers that triggered it, and say when the user's business makes a rule wrong. The thresholds are starting points.
| # | Decision | Rule |
|---|---|---|
| D1 | Entry offer | **Free plan** when the free-seeking share is 40% or more and at least half the rivals cost $0 at the smallest profile: cap it at the smallest profile. **Trial only** when the share is under 25% and fewer than half the rivals are free. In between, test a free plan against a reverse trial (everything unlocked for a set time, then the free plan). Trial length follows time to first value: 7 days when value shows in the first session, 14 as the default, 30 when setup takes days. A card up front gets fewer, more serious starts. Overrule the numbers when the product says otherwise: a free plan suits a product that spreads through use and costs little per free user; a trial suits one that needs setup before it shows value. |
| D2 | Value metric | Pick the unit that (a) grows as the customer gets more value, (b) the buyer can predict, (c) is hard to game, (d) you can measure, and (e) the category already accepts. Use Step 2 to show how each rival's metric scales across the profiles, and where seat pricing gets expensive. |
| D3 | Price points | **Core plan:** at or under the median paid rival price at the typical profile. **Growth plan:** at or under the median paid price at the large profile. Going above a median needs a named advantage buyers pay for, and a test. Adjacent paid plans sit 1.3ร to 3ร apart: under 1.3ร they blur together, over 3ร they leave a gap a middle plan should fill. |
| D4 | Plan count | Three rungs (entry, core, growth) by default, plus a contact-us rung when D5 says so. Use four or more only when the median paid price at the large profile is 5ร or more the median paid price at the typical profile. |
| D5 | Enterprise rung | Add a contact-us rung when at least half the rivals show one, or the user has deals that need contracts or security reviews. Don't lead with it when enterprise search volume is under 100 a month. What enterprise buyers expect: single sign-on, audit logs, admin controls, an uptime commitment, security documents and a named contact. |
| D6 | Annual billing | Take one saving per rival: the largest the page shows (its "save up to" figure). Leave out rivals with no annual option or an amount with no billing label. Match the median of those savings, kept within 15% to 25%. Show annual prices by default only when most rivals do. Savings and the default toggle are not amounts, so rivals in any currency count in both. |
| D7 | Segment package | Test every segment the user names. A segment keyword with a CPC index of 2 or more and 100 or more searches a month is a segment worth a dedicated package. Price it against the rival plan that names the same segment, if there is one: at or under that plan, and 1.3ร to 3ร the plan it builds on. Compare all three in one unit: if the rival charges per location and your plans charge per account, compare at one location, say what each extra location costs at the rival, and say where a second location goes in your ladder. |
| D8 | Value ceiling | Only with value inputs: the price should stay at or under 10% to 25% of the monthly value one customer gets, and above the cost to serve. The floor that matters to the buyer is the next best alternative (Step 2), not your cost. Not run without the inputs; say so. |
## Step 6. Value ladder and offer stack
Lay out the rungs a customer climbs, from the first free or cheap step to the most expensive plan, and the add-ons around them:
- **Entry:** removes the reason not to start (D1).
- **Core:** where most customers should land; the plan you badge.
- **Growth:** for the large profile; adds capacity and the controls bigger teams need.
- **Band edges** (when the metric is a band): each paid rung covers up to twice the profile it is priced for, so a growing customer has headroom before the next step. With profiles of 1, 3 and 10 staff: entry 1, core 2 to 6, growth 7 to 20.
- **Segment package or custom rung:** D7 and D5.
- **Add-ons:** only ones the market already sells (Step 1): usage credits, setup or migration services, extra capacity, assistants. Each add-on should answer "what does a customer who outgrows this plan buy next?"
Separate rungs with the levers buyers understand: usage limits (staff, bookings, contacts), features, support level, and access and control (API, single sign-on, audit logs, admin roles). Limits that track the value metric (D2) make the best upgrade triggers.
Flag gaps: adjacent rungs more than 3ร apart, a rung with no reason to upgrade into it, or an add-on that costs more than the next plan.
## Step 7. Perception and packaging review
From the pages (Step 1) and search (Steps 3 and 4a):
- **Price endings:** prices ending in 9 read as value; round prices read as premium and simple. Note what the category does.
- **Badges and anchors:** which plan rivals badge, and any "starts at" or high plan that makes the middle look reasonable (an anchor), or a weaker plan placed so the badged one looks like the obvious pick (a decoy).
- **Billing framing:** annual by default or monthly, and how the saving is shown (percent, months free, or per-month price). Small daily framing ("under $1 a day") makes a low price feel smaller; it doesn't help a premium position.
- **Entry wording:** how plainly rivals say "free" or "no card needed", and whether searchers are asking (leader free check).
- **Plan names:** names that say who the plan is for beat names that only say size.
- **Readable prices:** when a page draws its prices with scripts (Step 1 needed the fallback), search engines and AI assistants may not see them either. If the user's own page does this, recommend putting the prices in the page text.
- **Your page (if you have one):** the same checks on your plans, and the 4a query groups: many "free" or "cheap" queries landing on your pricing means the entry offer needs to be clearer, not cheaper.
## Step 8. Validate before you ship
The market map tells you where you can sit; buyers tell you what they will pay. Recommend at least one of these:
- **Van Westendorp price sensitivity survey:** ask each respondent four prices (too cheap to trust, a bargain, getting expensive, too expensive to consider). Plot the cumulative answers; the crossings give an acceptable range and a point of least resistance. Read at least 100 answers per segment you want to price separately, and show the product description, not just the name.
- **Gabor-Granger ladder:** ask "would you buy at $X?" and move up after a yes, down after a no. Ladder: the lowest, median and highest paid rival price at the typical profile, plus one rung 25% above the highest.
- **Conjoint:** for a big repackaging; buyers pick between plan bundles, which prices each feature and limit. Use it when plans differ on many features.
**Pricing experiments:**
| Test | Measure |
|---|---|
| Free plan vs reverse trial (D1) | Paid conversion by day 30 and 90, not sign-ups |
| Core price at two ladder points | Paid conversion and revenue per visitor to pricing |
| Annual default on vs off | Annual share and first-year revenue |
| Metric: seat vs band | Expansion revenue at 90 days |
| Plan names | Plan mix |
Test on new customers only, one change at a time, for at least one full billing cycle. If traffic is too thin for a split test, run the prices in sequence and compare like-for-like periods, or vary quotes in sales calls and track close rates.
**Before launch:** the pricing page and plan limits match, billing is set up for every plan and the annual option, sales and support know the new prices and the upgrade triggers, and the FAQ answers "what happens to my current plan?"
## Changing prices you already charge
Use this when Step 4 shows you are underpriced, or the user asks to raise prices:
1. **Pick the approach:** new customers only (existing ones keep their price, simplest, leaves money behind); existing customers at renewal with 60 to 90 days' notice and an option to lock the old price by switching to annual; a new plan with new value at the new price, which existing customers may choose; or a full restructure that maps each customer to the nearest new plan.
2. **Announce it** with the change and sunset announcements mode (change type "price change"): it sizes who is affected, orders who hears first, writes the notice, the FAQ and the support lines, and sets the reaction checks. The notice says what added value since they joined. No surprises in the invoice.
3. **Watch** paid conversion on the pricing page (4b) and cancellations per plan (4c) for two billing cycles.
## Pricing and acquisition economics
Higher prices only help if retention holds. Lifetime value = monthly revenue per customer ร gross margin รท monthly churn. Keep lifetime value at about 3ร the cost to acquire a customer or better; a higher price gives more room to pay for ads, a lower price needs cheaper acquisition. For the full calculation on live ad spend, use the LTV:CAC Ratio Optimizer skill.
Advertise each rung to the buyer it fits: the entry offer to broad, problem-aware audiences; the core plan to high-intent searches ("<category> pricing", "<rival> alternative"); a segment package to the segment terms D7 found; the contact-us rung to named accounts.
## Report format (pricing strategy mode)
1. **Headline:** the recommended metric, entry offer, plans and prices in three lines, with the market, the rivals and the date the pages were read.
2. **Market price map:** one row per rival and plan, with each price's source.
3. **Price at your profiles:** the Step 2 table, plus who was left out and why.
4. **Demand signals:** free-seeking share, leader free check, segment CPC indexes, switching and enterprise volume, with the keyword table.
5. **Your own signals:** 4a to 4c, or "not connected" / "not run" with the reason.
6. **Decisions D1 to D8:** each with the rule, the numbers and the verdict.
7. **Recommended plans:** rung, metric, price ceiling, who it's for, the limit that moves a buyer up.
8. **Value ladder and gaps.**
9. **Perception review.**
10. **Validation plan and experiments.**
11. **Unknowns:** every price, check or signal that couldn't be read, and why.
## Mode: offer design and profit check
The offer is the whole deal a buyer is asked to accept, not just the price. This mode builds or repairs it from what buyers actually object to, checks it against what rivals give, costs every addition per sale, and sizes a test. It suits courses, services, digital products, stores and self-serve software alike.
**Ask for** (defaults in brackets):
- The product, its price, and who buys it.
- **Cost per sale:** delivery or fulfilment cost, payment fees and any per-buyer support time [ask; never assume a margin].
- **Refund rate** over the last 90 days and the current guarantee [pulled from the store when connected; otherwise ask].
- **The current offer** in the user's words: what is included, what makes buying feel safe (guarantee, cancellation terms, trial period), the terms (one payment, instalments, monthly) and any reason given to buy now.
- **Offer page traffic and conversion rate** for the last 30 days [GA4 when connected], used only to size the test.
- **Objection evidence the user has:** reviews, sales call notes, support tickets, comments, survey answers. Paste is fine.
**Refund rate from the store** (untested until a store is connected). WooCommerce, last 90 days, refund rate = `total_refunds` รท `total_sales`:
```json
{"platform": "woocommerce", "action": "get_sales_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "filters": {"date_min": "<START>", "date_max": "<END>"}}
```
Shopify: the `get_orders` body shown under R2 below, then refunded amounts from each order's `refunds` รท order totals, for orders created in the window.
**O1. Write down the current offer** in four lines: the core package, what makes buying feel safe, the terms, the reason to act now. A missing line is a finding.
**O2. Count the objections.** Collect lines from every source available and sort each into the first theme it matches:
| Theme | Words that place a line here |
|---|---|
| Worth the money | worth it, worth the money, expensive, overpriced, price, cost, cheaper |
| Fear it won't work | refund, money back, guarantee, cancel, does it work (or "does <name> work"), results |
| Trust | legit, scam, review, reviews, complaints |
| Effort and time | how long, hard, difficult, time, setup |
| Fit | for beginners, for small business, for me, without experience |
| Cheaper or free options | free, alternative, vs, instead |
| Waiting | sale, coupon, discount, black friday, next intake, start date |
Sources:
- **Search Console** (the Step 4a pull, 90 days): queries that contain the brand or product name plus a theme word. Weight by impressions.
- **Keyword volumes** (DataForSEO, one `kw_google_ads_search_volume` call, the Step 3 body): the category and the 2 biggest rivals, each with "worth it", "review", "legit", "refund", "cost" and "free", plus any other objection phrase buyers in the category search (for example "how long does it take to learn <skill>"). Weight by monthly volume.
- **Product reviews** (WooCommerce, when connected):
```json
{"platform": "woocommerce", "action": "get_product_reviews", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "auto_paginate": true, "filters": {"product": "<PRODUCT_ID>", "status": "approved"}}
```
Keep reviews rated 3 or lower (a 5-star review that mentions the price is praise, not an objection). Weight 1 per review.
- **Pasted lines** (calls, tickets, comments, survey answers): weight 1 per line.
A line with no theme word is left out. Score each theme as its share of the objection evidence within each source, averaged over the sources that returned data, so impressions, volumes and review counts never get added together. Rank the themes. A theme with no evidence gets no answer in the offer.
**O3. What rivals give.** For the 2 to 4 rivals the buyer compares against:
- Their offer page through `onpage_content_parsing` (the Step 1 body): guarantee length and conditions, what is included, payment terms, any deadline.
- Their running ads, which show the offer they lead with:
```json
{"platform": "ads-libraries", "action": "facebook_search_companies", "workspace_id": "<WORKSPACE_ID>", "query": "<RIVAL_NAME>"}
```
```json
{"platform": "ads-libraries", "action": "facebook_company_ads", "workspace_id": "<WORKSPACE_ID>", "page_id": "<PAGE_ID>", "country": "US", "max_ads": 30, "trim": true}
```
```json
{"platform": "ads-libraries", "action": "google_company_ads", "workspace_id": "<WORKSPACE_ID>", "domain": "<RIVAL_DOMAIN>", "region": "US"}
```
Meta ads carry the ad text. Google's library rows carry no ad text, only a link to each ad, and in testing a domain search returned ads from an unrelated advertiser too: count only rows whose `advertiserName` is the rival, and open the `adUrl` to read an offer. A rival with no running ads is recorded as "no ads running", not as "no offer".
Record per rival: guarantee (days and conditions), extras, payment terms, reason to act now. Count how many rivals give each.
**O4. The offer map.** For each of the top 3 themes (and any other theme scoring 15% or more), choose one element that answers it, and only one:
| Theme | Elements that answer it |
|---|---|
| Worth the money | a smaller starter package, payment in instalments, a plain comparison with the next best option's total cost |
| Fear it won't work | a guarantee with a clear window and simple conditions, a pilot or first month at lower risk, cancel any time |
| Trust | named results and reviews near the price, a sample lesson or demo, who is behind it |
| Effort and time | done-with-you setup, templates, live help or an onboarding call, a stated time to first result |
| Fit | a fit check before buying, a track for beginners, who it is not for |
| Cheaper or free options | what the free option lacks, said plainly; a starter package priced against it |
| Waiting | a true reason to act now (below) |
Match or beat the rival norm only where the theme ranks high: when most rivals give a 30-day guarantee and "fear it won't work" ranks first, a 7-day guarantee is a gap; when the theme ranks low, a longer guarantee is cost with no answer.
**Variants.** Student, education, nonprofit and startup offers are the same offer with a gate: who qualifies and how it is checked (a school email domain, a verification service, proof of incorporation date or funding stage), the discount, a cap per customer, and when it ends (graduation, 12 months). Cost each variant in O5 and track the share of buyers using it.
**O5. Profit check per sale.** For the current offer and the new one:
- Contribution per sale = price ร (1 - refund rate) - payment fees - delivery cost - cost of each extra per buyer.
- **Extras:** the cost per buyer who takes it up (a live call costs the host's time divided by the buyers on it). Digital extras that cost nothing per buyer still cost time to make: list that once, outside the per-sale figure.
- **Guarantee:** a new or longer guarantee is planned at 1.5 times the current refund rate until a test shows the real rate (a starting point; say so). With no refund history, show the check at 5%, 10% and 15% refunds and say which one breaks it.
- **Instalments:** the provider's fee plus the expected unpaid amount (default rate ร the share of the price still owed when defaults happen), times the share of buyers who choose instalments.
- **Break-even lift** = current contribution per sale รท new contribution per sale - 1: how much more often buyers must say yes for the new offer to earn the same.
- **Verdict:** keep when the break-even lift is 15% or less; test first between 15% and 40%; cut or reprice an element above 40%, or when contribution per sale falls to zero or below.
**O6. A true reason to act now.** Use only reasons that are true and enforced:
- a start date (a cohort, a season, a delivery cut-off);
- a price rise on a stated date that really happens;
- real capacity (seats on live calls, stock you hold, slots a team can serve);
- an extra that is really withdrawn on a stated date.
Refuse, and say why: countdown timers that restart, "only 3 left" not tied to stock, a "was" price you never charged, and fake sign-up counts. In the US, the FTC's pricing guides treat a former price as deceptive unless it was really charged; in the EU, a price cut must be shown against the lowest price of the previous 30 days.
**O7. Present it.** Where each element goes: the answer to the top objection next to the price and the buy button; the guarantee in plain words next to the button and in the FAQ; instalments next to the full price, never instead of it; the reason to act now with its date. In ads, lead with the element that answers the top theme. For full page copy, use Copywriting if installed.
**O8. Test it.** One change against the current offer, new visitors only.
- Primary metric: **contribution per visitor**, read after the guarantee window closes, because a guarantee can raise sales and refunds together.
- Size to detect the larger of the break-even lift and 10%: n per arm = (1.96 + 0.84)ยฒ ร (p1(1 - p1) + p2(1 - p2)) รท (p2 - p1)ยฒ, where p1 is the current conversion rate and p2 = p1 ร (1 + that lift). That is 95% confidence and 80% power.
- Days = 2n รท daily offer page visitors. Over 56 days means traffic is too thin: test a bigger change, or run the offers one after the other over like periods.
- For deeper test design, use A/B Test Designer if installed.
**Offer report:** the current offer in four lines; objection themes with their evidence per source; the rival offer table; the new offer (each element, the objection it answers, its cost per sale, where it shows); the profit check for both offers; break-even lift and verdict; the reason to act now and anything refused; the test plan; unknowns.
## Mode: regional pricing by country
Sets prices by country for software, digital products and subscriptions, so a discount goes only where price is what stops people buying, and a higher price is tested only where buyers already pay more readily than at home. Run it after the home price is set (Steps 5 and 6), or on the user's current prices. Store currency display and shopping feed prices are outside this mode.
**Ask for:** the home price list and currency; the product type; the markets to consider; cost to serve one customer and payment fees; and sales by country (a billing export or an order list) when no store is connected. Currency support in their billing system decides whether local prices are possible or only discounted home-currency prices.
**R1. How expensive each country is.** From the World Bank's published data (not an InsightfulPipe action; read it with your web fetch tool or ask the user to paste it):
- `https://api.worldbank.org/v2/country/IND;BRA;MEX/indicator/PA.NUS.PRVT.PP?format=json&mrnev=1`: purchasing power parity conversion factor for household consumption, local currency per international dollar.
- The same URL with `PA.NUS.FCRF`: the official exchange rate, local currency per US dollar.
- **Price level ratio** = PPP factor รท exchange rate: how expensive a country is against the US (India was 0.23 and the UK 0.92 for 2025). If the home market isn't the US, divide each country's ratio by the home country's. `mrnev=1` returns the latest year with a value; state the year. The older `PA.NUS.PPPC.RF` indicator is archived and returns an error.
**R2. Is price the blocker? Your funnel by country.** Last 90 complete days:
```json
{"platform": "google-analytics", "action": "get_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "property_id": "properties/<PROPERTY_ID>", "dimensions": ["country"], "metrics": ["sessions", "activeUsers", "keyEvents"], "start_date": "<START>", "end_date": "<END>", "limit": 50}
```
```json
{"platform": "google-analytics", "action": "get_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "property_id": "properties/<PROPERTY_ID>", "dimensions": ["country", "eventName"], "metrics": ["eventCount", "totalUsers"], "start_date": "<START>", "end_date": "<END>", "dimensionFilter": {"filter": {"fieldName": "eventName", "inListFilter": {"values": ["<SIGNUP_EVENT>", "<PURCHASE_EVENT>"]}}}, "limit": 100}
```
Paid customers by country come from the store or the billing export:
```json
{"platform": "woocommerce", "action": "get_orders", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "auto_paginate": true, "filters": {"after": "<START>T00:00:00"}}
```
```json
{"platform": "shopify", "action": "get_orders", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "shop_name": "<SHOP_NAME>", "status": "any", "updated_at_min": "<START>T00:00:00Z", "limit": 250, "auto_paginate": true}
```
Count paid orders by billing country (`billing.country` in WooCommerce, `billing_address.country_code` in Shopify). Shopify filters on update time, so keep only orders whose `created_at` is in the window. App store revenue isn't readable through a connector: use a pasted App Store Connect or Play Console export.
Per country: sessions, sign-ups (or trial starts, or checkouts started for a store) per session, paid customers per sign-up, each against the home market. A country **gets a lower price** only when all four hold:
1. Enough interest: 300 or more sessions in 90 days and at least 1% of all sessions.
2. They want it: the sign-up rate is at least 70% of the home market's.
3. They don't pay: paid per sign-up is at most 50% of the home market's.
4. It is cheaper to live there: price level ratio under 0.80.
When (2) fails, the problem is fit, language or traffic quality, and a discount won't fix it. When (3) fails, they already pay: keep the home price. When (1) fails: too little data, keep the home price and look again in a quarter. The thresholds are starting points.
**R3. What local rivals charge.**
- **Pricing pages:** `onpage_content_parsing` (the Step 1 body) on the rival's local page, with `accept_language` set to the market (for example "en-IN", "pt-BR"). Record the currency you got.
- **App stores:** the public listing per storefront.
```json
{"platform": "apple-store", "action": "lookup_by_id", "workspace_id": "<WORKSPACE_ID>", "app_id": "<APPLE_ID>", "country": "IN"}
```
```json
{"platform": "google-play", "action": "app_details", "workspace_id": "<WORKSPACE_ID>", "app_id": "<PACKAGE_NAME>", "country": "in"}
```
`price` comes back in the storefront's own currency units (in testing, 999 with `currency` "INR" for an app priced 9.99 USD in the US store), and covers the upfront price only: in-app subscription prices aren't in the listing.
- Convert each local price to US dollars at the exchange rate and divide by the rival's home price: that is the rival's own discount for the country. Many rivals don't discount at all (in testing, one app's Indian price came to more than its US price).
**R4. Bands.** Countries that pass R2 get a band from their price level ratio; every other country stays at the home price:
| Price level ratio | Price, share of home |
|---|---|
| 0.80 or more | 100% |
| 0.55 to under 0.80 | 75% |
| 0.35 to under 0.55 | 55% |
| under 0.35 | 40% (the floor) |
A country whose price level ratio is 1.20 or more (against home) and whose paid-per-sign-up rate is at or above the home market's can test up to 115% of the home price. No band goes below cost to serve plus payment fees. Flag a band price above the local rivals' median (you'll look expensive there) or below half of it (money left behind).
**R5. Currency, rounding and tax.** Convert at the exchange rate (or the billing system's rate), then round to the nearest price people expect in that currency, in the home price's style: a home price ending in 9 becomes whole local amounts ending in 9 (99 above 1,000), and Brazil uses ,90. Consumer prices in the EU, UK and Australia are shown with tax included; US and Canadian prices before tax. Review local prices once a year or when an exchange rate moves more than 10%.
**R6. Stop the abuse.** A lower price invites buyers from dearer countries.
- Set the price from the card's issuing country and the billing address; use IP location only to choose what to display.
- Charge the home price when the card country and billing country disagree, or a VPN or proxy is detected at checkout.
- Keep the customer at their band on renewal only while the card country still matches.
- Limit regional prices to self-serve plans: team and contract plans pay the home price.
- Watch the share of regional sign-ups paying with a card from another country. Above 5%, tighten the checks.
**R7. Model the revenue before changing anything.** For each country that gets a lower price:
- **Break-even lift** = home price รท band price - 1: how many more paying customers it needs to earn the same.
- **Ceiling** = home paid-per-sign-up rate รท the country's rate - 1: the most a price cut could add if price were the whole gap.
- **Go** when the ceiling is at least twice the break-even lift (half the gap closing still pays). **Test** when it is between one and two times. **No** below that: even closing the whole gap wouldn't pay back.
- New customers only; existing customers keep their price.
- When Google Ads runs in those countries, check that acquisition still pays back at the lower price:
```json
{"platform": "google-ads", "action": "gaql", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "account_id": "<CUSTOMER_ID>", "query": "SELECT geographic_view.country_criterion_id, geographic_view.location_type, metrics.clicks, metrics.cost_micros, metrics.conversions FROM geographic_view WHERE segments.date DURING LAST_30_DAYS AND geographic_view.location_type = 'LOCATION_OF_PRESENCE' LIMIT 200"}
```
Map `country_criterion_id` to a name with `SELECT geo_target_constant.id, geo_target_constant.name, geo_target_constant.country_code FROM geo_target_constant WHERE geo_target_constant.id IN (<IDS>)`. Cost is in micros: divide by 1,000,000. Ads cost per paid customer should be recovered within 12 months of the band price ร gross margin.
**R8. Test it.** Launch the band in one or two "go" countries for new customers, keep the rest as they are, and compare paid conversion and revenue per visitor against the 90 days before, for at least one billing cycle. Watch refunds and the foreign-card share.
**Regional report:** a country table with the price level ratio and its year, sessions, sign-up rate and paid rate against home, the blocker verdict, local rival prices, the band, the local price rounded, break-even lift, ceiling and decision; the abuse rules; the test plan; unknowns.
## Mode: change and sunset announcements
Plans and writes announcements customers won't welcome, or that change how they use the product: a plan or product sunset, a discontinued item, a policy or terms change, a rename or rebrand, and the customer side of a price change. Office closures, layoffs and restructures are HR and legal communication, not this mode.
**Ask for:** what changes and the effective date; why; what replaces it; who is affected; what they must do and by when; what you offer them (migration help, a credit, a locked price, extended access); and anything a contract or the terms promise about notice.
**C1. Size who is affected.** Use whatever is connected; otherwise ask for counts.
- **Klaviyo:** the segments and lists, then each segment's size:
```json
{"platform": "klaviyo", "action": "get_segments", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "auto_paginate": true}
```
```json
{"platform": "klaviyo", "action": "get_segment_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "body": {"data": {"type": "segment-values-report", "attributes": {"timeframe": {"key": "last_30_days"}, "filter": "equals(segment_id,\"<SEGMENT_ID>\")", "statistics": ["total_members"]}}}}
```
```json
{"platform": "klaviyo", "action": "get_lists", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "auto_paginate": true}
```
- **Mailchimp** (untested until connected): `{"platform": "mailchimp", "action": "list_segments", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "list_id": "<LIST_ID>", "auto_paginate": true}` returns each segment's `member_count`.
- **Buyers of a discontinued item:** WooCommerce `get_orders` with `"filters": {"product": "<PRODUCT_ID>", "after": "<12_MONTHS_AGO>T00:00:00"}`, or Shopify `get_orders` (the R2 body), counting orders whose `line_items` hold the product. Count customers, not orders, and their spend.
- **Users of a changed feature or page:** GA4, last 90 days:
```json
{"platform": "google-analytics", "action": "get_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "property_id": "properties/<PROPERTY_ID>", "dimensions": ["pagePath"], "metrics": ["activeUsers", "screenPageViews"], "start_date": "<START>", "end_date": "<END>", "dimensionFilter": {"filter": {"fieldName": "pagePath", "stringFilter": {"matchType": "BEGINS_WITH", "value": "<FEATURE_PATH>"}}}, "limit": 20}
```
- **Subscribers on a retired plan:** Stripe `get_subscriptions` (Step 4c), counted per price.
Split the affected customers by value (revenue in the last 12 months, or monthly revenue): the top 10% get a personal message.
**C2. Who hears first, and when.** Set A as the day affected customers are told and E as the effective date. Notice before E, as starting points (a contract or the terms always win):
| Change | Notice before E |
|---|---|
| Plan or product sunset | 90 days or more; annual customers keep it to the end of their paid term |
| Discontinued item | 30 days or more before the last order date; say how long refills, parts and support last |
| Policy or terms change | what your terms promise, often 30 days; flag for legal review |
| Rename or rebrand | 2 to 4 weeks when anything customers use changes (login address, app name, sender name, invoice name); otherwise on reveal day |
| Price change | 60 to 90 days for existing subscribers (see "Changing prices you already charge") |
Order: staff who face customers (support, sales, success) at A - 7 with the FAQ and talking points; top-value affected customers from A - 3, from a named person; partners and resellers at A - 2; all affected customers on A, by email and in the product; everyone else and the public on A (changelog, blog, social); press only when the change is news. Reminders to those who haven't acted at E - 30, E - 7 and E - 1, and a short "it's done" note on E.
**C3. Write every message.** Each message, in this order:
1. The change and the date, in the first two lines.
2. What it means for this customer: their plan, product, renewal date or price.
3. What they need to do and by when, or "nothing".
4. What you are doing to help.
5. Why, in one or two honest sentences.
6. Where to ask.
Plain subject lines that name the change. Never open a loss with "exciting news", never bury the date, never make the customer work out what it means for them. Also write the FAQ (6 to 10 questions this change raises), support replies for the 3 likeliest questions, sales talking points (including what not to promise), the in-product notice, and social post text (written as text only; no scheduler connector is used). A rebrand message says what stays the same (account, data, prices, team) before what changes.
**C4. Drafts, only after confirmation.** With the user's yes, it can create each email as a draft campaign. Nothing is sent or scheduled; the user sends it from Klaviyo or Mailchimp.
```json
{"platform": "klaviyo", "action": "create_campaign", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "body": {"data": {"type": "campaign", "attributes": {"name": "<CAMPAIGN_NAME>", "audiences": {"included": ["<SEGMENT_ID>"]}, "campaign-messages": {"data": [{"type": "campaign-message", "attributes": {"definition": {"channel": "email", "label": "Main", "content": {"subject": "<SUBJECT>", "preview_text": "<PREVIEW>", "from_email": "<FROM_EMAIL>", "from_label": "<FROM_NAME>"}}}}]}, "send_strategy": {"method": "static", "datetime": "<A_DATE>T15:00:00+00:00"}}}}}
```
```json
{"platform": "mailchimp", "action": "create_campaign", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "body": {"type": "regular", "recipients": {"list_id": "<LIST_ID>", "segment_opts": {"saved_segment_id": "<SEGMENT_ID>"}}, "settings": {"subject_line": "<SUBJECT>", "preview_text": "<PREVIEW>", "title": "<CAMPAIGN_NAME>", "from_name": "<FROM_NAME>", "reply_to": "<REPLY_TO>"}}}
```
Klaviyo creates the campaign in Draft status; the body text is added in Klaviyo or with a template. Both writes need a Read & Write connection.
**C5. Watch the reaction.** Set the baseline before sending, from the last 10 comparable email sends:
```json
{"platform": "klaviyo", "action": "get_campaign_report", "workspace_id": "<WORKSPACE_ID>", "brand_id": "<BRAND_ID>", "body": {"data": {"type": "campaign-values-report", "attributes": {"timeframe": {"key": "last_12_months"}, "filter": "equals(send_channel,\"email\")", "statistics": ["recipients", "delivered", "unsubscribes", "unsubscribe_rate", "spam_complaints", "spam_complaint_rate"]}}}}
```
Rates come back as fractions (0.002 is 0.2%). Compare the announcement with the baseline on the same basis (per recipient or per delivered email). In Mailchimp, `list_reports` gives `unsubscribed` and `abuse_reports` per campaign, and `get_report_unsubscribes` and `get_report_abuse_reports` give the people and reasons for one campaign. Then, after each send:
- **Unsubscribes:** flag a send at more than 2 times the baseline median.
- **Spam complaints:** flag at 0.1% or more; Gmail and Yahoo require bulk senders to stay under 0.3%.
- **Did they act:** the share of affected customers who migrated, switched or replaced the item by E - 7 and by E.
- **Searches** (Search Console, `dimensions: ["date", "query"]`, the Step 4a body): for a rebrand, the new name's share of brand impressions by week; for a sunset or discontinued item, searches for the product with "discontinued", "alternative" or "replacement".
- **Support:** ticket volume and the top questions; add them to the FAQ.
**Announcement report:** the change and its type; affected customers per segment with their value; the dated rollout (who, what, when, channel); each message; the FAQ, support replies and talking points; the drafts offered; the baseline and the flags to watch; legal review flags; unknowns.
## What this skill changes
In the pricing, offer and regional modes it changes nothing: it reads pages and data and returns a plan. It never edits prices, products or coupons in Stripe or a store, and never edits your pricing or offer page. In the announcement mode, after you confirm, it can create draft email campaigns in Klaviyo (`create_campaign`) or Mailchimp (`create_campaign`). It never sends or schedules them.
## Without a connection
If DataForSEO isn't connected, ask the user to paste each rival's plan names, prices, limits and entry offer (or read the pages with your web fetch tool), and to share any keyword volumes they have. Run Steps 2 and 5 to 8 on that, label the demand checks **unknown**, and say the market map came from the user.
The other modes run the same way on pasted material:
- **Offer design:** pasted reviews, call notes, tickets and comments for O2; rival offer pages read with your web fetch tool or pasted for O3; cost, refund rate and conversion from the user for O5 and O8.
- **Regional pricing:** World Bank figures fetched or pasted; sessions, sign-ups and paid customers by country from an analytics or billing export; local rival prices pasted.
- **Announcements:** affected counts and past email results (sends, unsubscribes, complaints) from the user; every message, the FAQ and the timeline are written the same way, and nothing is drafted in an email tool.
Label anything not read from a source as "from the user".
## Go deeper
- **Pricing Page Auditor:** how the prices are presented and whether visitors act on them.
- **Marketing Psychology:** anchoring, decoys, risk reversal and price framing in more depth.
- **LTV:CAC Ratio Optimizer:** whether the new prices pay for acquisition.
- **Signup Flow CRO:** the free plan or trial start you chose in D1.
- **A/B Test Designer** (if installed): deeper design for the offer and regional price tests.
- **Copywriting** (if installed): the full offer page once the offer is set.
## Rules
- Never invent a price, limit, volume, refund rate or customer count. Unknown is an answer.
- Quote rivals' facts in your own words, with the source per price.
- Keep currencies apart; never mix amounts in different currencies in a median (percentages such as annual savings carry no currency).
- Every recommendation names the decision rule and numbers behind it.
- A recommendation to go above the market median needs a named reason and a test.
- No more than about 7 paid DataForSEO calls per run without asking.
- Every offer element answers an objection that has evidence, and is costed per sale before it is recommended.
- No fake urgency: no restarting timers, invented stock limits, never-charged "was" prices or invented counts.
- A lower regional price goes only to a country that passes the price-is-the-blocker test, and only to new customers.
- Announcements tell staff who face customers first, give every affected customer the date and what it means for them, and flag terms, policy and contract changes for legal review. This skill gives no legal advice.
- Writes are drafts only, after confirmation; it never sends, schedules or changes prices.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# How to Use This Skill
Hey Claude, I just added the "pricing-strategy" skill. Work out what we should charge: read our main rivals' pricing pages, check how buyers search on price, and recommend plans, prices and whether to offer a free plan or a trial.
## What you need
- **The InsightfulPipe MCP connected to Claude, with DataForSEO available.** The skill reads each rival's pricing page and pulls Google Ads search volumes and CPCs itself. A typical run is 5 to 7 paid DataForSEO calls: one per pricing page and one keyword call.
- **3 to 5 rivals.** Name them or paste their pricing URLs. If you don't, the skill proposes the category leaders and checks with you before reading anything.
- **Two or three customer sizes** in the unit that drives cost in your category (staff, seats, contacts, locations). Without them it uses a small, typical and large buyer.
- **Optional:** Search Console and GA4 (how searchers reach your pricing and whether that traffic signs up), and Stripe (plan mix, discounts and cancellations; untested until a Stripe account is connected). Also optional: what one customer gains a month and what one costs you to serve, which turns on the value check.
- **No DataForSEO?** Paste each rival's plans, prices, limits and free plan or trial, and any keyword volumes you have. The skill runs the same decisions on that and marks the search signals unknown.
- **For the offer mode:** your price, cost per sale and refund rate, plus any reviews, sales call notes or tickets. WooCommerce or Shopify fills in refunds and reviews, Search Console shows objection searches, and the public ad libraries show rival offers.
- **For regional pricing:** your home price and sales by country (GA4, WooCommerce, Shopify or a billing export). The skill reads the World Bank's purchasing power figures and local rival prices, including app store prices per country.
- **For announcements:** what changes, the date and who is affected. Klaviyo, Mailchimp, Shopify, WooCommerce, GA4 or Stripe size the affected customers; Klaviyo or Mailchimp give the baseline for unsubscribes and complaints. Mailchimp, Shopify and WooCommerce paths are untested until one is connected.
## Example requests
**A new product**
Hey Claude, I just added the "pricing-strategy" skill. We're launching an online booking tool for salons and studios. Compare Calendly, Acuity, Setmore and Square Appointments and tell me what to charge for 1, 3 and 10 staff.
**Free plan or trial**
Hey Claude, I just added the "pricing-strategy" skill. Should we offer a free plan, a free trial or a reverse trial? Use our three main rivals and how people search for them.
**Value ladder and offer stack**
Hey Claude, I just added the "pricing-strategy" skill. Lay out a value ladder for our product, from the first free step to a custom plan, with the add-ons our market already sells and any gaps between rungs.
**Pricing perception review**
Hey Claude, I just added the "pricing-strategy" skill. Review how our pricing page and our rivals' pages present price: endings, badges, anchors, annual savings and plan names. Use our Search Console data to see which price searches reach us.
**Raising prices**
Hey Claude, I just added the "pricing-strategy" skill. Check whether we're underpriced against the market and our Stripe data, and plan a price increase for existing customers.
**Offer design and a money-back guarantee**
Hey Claude, I just added the "pricing-strategy" skill. Our $299 course converts at about 1%. Rebuild the offer from what buyers object to and what rivals give, tell me what guarantee to offer, and check the offer still makes money per sale.
**Regional pricing by country**
Hey Claude, I just added the "pricing-strategy" skill. We charge $49 a month everywhere. Use purchasing power parity, our GA4 trial starts and paid customers by country, and local rival prices to tell me which countries should get a lower price, in which currency, and how to stop abuse.
**A sunset or rebrand announcement**
Hey Claude, I just added the "pricing-strategy" skill. We're retiring our legacy plan on February 15. Size who is affected from Klaviyo, plan who hears first, write every message and the FAQ, and tell me how we'll know if it goes badly.
## What you get
1. **A headline** with the recommended pricing metric, entry offer, plans and price ceilings, plus the market, rivals and the date the pages were read.
2. **A market price map:** every rival's plans, prices (annual and monthly), metric, limits, free plan or trial, enterprise gate, add-ons and badges, with the source of each price.
3. **Each rival priced at your customer sizes,** so you see how per-seat, band, per-location and fee-funded models scale.
4. **Demand signals from search:** the share of price searches looking for free, how often buyers ask if the leader is free, switching searches, enterprise searches, and which segments advertisers pay most to reach.
5. **Eight decisions, each with its rule and numbers:** entry offer, value metric, price points, plan count, enterprise rung, annual discount, segment package and value ceiling.
6. **Recommended plans and a value ladder,** with upgrade triggers, add-ons and flagged gaps.
7. **A perception and packaging review** of price endings, badges, anchors, billing framing, free-plan wording and plan names.
8. **A validation plan:** a Van Westendorp survey, a Gabor-Granger price ladder built from rival prices, and pricing experiments, plus a price-increase plan when you need one.
9. **An unknowns list:** every price or signal that couldn't be read, and why.
In the other modes:
- **Offer design:** objection themes ranked from search, reviews and your notes; what rivals give; a new offer where every element answers one objection, with its cost per sale; a profit check with the break-even lift; a true reason to act now (fake urgency refused); a sized test.
- **Regional pricing:** a country table with price level, your sign-up and paid rates against home, a "price is the blocker" verdict, local rival prices, the band and the rounded local price, break-even lift and a go, test or no decision, plus abuse rules.
- **Announcements:** affected customers per segment and value, a dated rollout (staff first), every message, the FAQ, support replies and talking points, draft campaigns offered, and the reaction checks against your own baseline.
## What it can change for you
In the pricing, offer and regional modes, nothing: it reads pages and data and returns a plan. It never edits prices, products or coupons in Stripe or your store, and never touches your pricing page. In the announcement mode, after you confirm, it can create draft email campaigns in Klaviyo or Mailchimp. It never sends or schedules them.
## Tips
- Many pricing pages draw their prices with scripts. When the parsed page has no amounts, the skill reads the page with its web fetch tool or asks you, and marks the source of every price. It never guesses a price.
- Pages can come back in another currency. Prices in a different currency stay in the map but out of the medians unless you give an exchange rate.
- The thresholds are starting points. If a rule doesn't fit your business, say so and the skill notes the override in the report.
- For how the prices are presented and whether visitors act on them, follow up with the Pricing Page Auditor skill. For unit economics on live ad spend, use the LTV:CAC Ratio Optimizer.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
{
"note": "Real run on public data on 2026-10-06 through the InsightfulPipe MCP: DataForSEO content parsing of five public pricing pages and Google Ads keyword volumes (US, English) in two calls: the segment terms for studios and clinics were sent in a second call after review, where a run that follows SKILL.md sends one, on a neutral public topic unrelated to us. The product is a hypothetical new entrant, so it has no Search Console, GA4 or Stripe data and Steps 4a to 4c are not run. Three pages drew their prices with scripts, so those amounts came from the skill's web-fetch fallback, as SKILL.md describes. Generated by script from the raw responses.",
"request": "Hey Claude, I just added the \"pricing-strategy\" skill. We're launching an online booking tool for salons, studios and small clinics. Work out what we should charge: read Calendly, Acuity, Setmore, Square Appointments and SimplyBook.me, check how buyers search on price, and recommend plans, prices and whether to offer a free plan or a trial.",
"product": {
"what": "online booking and reminders for small service businesses",
"buyer": "owner of a salon, studio or small clinic",
"motion": "self-serve",
"current_pricing": "new",
"goal": "growth"
},
"reference_profiles": [
"solo (1 staff)",
"typical (3 staff)",
"larger (10 staff)"
],
"value_inputs": null,
"market": {
"location_code": 2840,
"language_code": "en",
"accept_language": "en-US"
},
"rivals": [
{
"rival": "Calendly",
"pricing_url": "https://calendly.com/pricing"
},
{
"rival": "Acuity Scheduling",
"pricing_url": "https://acuityscheduling.com/pricing"
},
{
"rival": "Setmore",
"pricing_url": "https://www.setmore.com/pricing"
},
{
"rival": "Square Appointments",
"pricing_url": "https://squareup.com/us/en/appointments/pricing"
},
{
"rival": "SimplyBook.me",
"pricing_url": "https://simplybook.me/en/pricing"
}
],
"date_pages_read": "2026-10-06",
"data_pulled": [
{
"call": "dataforseo onpage_content_parsing",
"pages": 5,
"result": "all HTTP 200; prices in the parsed text for Setmore and SimplyBook.me (EUR) only"
},
{
"call": "dataforseo onpage_content_parsing with enable_javascript",
"pages": 1,
"result": "Calendly retried once: still no prices (this run is why SKILL.md says not to pay for the retry)"
},
{
"call": "web fetch fallback (not an InsightfulPipe MCP action)",
"pages": 3,
"result": "Calendly, Acuity Scheduling and Square Appointments plan amounts read from the visible page text"
},
{
"call": "dataforseo kw_google_ads_search_volume",
"keywords": 24,
"result": "first keyword call"
},
{
"call": "dataforseo kw_google_ads_search_volume",
"keywords": 5,
"result": "second keyword call: the segment terms for studios, clinics and \"booking software for salons\", added after review because the first list skipped them; a run that follows SKILL.md sends all keywords in one call"
},
{
"call": "keyword totals",
"keywords": 29,
"result": "26 with volume, 3 with no data; same 12-month window in both calls"
}
],
"paid_calls": 8,
"keywords_sent": [
"appointment scheduling software",
"scheduling software pricing",
"appointment scheduling software cost",
"online booking system cost",
"free scheduling software",
"free appointment scheduling software",
"free online booking system",
"free scheduling app",
"cheap scheduling software",
"calendly pricing",
"acuity scheduling pricing",
"setmore pricing",
"simplybook pricing",
"square appointments pricing",
"calendly alternative",
"acuity scheduling alternative",
"is calendly free",
"calendly free plan",
"salon booking software",
"booking software for small business",
"scheduling software for small business",
"appointment scheduling app",
"enterprise scheduling software",
"scheduling software for teams",
"booking software for salons",
"studio booking software",
"booking software for studios",
"clinic booking software",
"booking software for clinics"
],
"mode_examples": {
"note": "Example data: invented businesses (an online bookkeeping course, and an online booking software company), not real businesses. The World Bank price level figures are the published 2025 values read on 2026-10-30; everything else is invented. Every number in the mode outputs follows from these inputs.",
"offer_design": {
"request": "Hey Claude, I just added the \"pricing-strategy\" skill. Our bookkeeping course converts at about 1% and buyers keep asking about refunds and paying in parts. Rebuild the offer from what buyers object to and what rivals give, and check it still makes money.",
"mode": "offer design and profit check",
"product": {
"name": "Example Bookkeeping Course (online course)",
"business": "Example Bookkeeping Academy (invented)",
"site": "https://bookkeeping-academy.example",
"buyer": "career changers and small business owners learning to keep books",
"price_usd": 299
},
"cost_per_sale": {
"delivery_per_buyer_usd": 6,
"support_hours_per_buyer": 0.25,
"support_hourly_cost_usd": 40,
"payment_fee_pct": 2.9,
"payment_fee_fixed_usd": 0.3
},
"current_offer": {
"core_package": "40 video lessons, quizzes and a practice ledger, lifetime access",
"makes_buying_feel_safe": "7-day refund, only if no more than 2 lessons were opened",
"terms": "one payment of $299",
"reason_to_act_now": "a 15-minute countdown timer that restarts for every visitor"
},
"woocommerce_sales_report_90_days": {
"action": "woocommerce get_sales_report",
"date_min": "2026-07-31",
"date_max": "2026-10-28",
"total_orders": 270,
"total_sales": 80730,
"total_refunds": 3289
},
"offer_page_last_30_days": {
"source": "GA4 get_report, offer page",
"visitors": 9000,
"orders": 90
},
"search_console_brand_queries_90_days": [
{
"query": "example bookkeeping academy refund",
"impressions": 410
},
{
"query": "example bookkeeping academy money back",
"impressions": 120
},
{
"query": "does example bookkeeping academy work",
"impressions": 260
},
{
"query": "is example bookkeeping academy worth it",
"impressions": 380
},
{
"query": "example bookkeeping academy price",
"impressions": 520
},
{
"query": "example bookkeeping academy legit",
"impressions": 300
},
{
"query": "example bookkeeping academy review",
"impressions": 640
},
{
"query": "how long is example bookkeeping academy",
"impressions": 210
},
{
"query": "example bookkeeping academy for beginners",
"impressions": 150
},
{
"query": "example bookkeeping academy coupon",
"impressions": 330
},
{
"query": "example bookkeeping academy vs competitor a",
"impressions": 90
},
{
"query": "example bookkeeping academy login",
"impressions": 900
},
{
"query": "example bookkeeping academy",
"impressions": 4100
}
],
"keyword_volumes_us": [
{
"keyword": "bookkeeping course worth it",
"search_volume": 210
},
{
"keyword": "is a bookkeeping certificate worth it",
"search_volume": 170
},
{
"keyword": "bookkeeping course cost",
"search_volume": 480
},
{
"keyword": "bookkeeping course review",
"search_volume": 140
},
{
"keyword": "free bookkeeping course",
"search_volume": 2400
},
{
"keyword": "bookkeeping course refund",
"search_volume": 30
},
{
"keyword": "competitor a review",
"search_volume": 260
},
{
"keyword": "competitor a legit",
"search_volume": 40
},
{
"keyword": "competitor a free",
"search_volume": 110
},
{
"keyword": "competitor b review",
"search_volume": 90
},
{
"keyword": "competitor b cost",
"search_volume": 70
},
{
"keyword": "how long does it take to learn bookkeeping",
"search_volume": 590
}
],
"product_reviews": [
{
"rating": 5,
"review": "Clear lessons, I set up my own books in a weekend."
},
{
"rating": 5,
"review": "Great value for the price."
},
{
"rating": 2,
"review": "It was hard without any accounting background, and I needed more help."
},
{
"rating": 3,
"review": "Good content, but I did not have the time for 4 weeks at their pace; it took me three months."
},
{
"rating": 2,
"review": "Asked for a refund on day 9 and was told the window had closed."
},
{
"rating": 4,
"review": "Worth it, though I wish there were live sessions for questions."
},
{
"rating": 1,
"review": "Not sure it was worth the money compared with the free videos online."
},
{
"rating": 3,
"review": "I got stuck on reconciliations and the support replies were slow."
},
{
"rating": 5,
"review": "Landed my first two bookkeeping clients after finishing."
},
{
"rating": 3,
"review": "Fine, but expensive for what it is."
},
{
"rating": 2,
"review": "The practice ledger setup was difficult and I almost gave up."
},
{
"rating": 4,
"review": "Solid course. Would like a certificate employers recognise."
}
],
"pasted_sales_chat_lines": [
"What happens if it doesn't work for me, can I get my money back?",
"Can I pay in parts? $299 at once is expensive for me right now.",
"How long does it take if I only have 5 hours a week?",
"Is there any guarantee I can actually get clients after this?",
"Do you ever run a sale? I can wait for black friday.",
"Is this OK for beginners with no accounting background?",
"Why pay when there are free bookkeeping videos on YouTube?",
"Is there someone I can ask when I get stuck?"
],
"rival_offers": [
{
"rival": "Competitor A",
"domain": "course-a.example",
"price_usd": 349,
"guarantee": "30 days, no conditions",
"extras": [
"certificate",
"student community"
],
"payment_terms": "3 monthly payments",
"reason_to_act_now": "none",
"meta_ads_running": 6,
"meta_ads_naming_guarantee": 4,
"google_library_rows": 9,
"google_rows_from_rival": 7
},
{
"rival": "Competitor B",
"domain": "course-b.example",
"price_usd": 249,
"guarantee": "14 days, no conditions",
"extras": [
"spreadsheet templates"
],
"payment_terms": "4 payments",
"reason_to_act_now": "monthly price rise announced with a date",
"meta_ads_running": 3,
"meta_ads_naming_guarantee": 1,
"google_library_rows": 2,
"google_rows_from_rival": 2
},
{
"rival": "Competitor C",
"domain": "course-c.example",
"price_usd": 399,
"guarantee": "30 days, after finishing module 1",
"extras": [
"weekly live Q&A"
],
"payment_terms": "one payment",
"reason_to_act_now": "cohort start dates",
"meta_ads_running": 0,
"meta_ads_naming_guarantee": 0,
"google_library_rows": 0,
"google_rows_from_rival": 0
}
],
"new_offer_inputs": {
"guarantee": "30 days, on finishing module 1 and submitting the practice ledger",
"refund_multiplier_for_new_guarantee": 1.5,
"instalments": {
"payments": 3,
"each_usd": 105,
"provider_fee_pct": 6,
"default_rate_pct": 3,
"unpaid_share_when_default": 0.6667,
"expected_take_up_pct": 35
},
"live_qa": {
"calls_per_month": 2,
"host_cost_per_call_usd": 80,
"months_of_access_per_buyer": 3
},
"sample_lesson": {
"one_time_cost_usd": 400,
"per_sale_cost_usd": 0
},
"intake": "a new intake opens on the 1st of each month; live Q&A seats are tied to the intake",
"student_variant": {
"discount_pct": 30,
"gate": "a school email domain, verified at checkout",
"cap": "one per person",
"ends": "12 months after purchase or at graduation"
}
}
},
"regional_pricing": {
"request": "Hey Claude, I just added the \"pricing-strategy\" skill. We charge $49 a month for Growth everywhere. Should some countries get a lower price? Use purchasing power parity, our GA4 trial starts and paid customers by country, and what local rivals charge.",
"mode": "regional pricing by country",
"business": "Example Booking Software, an online booking and scheduling app for small service businesses (invented example)",
"home_market": "United States",
"home_plan": {
"plan": "Growth",
"price_usd_month": 49
},
"gross_margin": 0.85,
"cost_to_serve_usd_month": 6,
"payment_fees": "2.9% + $0.30",
"billing_supports_local_currency": true,
"world_bank": {
"read": "2026-10-30",
"year": 2025,
"indicators": [
"PA.NUS.PRVT.PP",
"PA.NUS.FCRF"
],
"values": {
"US": {
"country": "United States",
"ppp_factor": 1,
"exchange_rate_per_usd": 1
},
"GB": {
"country": "United Kingdom",
"ppp_factor": 0.701529,
"exchange_rate_per_usd": 0.759473957338607
},
"CA": {
"country": "Canada",
"ppp_factor": 1.260483,
"exchange_rate_per_usd": 1.39810565893901
},
"AU": {
"country": "Australia",
"ppp_factor": 1.464593,
"exchange_rate_per_usd": 1.5519978866485
},
"DE": {
"country": "Germany",
"ppp_factor": 0.718883,
"exchange_rate_per_usd": 0.88496895841236
},
"ES": {
"country": "Spain",
"ppp_factor": 0.607856,
"exchange_rate_per_usd": 0.88496895841236
},
"PL": {
"country": "Poland",
"ppp_factor": 2.063158,
"exchange_rate_per_usd": 3.76054166666666
},
"MX": {
"country": "Mexico",
"ppp_factor": 11.308778,
"exchange_rate_per_usd": 19.2375083333333
},
"BR": {
"country": "Brazil",
"ppp_factor": 2.58149013637328,
"exchange_rate_per_usd": 5.58728623856661
},
"IN": {
"country": "India",
"ppp_factor": 19.8389160640447,
"exchange_rate_per_usd": 87.1584483507393
},
"PH": {
"country": "Philippines",
"ppp_factor": 20.5335464484259,
"exchange_rate_per_usd": 57.5050971489714
},
"ZA": {
"country": "South Africa",
"ppp_factor": 7.73995922531754,
"exchange_rate_per_usd": 17.8887489855833
}
}
},
"funnel_90_days": {
"window": [
"2026-07-31",
"2026-10-28"
],
"source": "GA4 get_report by country (sessions, trial_start events) and paid customers from the billing export",
"by_country": {
"US": {
"sessions": 120000,
"trial_starts": 3600,
"paid": 540
},
"GB": {
"sessions": 18000,
"trial_starts": 520,
"paid": 75
},
"CA": {
"sessions": 9000,
"trial_starts": 250,
"paid": 37
},
"AU": {
"sessions": 6000,
"trial_starts": 170,
"paid": 24
},
"DE": {
"sessions": 5000,
"trial_starts": 70,
"paid": 9
},
"ES": {
"sessions": 3000,
"trial_starts": 75,
"paid": 6
},
"PL": {
"sessions": 2400,
"trial_starts": 66,
"paid": 4
},
"MX": {
"sessions": 4500,
"trial_starts": 130,
"paid": 7
},
"BR": {
"sessions": 5200,
"trial_starts": 150,
"paid": 6
},
"IN": {
"sessions": 14000,
"trial_starts": 400,
"paid": 8
},
"PH": {
"sessions": 6000,
"trial_starts": 170,
"paid": 5
},
"ZA": {
"sessions": 900,
"trial_starts": 26,
"paid": 1
}
}
},
"local_rival_prices": {
"Competitor A": {
"US": 45,
"IN": 1999,
"BR": 129.9,
"MX": 499,
"PL": 129,
"PH": 1490
},
"Competitor B": {
"US": 59,
"IN": 3999,
"BR": 249.9,
"MX": 899,
"PH": 2990
}
},
"google_ads_last_30_days": {
"MX": {
"cost_usd": 620,
"paid_conversions": 3
},
"BR": {
"cost_usd": 540,
"paid_conversions": 2
},
"IN": {
"cost_usd": 480,
"paid_conversions": 4
},
"PH": {
"cost_usd": 300,
"paid_conversions": 2
},
"PL": {
"cost_usd": 410,
"paid_conversions": 2
}
}
},
"change_announcement": {
"request": "Hey Claude, I just added the \"pricing-strategy\" skill. We're retiring our old Classic plan on February 15. Plan the announcement: who hears first, every message, the FAQ, and how we'll know if it goes badly.",
"mode": "change and sunset announcements",
"business": "Example Booking Software, an online booking and scheduling app for small service businesses (invented example)",
"change": {
"type": "plan sunset",
"what": "the legacy Classic plan ($29 a month or $290 a year, up to 3 staff) ends",
"effective_date": "2027-02-15",
"why": "Classic runs on the old booking widget, which can no longer be kept secure and fast",
"replacement": "Growth ($49 a month, up to 5 staff)",
"offer": "Growth at $39 a month for 12 months; annual customers keep Classic to renewal, then $390 for the first year",
"customer_action": "none required; optional early switch in Billing",
"terms_notice": "the terms promise 30 days' notice of plan changes"
},
"sources": {
"klaviyo_segment": {
"name": "Classic plan customers",
"total_members": 1262,
"via": "get_segments, then get_segment_report (total_members)"
},
"stripe_subscriptions_on_classic": {
"monthly": 1180,
"annual": 60
},
"revenue_last_12_months_per_customer_usd": [
{
"revenue_usd": 648,
"customers": 111
},
{
"revenue_usd": 528,
"customers": 144
},
{
"revenue_usd": 444,
"customers": 116
},
{
"revenue_usd": 396,
"customers": 137
},
{
"revenue_usd": 386,
"customers": 12
},
{
"revenue_usd": 372,
"customers": 119
},
{
"revenue_usd": 348,
"customers": 553
},
{
"revenue_usd": 338,
"customers": 7
},
{
"revenue_usd": 314,
"customers": 15
},
{
"revenue_usd": 290,
"customers": 26
}
],
"ga4_users_of_classic_widget_90_days": {
"page": "/classic-widget/",
"activeUsers": 2050
},
"staff_facing_customers": 22,
"reseller_partners": 14,
"klaviyo_last_10_email_sends": [
{
"recipients": 8200,
"unsubscribes": 18,
"spam_complaints": 1
},
{
"recipients": 8150,
"unsubscribes": 22,
"spam_complaints": 0
},
{
"recipients": 8300,
"unsubscribes": 15,
"spam_complaints": 2
},
{
"recipients": 8260,
"unsubscribes": 20,
"spam_complaints": 1
},
{
"recipients": 8400,
"unsubscribes": 25,
"spam_complaints": 1
},
{
"recipients": 8350,
"unsubscribes": 19,
"spam_complaints": 0
},
{
"recipients": 8420,
"unsubscribes": 23,
"spam_complaints": 1
},
{
"recipients": 8500,
"unsubscribes": 21,
"spam_complaints": 2
},
{
"recipients": 8480,
"unsubscribes": 17,
"spam_complaints": 1
},
{
"recipients": 8550,
"unsubscribes": 24,
"spam_complaints": 0
}
],
"after_send_7_days": {
"announcement": {
"recipients": 1262,
"delivered": 1254,
"unsubscribes": 9,
"spam_complaints": 1
},
"switched_early": 310,
"tickets_by_question": {
"Will my booking page link change?": 46,
"Can I keep $29 if I stay with 1 staff?": 31,
"What happens to my text credits?": 22,
"Do I need to do anything if I'm on annual?": 14
}
}
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
{
"report_title": "Pricing strategy: new online booking tool for small service businesses",
"headline": {
"metric_and_entry": "Charge by staff band; start with a free plan for 1 staff, no card (60% of price-related searches look for free, and 3 of 4 USD rivals are free for one person).",
"plans_and_prices": "Free (1 staff), Core (2 to 6 staff) at or under $28.50/month, Growth (7 to 20) at or under $50/month, billed annually with 20% off; a salon package at $65 to $149 a month for one location; contact-us rung listed last.",
"why_now": "Salon buyers cost advertisers 3.08x the category CPC and Square is the only rival with a plan card for salons; enterprise searches are 80 a month, so don't lead with enterprise.",
"context": "US market, English; rivals Calendly, Acuity Scheduling, Setmore, Square Appointments, SimplyBook.me; pages read 2026-10-06."
},
"market_price_map": [
{
"rival": "Calendly",
"url": "https://calendly.com/pricing",
"currency": "USD",
"price_source": "web fetch (the parsed page had plan names but no amounts, also with enable_javascript)",
"metric": "per seat (each person who hosts meetings needs a seat)",
"plans": [
{
"plan": "Free",
"annual_billed_per_month": 0,
"monthly_billed": 0,
"limits": "one event type, one calendar connection"
},
{
"plan": "Standard",
"annual_billed_per_month": 10,
"monthly_billed": null,
"annual_saving_shown": "17%",
"limits": "per seat; no seat limit stated"
},
{
"plan": "Teams",
"annual_billed_per_month": 16,
"monthly_billed": null,
"annual_saving_shown": "20%",
"limits": "per seat; adds round-robin and team scheduling",
"badge": "Popular plan"
},
{
"plan": "Enterprise",
"annual_billed_per_month": null,
"monthly_billed": null,
"shown": "starts at $15k per year",
"limits": "starts at 50 seats"
}
],
"entry_offer": "Free plan (\"Always free\"); the FAQ mentions a trial but its length is not shown on the page",
"enterprise_gate": "Enterprise, \"starts at $15k per year\" from 50 seats, talk to sales",
"add_ons": [
"Notetaker and AI assistant (Callie) on Standard or Teams",
"single sign-on add-on on Teams"
],
"presentation": {
"default_billing": "annual (\"Billed yearly\" shown first)",
"badge": "\"Popular plan\" on Teams",
"anchor": "Enterprise \"starts at $15k/yr\"",
"annual_saving": "\"Save up to 20%\""
}
},
{
"rival": "Acuity Scheduling",
"url": "https://acuityscheduling.com/pricing",
"currency": "USD",
"price_source": "web fetch (the parsed page had plan names and FAQs but no amounts)",
"metric": "calendar band (one calendar per employee or location)",
"plans": [
{
"plan": "Starter",
"annual_billed_per_month": 16,
"monthly_billed": 20,
"limits": "1 calendar"
},
{
"plan": "Standard",
"annual_billed_per_month": 27,
"monthly_billed": 34,
"limits": "up to 6 calendars"
},
{
"plan": "Premium",
"annual_billed_per_month": 49,
"monthly_billed": 61,
"limits": "up to 36 calendars"
},
{
"plan": "Enterprise",
"annual_billed_per_month": null,
"monthly_billed": null,
"limits": "contact the Enterprise team"
}
],
"entry_offer": "7-day trial on every plan, no credit card needed; no free plan",
"enterprise_gate": "Enterprise, contact the Enterprise team (no price shown)",
"add_ons": [
"AI booking assistant and HIPAA agreement included on Premium, not sold separately"
],
"presentation": {
"default_billing": "annual (\"Pay annually\" shown first)",
"badge": "none found",
"anchor": "none",
"annual_saving": "\"Save 20%\""
}
},
{
"rival": "Setmore",
"url": "https://www.setmore.com/pricing",
"currency": "USD",
"price_source": "parsed page",
"metric": "per user (each staff calendar counts as a user)",
"plans": [
{
"plan": "Free",
"annual_billed_per_month": 0,
"monthly_billed": 0,
"limits": "up to 4 users"
},
{
"plan": "Pro",
"annual_billed_per_month": 5,
"monthly_billed": null,
"limits": "unlimited users, priced per user",
"note": "a second amount, $12 per user, is shown next to it without a billing label, so it stays out of the annual-saving math"
},
{
"plan": "Enterprise",
"annual_billed_per_month": null,
"monthly_billed": null,
"limits": "contact us"
}
],
"entry_offer": "Free plan for up to 4 users; Pro has a 30-day refund window instead of a trial",
"enterprise_gate": "\"Need more options to suit your larger organisation?\", contact us (no price shown)",
"add_ons": [
"Live receptionist, $99 a month, separate plan, US only",
"extra SMS credits bought in the app (Pro includes 500 a month per team member)"
],
"presentation": {
"default_billing": "annual (\"$5* ... *Annual pricing\")",
"badge": "none found",
"anchor": "none",
"annual_saving": "not stated"
}
},
{
"rival": "Square Appointments",
"url": "https://squareup.com/us/en/appointments/pricing",
"currency": "USD",
"price_source": "web fetch (the parsed page had the FAQ but not the plan fees)",
"metric": "per location, plus card processing fees on every payment",
"plans": [
{
"plan": "Free",
"annual_billed_per_month": null,
"monthly_billed": 0,
"limits": "unlimited staff calendars; \"for solo professionals\"",
"processing_online": "3.3% + 30ยข"
},
{
"plan": "Plus",
"annual_billed_per_month": null,
"monthly_billed": 49,
"limits": "per location; adds no-show fees, multi-staff booking, waitlist; \"for growing teams\"",
"processing_online": "2.9% + 30ยข",
"badge": "Best value"
},
{
"plan": "Premium",
"annual_billed_per_month": null,
"monthly_billed": 149,
"limits": "per location; adds resource management; \"for large salons\"",
"processing_online": "2.9% + 30ยข"
},
{
"plan": "Square Pro",
"annual_billed_per_month": null,
"monthly_billed": null,
"limits": "custom pricing; for businesses processing over $250,000 a year"
}
],
"entry_offer": "Free plan (pay card fees only); Plus and Premium have a 30-day trial per the FAQ (the trial length on the plan cards is drawn by script)",
"enterprise_gate": "Square Pro, \"Get custom pricing\" above $250,000 a year in card payments",
"add_ons": [
"payroll from $35 a month plus $6 per person paid",
"hardware from $59",
"texts beyond the included amount (3ยข on Plus, 1.5ยข on Premium)"
],
"presentation": {
"default_billing": "monthly only (no annual option shown)",
"badge": "\"Best value\" on Plus",
"anchor": "Square Pro \"Get custom pricing\"",
"annual_saving": "none"
}
},
{
"rival": "SimplyBook.me",
"url": "https://simplybook.me/en/pricing",
"currency": "EUR",
"price_source": "parsed page (returned in EUR although accept_language was en-US)",
"metric": "booking-volume band with included staff providers (flat fee per band)",
"plans": [
{
"plan": "Free",
"annual_billed_per_month": 0,
"monthly_billed": 0,
"limits": "50 bookings a month, 1 provider"
},
{
"plan": "Basic",
"annual_billed_per_month": 11.9,
"monthly_billed": 13.9,
"limits": "100 bookings a month, 5 providers"
},
{
"plan": "Standard",
"annual_billed_per_month": 24.9,
"monthly_billed": 29.9,
"limits": "500 bookings a month, 15 providers"
},
{
"plan": "Premium",
"annual_billed_per_month": 49.9,
"monthly_billed": 59.9,
"limits": "2,000 bookings a month, 30 providers",
"badge": "Most popular"
},
{
"plan": "Enterprise",
"annual_billed_per_month": null,
"monthly_billed": null,
"limits": "custom, billed annually, book a call"
}
],
"entry_offer": "Free plan with no time limit, and a 14-day trial of premium features, no credit card needed",
"enterprise_gate": "Enterprise, custom price, for multi-location businesses",
"add_ons": [
"Full Setup service from โฌ450",
"SMS, WhatsApp and AI booking credits",
"account manager help by the hour"
],
"presentation": {
"default_billing": "annual (\"per month, billed annually\" shown first)",
"badge": "\"Most popular\" on Premium",
"anchor": "Enterprise \"Custom\"",
"annual_saving": "\"Save 17%\""
}
}
],
"price_at_profiles": {
"profiles": [
"solo (1 staff)",
"typical (3 staff)",
"larger (10 staff)"
],
"basis": "cheapest plan whose stated limits fit, monthly price on annual billing (Square shows monthly only)",
"rows": [
{
"rival": "Calendly",
"1_staff": {
"plan": "Free",
"price_per_month": 0,
"basis": "one calendar connection fits one person"
},
"3_staff": {
"plan": "Standard",
"price_per_month": 30,
"basis": "3 seats x $10; round-robin booking needs Teams ($48)"
},
"10_staff": {
"plan": "Standard",
"price_per_month": 100,
"basis": "10 seats x $10; round-robin booking needs Teams ($160)"
}
},
{
"rival": "Acuity Scheduling",
"1_staff": {
"plan": "Starter",
"price_per_month": 16,
"basis": "1 calendar"
},
"3_staff": {
"plan": "Standard",
"price_per_month": 27,
"basis": "up to 6 calendars"
},
"10_staff": {
"plan": "Premium",
"price_per_month": 49,
"basis": "up to 36 calendars"
}
},
{
"rival": "Setmore",
"1_staff": {
"plan": "Free",
"price_per_month": 0,
"basis": "up to 4 users"
},
"3_staff": {
"plan": "Free",
"price_per_month": 0,
"basis": "up to 4 users"
},
"10_staff": {
"plan": "Pro",
"price_per_month": 50,
"basis": "10 users x $5"
}
},
{
"rival": "Square Appointments",
"1_staff": {
"plan": "Free",
"price_per_month": 0,
"basis": "plus card fees (3.3% + 30ยข online); no-show fees and multi-staff booking need Plus ($49 per location)"
},
"3_staff": {
"plan": "Free",
"price_per_month": 0,
"basis": "plus card fees (3.3% + 30ยข online); no-show fees and multi-staff booking need Plus ($49 per location)"
},
"10_staff": {
"plan": "Free",
"price_per_month": 0,
"basis": "plus card fees (3.3% + 30ยข online); no-show fees and multi-staff booking need Plus ($49 per location)"
}
}
],
"summary": [
{
"profile": "solo (1 staff)",
"rivals_at_0": "3 of 4",
"paid_prices": [
16
],
"median_paid": 16
},
{
"profile": "typical (3 staff)",
"rivals_at_0": "2 of 4",
"paid_prices": [
27,
30
],
"median_paid": 28.5
},
{
"profile": "larger (10 staff)",
"rivals_at_0": "1 of 4",
"paid_prices": [
49,
50,
100
],
"median_paid": 50
}
],
"left_out": [
{
"rival": "SimplyBook.me",
"why": "prices came back in EUR; no exchange rate was given, so it stays in the map but out of the USD math"
}
],
"how_metrics_scale": {
"Calendly": [
0,
30,
100
],
"Acuity Scheduling": [
16,
27,
49
],
"Setmore": [
0,
0,
50
],
"Square Appointments": [
0,
0,
0
]
}
},
"demand_signals": {
"market": "United States, English (location_code 2840)",
"volumes": "Google Ads monthly averages, 12 months to August 2026",
"group_totals": {
"Head": 3280,
"Price research": 5580,
"Free-seeking": 8350,
"Switching": 370,
"Segment": 1890,
"Enterprise": 80
},
"close_variants": {
"salon booking software": "same volume, CPC and monthly trend as \"booking software for salons\"; counted once in the group total"
},
"free_seeking_share": {
"value": "60%",
"math": "8,350 / (8,350 + 5,580)"
},
"leader_free_check": {
"value": 0.84,
"math": "(\"is calendly free\" 2,400 + \"calendly free plan\" 1,300) / \"calendly pricing\" 4,400",
"reading": "for every 100 searches for Calendly's pricing there are 84 asking whether it is free"
},
"segment_cpc_index": {
"head_keyword": "appointment scheduling software",
"head_cpc_usd": 28.09,
"rows": [
{
"segment": "salons",
"keyword": "booking software for salons",
"monthly_searches": 720,
"cpc_usd": 86.6,
"cpc_index": 3.08,
"qualifies_for_package": true
},
{
"segment": "salons",
"keyword": "salon booking software",
"monthly_searches": 720,
"cpc_usd": 86.6,
"cpc_index": 3.08,
"qualifies_for_package": true,
"close_variant_of": "booking software for salons"
},
{
"segment": "studios",
"keyword": "booking software for studios",
"monthly_searches": "no data",
"cpc_usd": "no data",
"cpc_index": "no data",
"qualifies_for_package": false
},
{
"segment": "studios",
"keyword": "studio booking software",
"monthly_searches": 20,
"cpc_usd": 58.1,
"cpc_index": 2.07,
"qualifies_for_package": false
},
{
"segment": "clinics",
"keyword": "booking software for clinics",
"monthly_searches": "no data",
"cpc_usd": "no data",
"cpc_index": "no data",
"qualifies_for_package": false
},
{
"segment": "clinics",
"keyword": "clinic booking software",
"monthly_searches": 10,
"cpc_usd": 38.39,
"cpc_index": 1.37,
"qualifies_for_package": false
},
{
"segment": "small business",
"keyword": "booking software for small business",
"monthly_searches": 260,
"cpc_usd": 46.16,
"cpc_index": 1.64,
"qualifies_for_package": false
},
{
"segment": "small business",
"keyword": "scheduling software for small business",
"monthly_searches": 880,
"cpc_usd": 45.07,
"cpc_index": 1.6,
"qualifies_for_package": false
}
]
},
"switching": {
"calendly alternative": 320,
"acuity scheduling alternative": 50
},
"enterprise_volume": 80,
"no_data_keywords": [
"appointment scheduling software cost",
"booking software for studios",
"booking software for clinics"
],
"no_cpc_keywords": [
"scheduling software pricing",
"appointment scheduling software cost",
"online booking system cost",
"simplybook pricing",
"booking software for studios",
"booking software for clinics"
],
"keyword_table": [
{
"group": "Head",
"keyword": "appointment scheduling software",
"monthly_searches": 2400,
"cpc_usd": 28.09,
"competition": "LOW"
},
{
"group": "Head",
"keyword": "appointment scheduling app",
"monthly_searches": 880,
"cpc_usd": 22.7,
"competition": "HIGH"
},
{
"group": "Price research",
"keyword": "scheduling software pricing",
"monthly_searches": 10,
"cpc_usd": "no data",
"competition": "no data"
},
{
"group": "Price research",
"keyword": "appointment scheduling software cost",
"monthly_searches": "no data",
"cpc_usd": "no data",
"competition": "no data"
},
{
"group": "Price research",
"keyword": "online booking system cost",
"monthly_searches": 10,
"cpc_usd": "no data",
"competition": "MEDIUM"
},
{
"group": "Price research",
"keyword": "calendly pricing",
"monthly_searches": 4400,
"cpc_usd": 8.61,
"competition": "LOW"
},
{
"group": "Price research",
"keyword": "acuity scheduling pricing",
"monthly_searches": 720,
"cpc_usd": 15.54,
"competition": "MEDIUM"
},
{
"group": "Price research",
"keyword": "setmore pricing",
"monthly_searches": 110,
"cpc_usd": 29.13,
"competition": "MEDIUM"
},
{
"group": "Price research",
"keyword": "simplybook pricing",
"monthly_searches": 10,
"cpc_usd": "no data",
"competition": "MEDIUM"
},
{
"group": "Price research",
"keyword": "square appointments pricing",
"monthly_searches": 320,
"cpc_usd": 2.59,
"competition": "MEDIUM"
},
{
"group": "Free-seeking",
"keyword": "free scheduling software",
"monthly_searches": 1000,
"cpc_usd": 26.26,
"competition": "HIGH"
},
{
"group": "Free-seeking",
"keyword": "free appointment scheduling software",
"monthly_searches": 260,
"cpc_usd": 17.54,
"competition": "MEDIUM"
},
{
"group": "Free-seeking",
"keyword": "free online booking system",
"monthly_searches": 480,
"cpc_usd": 26.29,
"competition": "HIGH"
},
{
"group": "Free-seeking",
"keyword": "free scheduling app",
"monthly_searches": 2900,
"cpc_usd": 23.17,
"competition": "HIGH"
},
{
"group": "Free-seeking",
"keyword": "cheap scheduling software",
"monthly_searches": 10,
"cpc_usd": 32.66,
"competition": "HIGH"
},
{
"group": "Free-seeking",
"keyword": "is calendly free",
"monthly_searches": 2400,
"cpc_usd": 28.6,
"competition": "LOW"
},
{
"group": "Free-seeking",
"keyword": "calendly free plan",
"monthly_searches": 1300,
"cpc_usd": 12.65,
"competition": "LOW"
},
{
"group": "Switching",
"keyword": "calendly alternative",
"monthly_searches": 320,
"cpc_usd": 11.5,
"competition": "MEDIUM"
},
{
"group": "Switching",
"keyword": "acuity scheduling alternative",
"monthly_searches": 50,
"cpc_usd": 9.89,
"competition": "MEDIUM"
},
{
"group": "Segment",
"keyword": "booking software for salons",
"monthly_searches": 720,
"cpc_usd": 86.6,
"competition": "MEDIUM"
},
{
"group": "Segment",
"keyword": "salon booking software",
"monthly_searches": 720,
"cpc_usd": 86.6,
"competition": "MEDIUM"
},
{
"group": "Segment",
"keyword": "booking software for studios",
"monthly_searches": "no data",
"cpc_usd": "no data",
"competition": "no data"
},
{
"group": "Segment",
"keyword": "studio booking software",
"monthly_searches": 20,
"cpc_usd": 58.1,
"competition": "MEDIUM"
},
{
"group": "Segment",
"keyword": "booking software for clinics",
"monthly_searches": "no data",
"cpc_usd": "no data",
"competition": "no data"
},
{
"group": "Segment",
"keyword": "clinic booking software",
"monthly_searches": 10,
"cpc_usd": 38.39,
"competition": "HIGH"
},
{
"group": "Segment",
"keyword": "booking software for small business",
"monthly_searches": 260,
"cpc_usd": 46.16,
"competition": "HIGH"
},
{
"group": "Segment",
"keyword": "scheduling software for small business",
"monthly_searches": 880,
"cpc_usd": 45.07,
"competition": "MEDIUM"
},
{
"group": "Enterprise",
"keyword": "enterprise scheduling software",
"monthly_searches": 70,
"cpc_usd": 87.61,
"competition": "MEDIUM"
},
{
"group": "Enterprise",
"keyword": "scheduling software for teams",
"monthly_searches": 10,
"cpc_usd": 73.69,
"competition": "MEDIUM"
}
]
},
"own_signals": {
"4a_search_console": "not run: no site yet",
"4b_ga4": "not run: no site yet",
"4c_stripe": "not run: no billing yet (Stripe path untested until connected)"
},
"decisions": [
{
"id": "D1",
"decision": "Entry offer",
"rule": "Free plan when the free-seeking share is 40% or more and at least half the rivals cost $0 at the smallest profile; trial only under 25% with fewer than half free; otherwise test both.",
"numbers": "free-seeking share 60%; 3 of 4 USD rivals cost $0 for 1 staff (Calendly, Setmore, Square)",
"verdict": "Free plan, capped at the smallest profile (1 staff). Ask for no card: Acuity and SimplyBook.me both advertise \"no credit card needed\" for their trials."
},
{
"id": "D2",
"decision": "Value metric",
"rule": "Grows with value, predictable, hard to game, measurable, accepted by the category.",
"numbers": "price for 1/3/10 staff: Calendly [0, 30, 100] (per seat), Acuity [16, 27, 49] (calendar band), Setmore [0, 0, 50] (per user after a free 4), Square [0, 0, 0] (per location, card fees on top)",
"verdict": "Staff band (rungs by the number of staff who take bookings). It grows with the business like a seat price but in steps buyers can predict; per-seat pricing reaches $100 at 10 staff, 2x the median. Bands are already accepted here (Acuity by calendars, SimplyBook.me by included providers)."
},
{
"id": "D3",
"decision": "Price points",
"rule": "Core at or under the median paid price at the typical profile, Growth at or under the median at the large profile; adjacent paid plans 1.3x to 3x apart.",
"numbers": "median paid at 3 staff $28.50 (from [27, 30]); at 10 staff $50 (from [49, 50, 100]); Growth/Core = 1.75x",
"verdict": "Core ceiling $28.50 a month, Growth ceiling $50 a month, both billed annually; the 1.75x step is inside the 1.3x to 3x range. Pick the exact price inside the ceiling with the Gabor-Granger ladder (Step 8)."
},
{
"id": "D4",
"decision": "Plan count",
"rule": "Three rungs by default; four or more only when the median paid price at the large profile is 5x or more the median at the typical profile.",
"numbers": "$50 / $28.50 = 1.75x",
"verdict": "Three rungs (Free, Core, Growth) plus the contact-us rung from D5."
},
{
"id": "D5",
"decision": "Enterprise rung",
"rule": "Add a contact-us rung when at least half the rivals show one; don't lead with it when enterprise searches are under 100 a month.",
"numbers": "5 of 5 rivals show one (Calendly, Acuity Scheduling, Setmore, Square Appointments, SimplyBook.me); enterprise searches 80 a month",
"verdict": "Add a contact-us rung for multi-location businesses and larger teams, listed last; don't lead with it."
},
{
"id": "D6",
"decision": "Annual billing",
"rule": "Match the rivals' median annual saving, kept within 15% to 25%; show annual prices by default only when most rivals do.",
"numbers": "largest saving each page shows: {'Calendly': 20, 'Acuity Scheduling': 20, 'SimplyBook.me': 17}, median 20% (Calendly's plans show 17% and 20%, headed \"Save up to 20%\"; Setmore's second amount is unlabelled and Square shows no annual option, so both are left out; percentages carry no currency, so SimplyBook.me counts); 4 of 5 rivals show the annual price first (Calendly, Acuity Scheduling, Setmore, SimplyBook.me)",
"verdict": "20% off for annual billing, with annual prices shown by default."
},
{
"id": "D7",
"decision": "Segment package",
"rule": "A segment keyword with a CPC index of 2 or more and 100 or more searches a month earns a dedicated package, priced against the rival plan that names the same segment and 1.3x to 3x the plan it builds on, all in one unit.",
"numbers": "tested for every segment in the request (salons, studios, clinics) plus small business, against the head CPC $28.09: \"booking software for salons\" index 3.08 at 720 searches; \"salon booking software\" index 3.08 at 720 searches; \"booking software for studios\" no data; \"studio booking software\" index 2.07 at 20 searches; \"booking software for clinics\" no data; \"clinic booking software\" index 1.37 at 10 searches; \"booking software for small business\" index 1.64 at 260 searches; \"scheduling software for small business\" index 1.6 at 880 searches",
"verdict": "Build a salon package: salons are the only segment that qualifies; advertisers pay 3.08x the head-term CPC for salon buyers at 720 searches a month. Studio terms reach the CPC index (2.07) but not the volume, clinic terms reach neither, and small-business terms sit under index 2, so none of them earns its own package. Square names the segment (Premium, \"for large salons\", $149 a month per location, billed monthly). Price the package in the same unit as Growth, one account at one location: $65 to $149 a month, which is 1.3x to 2.98x the Growth ceiling ($50) and at or under Square Premium for one location. Square charges again for every extra location, so compare at one location only; a second location moves to the contact-us rung."
},
{
"id": "D8",
"decision": "Value ceiling",
"rule": "Only with value inputs: price at or under 10% to 25% of the monthly value one customer gets, and above the cost to serve.",
"numbers": "no value inputs given",
"verdict": "Not run. Give what one customer gains a month (for example no-shows avoided x average booking value) and the cost to serve one, and this check runs."
}
],
"recommended_plans": [
{
"rung": "Free",
"metric": "1 staff",
"price_ceiling": 0,
"for": "solo professionals trying online booking",
"moves_up_when": "a second person needs their own calendar"
},
{
"rung": "Core",
"metric": "2 to 6 staff",
"price_ceiling": 28.5,
"billing": "per month, billed annually",
"badge": "the plan to badge",
"for": "the typical studio or salon (3 staff)",
"moves_up_when": "a seventh staff member, or reminders by text at volume"
},
{
"rung": "Growth",
"metric": "7 to 20 staff",
"price_ceiling": 50,
"billing": "per month, billed annually",
"for": "larger teams (10 staff)",
"moves_up_when": "more than 20 staff or a second location"
},
{
"rung": "Salon package",
"metric": "Growth limits (up to 20 staff, one location) plus salon features",
"price_range": [
65,
149
],
"billing": "per month, billed annually, one location",
"for": "salons: deposits and no-show fees, multi-staff appointments, chairs and stations as resources, waitlist (the features rivals keep for their salon plans)",
"moves_up_when": "a second location (contact-us rung)"
},
{
"rung": "Contact us",
"metric": "custom",
"price_ceiling": null,
"for": "multi-location businesses and larger teams",
"moves_up_when": "n/a; listed last, not featured"
}
],
"value_ladder": {
"rungs": [
"Free",
"Core",
"Growth",
"Salon package",
"Contact us"
],
"band_rule": "Each paid rung covers up to twice the profile it is priced for (Core for 3 staff goes to 6, Growth for 10 goes to 20), so a growing customer has headroom before the next step.",
"add_ons_the_market_sells": [
{
"add_on": "Text reminder credits",
"seen_at": "Square (3ยข per text over the included amount), Setmore (bought in the app), SimplyBook.me (SMS credits)",
"answers": "a Core customer who wants more reminders without moving to Growth"
},
{
"add_on": "Setup service",
"seen_at": "SimplyBook.me (Full Setup from โฌ450)",
"answers": "a salon switching from another tool"
},
{
"add_on": "AI booking assistant",
"seen_at": "Calendly (Callie, on Standard or Teams), SimplyBook.me (AI booking credits), Acuity (included on Premium)",
"answers": "a busy front desk"
},
{
"add_on": "Phone receptionist",
"seen_at": "Setmore ($99 a month, US only)",
"answers": "businesses that lose bookings to missed calls"
}
],
"gaps": [
{
"between": "Free -> Core",
"check": "no ratio for a $0 rung; the upgrade trigger is the second staff member",
"flag": false
},
{
"between": "Core -> Growth",
"check": "1.75x",
"flag": false
},
{
"between": "Growth -> Salon package",
"check": "1.3x to 2.98x ($65 to $149 against $50), both priced per account at one location",
"flag": false
},
{
"between": "Add-ons",
"check": "a $99 receptionist add-on would cost more than the Growth plan ($50); sell it as a separate service, as Setmore does",
"flag": true
}
]
},
"perception_review": {
"price_endings": "3 of 8 paid USD prices shown end in 9 ([49, 49, 149]); the rest end in other digits ([5, 10, 16, 16, 27]). SimplyBook.me ends every paid price in .9. No single convention, so pick the ending for the position: round for simple and premium, 9 for value.",
"badges_and_anchors": "Calendly badges its second paid plan (Teams, \"Popular plan\") and anchors with Enterprise \"starts at $15k/yr\"; Square badges Plus \"Best value\"; SimplyBook.me badges Premium \"Most popular\". Acuity and Setmore badge nothing. Badge Core, the plan most customers should pick.",
"billing_framing": "4 of 5 rivals show the annual-billed price first; savings are framed as a percent (\"Save 17%\", \"Save 20%\", \"Save up to 20%\"). Square shows monthly only.",
"entry_wording": "Calendly says \"Always free\" and \"Get started for free\"; Acuity repeats \"7-day trial, no credit card needed\" under every plan; SimplyBook.me puts \"No credit card needed.\" above its plans. Searchers ask: 84 \"is Calendly free\" type searches per 100 Calendly pricing searches. Say \"free for 1 staff, no card\" on the plan card itself.",
"plan_names": "Square adds a who-it's-for line to every plan (\"for solo professionals\", \"for growing teams\", \"for large salons\"); the others name size only (Starter, Standard, Premium, Pro). Name rungs by who they serve.",
"page_reading_note": "Three of five pages drew their prices with scripts, and Square's plan cards show a template placeholder instead of the trial length in the raw page. If your own prices are script-drawn too, search engines and AI assistants may not see them; put the prices in the page text.",
"your_page": "not run: a new product with no pricing page yet"
},
"validation_plan": {
"van_westendorp": "Ask salon and studio owners the four price questions after showing the Core description. Read at least 100 answers for salons and 100 for other studios, since D7 prices salons separately.",
"gabor_granger_ladder": {
"profile": "typical (3 staff)",
"rungs_usd": [
27,
28.5,
30,
37.5
],
"built_from": "lowest, median and highest paid rival price at 3 staff, plus 25% above the highest"
},
"conjoint": "Not needed for launch; use it later if the salon package grows into many feature differences.",
"experiments": [
{
"test": "Core at two ladder points",
"measure": "paid conversion and revenue per pricing-page visitor"
},
{
"test": "Free plan for 1 staff vs a 14-day reverse trial",
"measure": "paid conversion at day 30 and 90, not sign-ups"
},
{
"test": "Annual shown by default vs monthly",
"measure": "annual share and first-year revenue"
},
{
"test": "Salon package vs Growth with salon add-ons",
"measure": "salon plan mix and expansion revenue at 90 days"
}
],
"how": "New customers only, one change at a time, at least one full billing cycle each."
},
"unknowns": [
"Calendly: trial length (the FAQ mentions a trial; the answer text isn't on the page) and monthly-billed prices (only annual prices and the saving are shown).",
"Calendly, Acuity and Square: amounts came from the web-fetch fallback because the parsed pages had no prices; a second Calendly parse with enable_javascript also had none.",
"Setmore: the $12 shown next to the $5 Pro price has no billing label, so Setmore stays out of the annual-saving median.",
"Square: the trial length on the plan cards is script-drawn; 30 days is from the FAQ.",
"SimplyBook.me: prices came back in EUR; kept out of all USD medians.",
"Keywords with no volume data: appointment scheduling software cost, booking software for studios, booking software for clinics (counted as 0). Keywords with no CPC: scheduling software pricing, appointment scheduling software cost, online booking system cost, simplybook pricing, booking software for studios, booking software for clinics.",
"D8 value ceiling: not run, no value inputs.",
"Steps 4a to 4c (Search Console, GA4, Stripe): not run, the product is new and has no site traffic or billing yet."
],
"changes_made": "none; this skill only reads pages and data",
"mode_examples": {
"offer_design": {
"current_offer_in_four_lines": {
"core_package": "40 video lessons, quizzes and a practice ledger, lifetime access",
"makes_buying_feel_safe": "7-day refund, only if no more than 2 lessons were opened",
"terms": "one payment of $299",
"reason_to_act_now": "a 15-minute countdown timer that restarts for every visitor"
},
"objection_themes": [
{
"rank": 1,
"theme": "Worth the money",
"score_pct": 23.6,
"evidence": {
"Search Console (impressions)": {
"amount": 900,
"share_pct": 26.4
},
"Keyword volumes (monthly searches)": {
"amount": 930,
"share_pct": 20.3
},
"Product reviews (count)": {
"amount": 2,
"share_pct": 33.3
},
"Sales chat lines (count)": {
"amount": 1,
"share_pct": 14.3
}
}
},
{
"rank": 2,
"theme": "Effort and time",
"score_pct": 20.8,
"evidence": {
"Search Console (impressions)": {
"amount": 210,
"share_pct": 6.2
},
"Keyword volumes (monthly searches)": {
"amount": 590,
"share_pct": 12.9
},
"Product reviews (count)": {
"amount": 3,
"share_pct": 50
},
"Sales chat lines (count)": {
"amount": 1,
"share_pct": 14.3
}
}
},
{
"rank": 3,
"theme": "Cheaper or free options",
"score_pct": 17.9,
"evidence": {
"Search Console (impressions)": {
"amount": 90,
"share_pct": 2.6
},
"Keyword volumes (monthly searches)": {
"amount": 2510,
"share_pct": 54.7
},
"Product reviews (count)": {
"amount": 0,
"share_pct": 0
},
"Sales chat lines (count)": {
"amount": 1,
"share_pct": 14.3
}
}
},
{
"rank": 4,
"theme": "Fear it won't work",
"score_pct": 17.3,
"evidence": {
"Search Console (impressions)": {
"amount": 790,
"share_pct": 23.2
},
"Keyword volumes (monthly searches)": {
"amount": 30,
"share_pct": 0.7
},
"Product reviews (count)": {
"amount": 1,
"share_pct": 16.7
},
"Sales chat lines (count)": {
"amount": 2,
"share_pct": 28.6
}
}
},
{
"rank": 5,
"theme": "Trust",
"score_pct": 9.8,
"evidence": {
"Search Console (impressions)": {
"amount": 940,
"share_pct": 27.6
},
"Keyword volumes (monthly searches)": {
"amount": 530,
"share_pct": 11.5
},
"Product reviews (count)": {
"amount": 0,
"share_pct": 0
},
"Sales chat lines (count)": {
"amount": 0,
"share_pct": 0
}
}
},
{
"rank": 6,
"theme": "Waiting",
"score_pct": 6,
"evidence": {
"Search Console (impressions)": {
"amount": 330,
"share_pct": 9.7
},
"Keyword volumes (monthly searches)": {
"amount": 0,
"share_pct": 0
},
"Product reviews (count)": {
"amount": 0,
"share_pct": 0
},
"Sales chat lines (count)": {
"amount": 1,
"share_pct": 14.3
}
}
},
{
"rank": 7,
"theme": "Fit",
"score_pct": 4.7,
"evidence": {
"Search Console (impressions)": {
"amount": 150,
"share_pct": 4.4
},
"Keyword volumes (monthly searches)": {
"amount": 0,
"share_pct": 0
},
"Product reviews (count)": {
"amount": 0,
"share_pct": 0
},
"Sales chat lines (count)": {
"amount": 1,
"share_pct": 14.3
}
}
}
],
"themes_answered": [
"Worth the money",
"Effort and time",
"Cheaper or free options",
"Fear it won't work"
],
"scoring": "each theme's share of objection evidence within a source, averaged over the 4 sources; reviews rated 4 or 5, and queries, reviews and lines with no theme word (such as the login query) are left out",
"rival_offers": {
"per_rival": [
{
"rival": "Competitor A",
"price_usd": 349,
"guarantee": "30 days, no conditions",
"extras": [
"certificate",
"student community"
],
"payment_terms": "3 monthly payments",
"reason_to_act_now": "none",
"ads": "6 Meta ads (4 name the guarantee), 7 Google ads"
},
{
"rival": "Competitor B",
"price_usd": 249,
"guarantee": "14 days, no conditions",
"extras": [
"spreadsheet templates"
],
"payment_terms": "4 payments",
"reason_to_act_now": "monthly price rise announced with a date",
"ads": "3 Meta ads (1 names the guarantee), 2 Google ads"
},
{
"rival": "Competitor C",
"price_usd": 399,
"guarantee": "30 days, after finishing module 1",
"extras": [
"weekly live Q&A"
],
"payment_terms": "one payment",
"reason_to_act_now": "cohort start dates",
"ads": "no ads running"
}
],
"norms": {
"rivals": 3,
"guarantee_30_days": 2,
"guarantee_any": 3,
"instalments": 2,
"live_help": 1,
"running_meta_ads": 2,
"meta_ads_naming_a_guarantee": 5,
"meta_ads_total": 9,
"google_rows_dropped_other_advertiser": 2
},
"note": "2 Google library rows under rival domains came from other advertisers and were left out"
},
"new_offer": {
"core_package": "40 video lessons, quizzes and a practice ledger, lifetime access (unchanged)",
"makes_buying_feel_safe": "30 days, on finishing module 1 and submitting the practice ledger",
"terms": "one payment of $299, or 3 payments of $105",
"reason_to_act_now": "a new intake opens on the 1st of each month; live Q&A seats are tied to the intake",
"offer_map": [
{
"objection": "Worth the money",
"score_pct": 23.6,
"element": "3 payments of $105 ($315 in total) next to the one payment of $299",
"cost_per_sale_usd": 3.45,
"cost_note": "35% of buyers expected to choose it; provider fee and expected unpaid amount minus the $16 they pay above one payment",
"break_even_lift_alone_pct": 1.3,
"where_it_shows": "under the full price, never instead of it",
"rival_norm": "2 of 3 rivals take payments"
},
{
"objection": "Effort and time",
"score_pct": 20.8,
"element": "2 live Q&A calls a month for the first 3 months, plus a stated pace: 4 weeks at 5 hours a week",
"cost_per_sale_usd": 5.33,
"cost_note": "2 calls x $80 x 3 months / 90 buyers a month",
"break_even_lift_alone_pct": 2.1,
"where_it_shows": "beside the curriculum, with the pace in the headline area",
"rival_norm": "1 of 3 rivals gives live help"
},
{
"objection": "Cheaper or free options",
"score_pct": 17.9,
"element": "what free videos don't give (a practice ledger, feedback, a finished set of books)",
"cost_per_sale_usd": 0,
"cost_note": "nothing per sale",
"break_even_lift_alone_pct": 0,
"where_it_shows": "in the FAQ",
"rival_norm": "no rival compares itself with free videos"
},
{
"objection": "Fear it won't work",
"score_pct": 17.3,
"element": "30 days, on finishing module 1 and submitting the practice ledger",
"cost_per_sale_usd": 6.09,
"cost_note": "refunds planned at 6.1% instead of 4.1% (1.5 times, until the test shows the real rate)",
"break_even_lift_alone_pct": 2.4,
"where_it_shows": "next to the buy button and in the FAQ, in one plain sentence",
"rival_norm": "2 of 3 rivals give 30 days; the current 7 days with a 2-lesson limit is the shortest"
}
]
},
"profit_check": {
"current": {
"price_usd": 299,
"refund_rate_pct": 4.07,
"payment_fees_usd": 8.97,
"delivery_and_support_usd": 16,
"contribution_per_sale_usd": 261.85
},
"new": {
"average_paid_usd": 304.6,
"planned_refund_rate_pct": 6.11,
"payment_fees_usd": 8.97,
"delivery_and_support_usd": 16,
"live_qa_per_buyer_usd": 5.33,
"instalment_cost_per_sale_usd": 8.82,
"contribution_per_sale_usd": 246.86
},
"break_even_lift_pct": 6.1,
"verdict": "keep",
"reading": "The new offer earns $14.99 less per sale, so it needs 6.1% more sales to earn the same. That is within the 15% keep line.",
"one_time_costs": [
"write the comparison with free videos for the FAQ (an hour of copy time)"
]
},
"student_variant": {
"offer": "30% off ($209.30)",
"gate": "a school email domain, verified at checkout",
"cap": "one per person",
"ends": "12 months after purchase or at graduation",
"contribution_per_sale_usd": 168.81,
"reading": "still positive per sale; track the share of buyers using it"
},
"reason_to_act_now": {
"used": "a new intake opens on the 1st of each month; live Q&A seats are tied to the intake",
"refused": [
{
"tactic": "a 15-minute countdown timer that restarts for every visitor",
"why": "the deadline isn't real, so it reads as a trick once a buyer reloads the page; remove it"
}
]
},
"presentation": [
{
"element": "3 payments of $105 ($315 in total) next to the one payment of $299",
"where": "under the full price, never instead of it"
},
{
"element": "2 live Q&A calls a month for the first 3 months, plus a stated pace: 4 weeks at 5 hours a week",
"where": "beside the curriculum, with the pace in the headline area"
},
{
"element": "what free videos don't give (a practice ledger, feedback, a finished set of books)",
"where": "in the FAQ"
},
{
"element": "30 days, on finishing module 1 and submitting the practice ledger",
"where": "next to the buy button and in the FAQ, in one plain sentence"
},
{
"element": "ads",
"where": "lead with the answer to 'Worth the money', the top theme"
}
],
"test_plan": {
"change": "the new offer against the current one, new visitors only, split 50/50",
"primary_metric": "contribution per visitor, read after the 30-day guarantee window closes",
"current_conversion_pct": 1,
"lift_to_detect_pct": 10,
"target_conversion_pct": 1.1,
"visitors_per_arm": 162908,
"daily_visitors": 300,
"days_to_run": 1087,
"verdict": "too slow: over 56 days, so test a bigger change or run the offers one after the other over like periods",
"read_refunds_on": "each buyer's day 31",
"fallback": "Run the new offer for 4 full weeks after 4 weeks of the current one, same traffic sources, and compare contribution per visitor once every buyer's guarantee window has closed."
},
"unknowns": [
"The real refund rate under a 30-day guarantee: planned at 1.5 times today's rate until the test shows it.",
"How many buyers choose payments: planned at 35%."
]
},
"regional_pricing": {
"summary": "4 countries get a lower price now (Mexico, Brazil, India, Philippines), 1 as a test (Poland); every other country keeps $49.",
"home": {
"trial_start_rate_pct": 3,
"paid_per_trial_pct": 15
},
"price_level_source": "World Bank PA.NUS.PRVT.PP / PA.NUS.FCRF, 2025 values, read 2026-10-30",
"rules": {
"lower_price_needs": "300+ sessions and 1%+ of sessions; trial start rate at least 70% of home; paid per trial at most 50% of home; price level ratio under 0.80",
"bands": "0.80 or more: 100%; 0.55 to under 0.80: 75%; 0.35 to under 0.55: 55%; under 0.35: 40%",
"decision": "go when the ceiling is at least 2 times the break-even lift, test between 1 and 2 times, no below"
},
"countries": [
{
"country": "United States",
"code": "US",
"currency": "USD",
"price_level_ratio": 1,
"sessions_90d": 120000,
"share_of_sessions_pct": 61.9,
"trial_starts": 3600,
"paid": 540,
"trial_start_rate_pct": 3,
"trial_start_rate_vs_home_pct": 100,
"paid_per_trial_pct": 15,
"paid_per_trial_vs_home_pct": 100,
"verdict": "home market",
"band_pct": 100,
"local_price": 49,
"decision": "home price"
},
{
"country": "United Kingdom",
"code": "GB",
"currency": "GBP",
"price_level_ratio": 0.924,
"sessions_90d": 18000,
"share_of_sessions_pct": 9.3,
"trial_starts": 520,
"paid": 75,
"trial_start_rate_pct": 2.89,
"trial_start_rate_vs_home_pct": 96.3,
"paid_per_trial_pct": 14.4,
"paid_per_trial_vs_home_pct": 96.2,
"checks": {
"enough_interest": true,
"they_want_it": true,
"they_dont_pay": false,
"cheaper_country": false
},
"verdict": "keep the home price: they already pay at a similar rate",
"band_pct": 100,
"local_price": null,
"decision": "home price"
},
{
"country": "Canada",
"code": "CA",
"currency": "CAD",
"price_level_ratio": 0.902,
"sessions_90d": 9000,
"share_of_sessions_pct": 4.6,
"trial_starts": 250,
"paid": 37,
"trial_start_rate_pct": 2.78,
"trial_start_rate_vs_home_pct": 92.6,
"paid_per_trial_pct": 14.8,
"paid_per_trial_vs_home_pct": 98.7,
"checks": {
"enough_interest": true,
"they_want_it": true,
"they_dont_pay": false,
"cheaper_country": false
},
"verdict": "keep the home price: they already pay at a similar rate",
"band_pct": 100,
"local_price": null,
"decision": "home price"
},
{
"country": "Australia",
"code": "AU",
"currency": "AUD",
"price_level_ratio": 0.944,
"sessions_90d": 6000,
"share_of_sessions_pct": 3.1,
"trial_starts": 170,
"paid": 24,
"trial_start_rate_pct": 2.83,
"trial_start_rate_vs_home_pct": 94.4,
"paid_per_trial_pct": 14.1,
"paid_per_trial_vs_home_pct": 94.1,
"checks": {
"enough_interest": true,
"they_want_it": true,
"they_dont_pay": false,
"cheaper_country": false
},
"verdict": "keep the home price: they already pay at a similar rate",
"band_pct": 100,
"local_price": null,
"decision": "home price"
},
{
"country": "Germany",
"code": "DE",
"currency": "EUR",
"price_level_ratio": 0.812,
"sessions_90d": 5000,
"share_of_sessions_pct": 2.6,
"trial_starts": 70,
"paid": 9,
"trial_start_rate_pct": 1.4,
"trial_start_rate_vs_home_pct": 46.7,
"paid_per_trial_pct": 12.9,
"paid_per_trial_vs_home_pct": 85.7,
"checks": {
"enough_interest": true,
"they_want_it": false,
"they_dont_pay": false,
"cheaper_country": false
},
"verdict": "keep the home price: few visitors start a trial, so fit, language or traffic is the problem, not price",
"band_pct": 100,
"local_price": null,
"decision": "home price"
},
{
"country": "Spain",
"code": "ES",
"currency": "EUR",
"price_level_ratio": 0.687,
"sessions_90d": 3000,
"share_of_sessions_pct": 1.5,
"trial_starts": 75,
"paid": 6,
"trial_start_rate_pct": 2.5,
"trial_start_rate_vs_home_pct": 83.3,
"paid_per_trial_pct": 8,
"paid_per_trial_vs_home_pct": 53.3,
"checks": {
"enough_interest": true,
"they_want_it": true,
"they_dont_pay": false,
"cheaper_country": true
},
"verdict": "keep the home price: paid per trial is more than half the home rate, so price isn't what stops them",
"band_pct": 100,
"local_price": null,
"decision": "home price"
},
{
"country": "Poland",
"code": "PL",
"currency": "PLN",
"price_level_ratio": 0.549,
"sessions_90d": 2400,
"share_of_sessions_pct": 1.2,
"trial_starts": 66,
"paid": 4,
"trial_start_rate_pct": 2.75,
"trial_start_rate_vs_home_pct": 91.7,
"paid_per_trial_pct": 6.1,
"paid_per_trial_vs_home_pct": 40.4,
"checks": {
"enough_interest": true,
"they_want_it": true,
"they_dont_pay": true,
"cheaper_country": true
},
"verdict": "price is the blocker",
"band_pct": 55,
"band_price_usd": 26.95,
"local_price_unrounded": 101.35,
"local_price": 99,
"local_price_in_usd": 26.33,
"floor_usd": 7.08,
"local_rivals": [
{
"rival": "Competitor A",
"local_price": 129,
"in_usd": 34.3,
"rival_discount_vs_its_us_price_pct": 23.8
}
],
"local_rival_median_usd": 34.3,
"rival_flag": "within the local rivals' range",
"break_even_lift_pct": 86.1,
"ceiling_pct": 147.5,
"decision": "test",
"google_ads": {
"cost_usd_30d": 410,
"paid_conversions_30d": 2,
"cost_per_paid_customer_usd": 205,
"payback_months_at_band_price": 9.2,
"pays_back_within_12_months": true
}
},
{
"country": "Mexico",
"code": "MX",
"currency": "MXN",
"price_level_ratio": 0.588,
"sessions_90d": 4500,
"share_of_sessions_pct": 2.3,
"trial_starts": 130,
"paid": 7,
"trial_start_rate_pct": 2.89,
"trial_start_rate_vs_home_pct": 96.3,
"paid_per_trial_pct": 5.4,
"paid_per_trial_vs_home_pct": 35.9,
"checks": {
"enough_interest": true,
"they_want_it": true,
"they_dont_pay": true,
"cheaper_country": true
},
"verdict": "price is the blocker",
"band_pct": 75,
"band_price_usd": 36.75,
"local_price_unrounded": 706.98,
"local_price": 709,
"local_price_in_usd": 36.86,
"floor_usd": 7.37,
"local_rivals": [
{
"rival": "Competitor A",
"local_price": 499,
"in_usd": 25.94,
"rival_discount_vs_its_us_price_pct": 42.4
},
{
"rival": "Competitor B",
"local_price": 899,
"in_usd": 46.73,
"rival_discount_vs_its_us_price_pct": 20.8
}
],
"local_rival_median_usd": 36.34,
"rival_flag": "above the local rivals' median: you will look expensive",
"break_even_lift_pct": 33,
"ceiling_pct": 178.6,
"decision": "go",
"google_ads": {
"cost_usd_30d": 620,
"paid_conversions_30d": 3,
"cost_per_paid_customer_usd": 206.67,
"payback_months_at_band_price": 6.6,
"pays_back_within_12_months": true
}
},
{
"country": "Brazil",
"code": "BR",
"currency": "BRL",
"price_level_ratio": 0.462,
"sessions_90d": 5200,
"share_of_sessions_pct": 2.7,
"trial_starts": 150,
"paid": 6,
"trial_start_rate_pct": 2.88,
"trial_start_rate_vs_home_pct": 96.2,
"paid_per_trial_pct": 4,
"paid_per_trial_vs_home_pct": 26.7,
"checks": {
"enough_interest": true,
"they_want_it": true,
"they_dont_pay": true,
"cheaper_country": true
},
"verdict": "price is the blocker",
"band_pct": 55,
"band_price_usd": 26.95,
"local_price_unrounded": 150.58,
"local_price": 150.9,
"local_price_in_usd": 27.01,
"floor_usd": 7.08,
"local_rivals": [
{
"rival": "Competitor A",
"local_price": 129.9,
"in_usd": 23.25,
"rival_discount_vs_its_us_price_pct": 48.3
},
{
"rival": "Competitor B",
"local_price": 249.9,
"in_usd": 44.73,
"rival_discount_vs_its_us_price_pct": 24.2
}
],
"local_rival_median_usd": 33.99,
"rival_flag": "within the local rivals' range",
"break_even_lift_pct": 81.4,
"ceiling_pct": 275,
"decision": "go",
"google_ads": {
"cost_usd_30d": 540,
"paid_conversions_30d": 2,
"cost_per_paid_customer_usd": 270,
"payback_months_at_band_price": 11.8,
"pays_back_within_12_months": true
}
},
{
"country": "India",
"code": "IN",
"currency": "INR",
"price_level_ratio": 0.228,
"sessions_90d": 14000,
"share_of_sessions_pct": 7.2,
"trial_starts": 400,
"paid": 8,
"trial_start_rate_pct": 2.86,
"trial_start_rate_vs_home_pct": 95.2,
"paid_per_trial_pct": 2,
"paid_per_trial_vs_home_pct": 13.3,
"checks": {
"enough_interest": true,
"they_want_it": true,
"they_dont_pay": true,
"cheaper_country": true
},
"verdict": "price is the blocker",
"band_pct": 40,
"band_price_usd": 19.6,
"local_price_unrounded": 1708.31,
"local_price": 1699,
"local_price_in_usd": 19.49,
"floor_usd": 6.87,
"local_rivals": [
{
"rival": "Competitor A",
"local_price": 1999,
"in_usd": 22.94,
"rival_discount_vs_its_us_price_pct": 49
},
{
"rival": "Competitor B",
"local_price": 3999,
"in_usd": 45.88,
"rival_discount_vs_its_us_price_pct": 22.2
}
],
"local_rival_median_usd": 34.41,
"rival_flag": "within the local rivals' range",
"break_even_lift_pct": 151.4,
"ceiling_pct": 650,
"decision": "go",
"google_ads": {
"cost_usd_30d": 480,
"paid_conversions_30d": 4,
"cost_per_paid_customer_usd": 120,
"payback_months_at_band_price": 7.2,
"pays_back_within_12_months": true
}
},
{
"country": "Philippines",
"code": "PH",
"currency": "PHP",
"price_level_ratio": 0.357,
"sessions_90d": 6000,
"share_of_sessions_pct": 3.1,
"trial_starts": 170,
"paid": 5,
"trial_start_rate_pct": 2.83,
"trial_start_rate_vs_home_pct": 94.4,
"paid_per_trial_pct": 2.9,
"paid_per_trial_vs_home_pct": 19.6,
"checks": {
"enough_interest": true,
"they_want_it": true,
"they_dont_pay": true,
"cheaper_country": true
},
"verdict": "price is the blocker",
"band_pct": 55,
"band_price_usd": 26.95,
"local_price_unrounded": 1549.76,
"local_price": 1599,
"local_price_in_usd": 27.81,
"floor_usd": 7.08,
"local_rivals": [
{
"rival": "Competitor A",
"local_price": 1490,
"in_usd": 25.91,
"rival_discount_vs_its_us_price_pct": 42.4
},
{
"rival": "Competitor B",
"local_price": 2990,
"in_usd": 52,
"rival_discount_vs_its_us_price_pct": 11.9
}
],
"local_rival_median_usd": 38.95,
"rival_flag": "within the local rivals' range",
"break_even_lift_pct": 76.2,
"ceiling_pct": 410,
"decision": "go",
"google_ads": {
"cost_usd_30d": 300,
"paid_conversions_30d": 2,
"cost_per_paid_customer_usd": 150,
"payback_months_at_band_price": 6.3,
"pays_back_within_12_months": true
}
},
{
"country": "South Africa",
"code": "ZA",
"currency": "ZAR",
"price_level_ratio": 0.433,
"sessions_90d": 900,
"share_of_sessions_pct": 0.5,
"trial_starts": 26,
"paid": 1,
"trial_start_rate_pct": 2.89,
"trial_start_rate_vs_home_pct": 96.3,
"paid_per_trial_pct": 3.8,
"paid_per_trial_vs_home_pct": 25.6,
"checks": {
"enough_interest": false,
"they_want_it": true,
"they_dont_pay": true,
"cheaper_country": true
},
"verdict": "too little data: keep the home price, look again next quarter",
"band_pct": 100,
"local_price": null,
"decision": "home price"
}
],
"abuse_rules": [
"Price set from the card's issuing country and the billing address; IP location only chooses what to display.",
"Home price when card country and billing country disagree, or a VPN or proxy is detected at checkout.",
"The regional price renews only while the card country still matches.",
"Regional prices on self-serve plans only; Business and contract plans pay the home price.",
"Tighten the checks if more than 5% of regional sign-ups pay with a card from another country."
],
"tax_display": "Consumer prices in the EU, UK and Australia include tax; US and Canadian prices are shown before tax.",
"test_plan": {
"launch": [
"Mexico",
"Brazil"
],
"who": "new customers only; existing customers keep their price",
"compare": "paid conversion and revenue per visitor against the 90 days before, for at least one billing cycle",
"watch": [
"refunds",
"share of regional sign-ups paying with a foreign card"
]
},
"unknowns": [
"How much of each country's gap is price: the ceiling assumes all of it, so a 'go' needs only half."
]
},
"change_announcement": {
"change": {
"type": "plan sunset",
"effective_date_E": "2027-02-15",
"announcement_day_A": "2026-11-17",
"notice_days": 90,
"notice_rule": "plan sunset: 90 days or more, annual customers keep it to the end of their term; the terms promise 30 days, so 90 more than covers it"
},
"affected": {
"customers": 1240,
"monthly": 1180,
"annual": 60,
"klaviyo_segment_members": 1262,
"segment_vs_billing": "the Klaviyo segment has +22 profiles against billing; send to the segment, check the gap against billing before A",
"top_10_pct": {
"customers": 124,
"revenue_12m_usd": 78792,
"share_of_affected_revenue_pct": 15.5
},
"revenue_12m_usd": 509676,
"widget_users_90_days": 2050,
"widget_note": "more people use the old widget than there are Classic accounts, because each account's staff and front desk use it; the in-product banner reaches them"
},
"rollout": [
{
"when": "2026-11-10",
"rel": "A - 7",
"who": "support, sales and success staff (22 people)",
"what": "briefing, FAQ, support replies, talking points",
"channel": "team meeting and the help desk"
},
{
"when": "2026-11-14",
"rel": "A - 3",
"who": "top 124 affected customers by 12-month revenue",
"what": "personal note from the head of customer success, with a call offer",
"channel": "email from a named person"
},
{
"when": "2026-11-15",
"rel": "A - 2",
"who": "14 reseller partners",
"what": "partner note with the dates and the customer FAQ",
"channel": "email"
},
{
"when": "2026-11-17",
"rel": "A",
"who": "all 1,240 Classic customers",
"what": "the announcement (monthly and annual versions)",
"channel": "email and an in-product banner"
},
{
"when": "2026-11-17",
"rel": "A",
"who": "everyone else",
"what": "changelog post and social post",
"channel": "changelog, blog, social (text drafted here)"
},
{
"when": "2027-01-16",
"rel": "E - 30",
"who": "Classic customers who haven't switched",
"what": "reminder 1",
"channel": "email and banner"
},
{
"when": "2027-02-08",
"rel": "E - 7",
"who": "Classic customers who haven't switched",
"what": "reminder 2",
"channel": "email"
},
{
"when": "2027-02-14",
"rel": "E - 1",
"who": "Classic customers who haven't switched",
"what": "last reminder: what happens tomorrow",
"channel": "email"
},
{
"when": "2027-02-15",
"rel": "E",
"who": "all former Classic customers",
"what": "it's done: your new plan and price",
"channel": "email"
}
],
"messages": {
"monthly_customers": {
"subject": "Your Classic plan ends on February 15, 2027: your price is locked at $39",
"body": [
"We are retiring the Classic plan on February 15, 2027.",
"Your account moves to Growth on that date, at $39 a month for 12 months instead of $49. Your booking page, clients and history stay exactly as they are.",
"You don't need to do anything. If you'd rather switch now, one click in Billing moves you today at the same $39.",
"We move your services, staff and reminder settings across for you. Growth also adds up to 5 staff calendars, deposits and two-way calendar sync.",
"Why: Classic runs on our old booking widget, which we can no longer keep secure and fast, so we are moving everyone to the current one.",
"Questions? Reply to this email or read the FAQ at example.com/classic-plan/."
]
},
"annual_customers": {
"subject": "Your Classic plan stays until your renewal date",
"body": [
"We are retiring the Classic plan on February 15, 2027, but you paid for a year, so nothing changes for you until your renewal date.",
"At renewal you move to Growth at $390 a year for your first year (normally $490).",
"You don't need to do anything now; we will email you 30 days before your renewal.",
"We move your services, staff and reminder settings across for you at renewal, and you can switch early in Billing if you want Growth sooner.",
"Why: Classic runs on our old booking widget, which we can no longer keep secure and fast.",
"Questions? Reply to this email."
]
},
"top_customers_note": "Same facts as the monthly email, from the head of customer success by name, with an offer of a 15-minute call to move their settings together.",
"partners": "The dates, the $39 locked price, the customer FAQ link, and who to contact for a client with many locations.",
"in_product_banner": "Classic ends on February 15. You'll move to Growth at $39/month, with nothing to do. See what changes.",
"changelog_post": "We're retiring the Classic plan on February 15, 2027. Classic customers move to Growth at a locked $39 a month for 12 months; nothing else changes for them.",
"social_post": "Classic plan customers: on Feb 15 you move to Growth at $39/month for a year. Same booking link, same clients, more staff calendars. Details in your inbox."
},
"faq": [
{
"q": "What is changing?",
"a": "The Classic plan ends on 2027-02-15. Every Classic account moves to Growth."
},
{
"q": "What will I pay?",
"a": "$39 a month for 12 months, then the Growth price at the time. Annual customers: $390 for the first year."
},
{
"q": "Will my booking page link change?",
"a": "No. Your link, clients, history and settings stay the same."
},
{
"q": "Do I have to do anything?",
"a": "No. You can switch early in Billing if you want the Growth features now."
},
{
"q": "What happens to my text credits?",
"a": "Unused credits move with you and keep their expiry date."
},
{
"q": "I only have 1 staff member. Can I stay on $29?",
"a": "No, Classic ends for everyone. The Starter plan ($19, 1 staff) is open to you if it fits better."
},
{
"q": "I'm on an annual plan. Do I need to do anything?",
"a": "No. Classic stays until your renewal date, then you move to Growth at $390 for the first year. We email you 30 days before."
},
{
"q": "Can I cancel instead?",
"a": "Yes, any time before your next billing date, from Billing."
},
{
"q": "Why is this happening?",
"a": "Classic runs on our old booking widget, which we can no longer keep secure and fast."
}
],
"support_replies": [
{
"question": "Will my booking page link change?",
"reply": "No. Your link, clients, history and settings stay the same."
},
{
"question": "What happens to my text credits?",
"reply": "Unused credits move with you and keep their expiry date."
},
{
"question": "I only have 1 staff member. Can I stay on $29?",
"reply": "No, Classic ends for everyone. The Starter plan ($19, 1 staff) is open to you if it fits better."
}
],
"sales_talking_points": [
"Classic ends for everyone on Feb 15, 2027; the $39 price is locked for 12 months.",
"Growth adds staff calendars, deposits and calendar sync.",
"Don't promise to keep anyone on $29 or to extend the date: neither is on offer."
],
"drafts_offered": [
{
"action": "klaviyo create_campaign",
"status": "offered after confirmation, not run",
"creates": "a Draft campaign; nothing sends until it is sent from Klaviyo",
"body": {
"platform": "klaviyo",
"action": "create_campaign",
"workspace_id": 1,
"brand_id": 1,
"body": {
"data": {
"type": "campaign",
"attributes": {
"name": "Classic plan retirement: announcement (monthly)",
"audiences": {
"included": [
"<CLASSIC_MONTHLY_SEGMENT_ID>"
]
},
"campaign-messages": {
"data": [
{
"type": "campaign-message",
"attributes": {
"definition": {
"channel": "email",
"label": "Main",
"content": {
"subject": "Your Classic plan ends on February 15, 2027: your price is locked at $39",
"preview_text": "Nothing to do. Your link and clients stay the same.",
"from_email": "[email protected]",
"from_label": "Example Booking Software"
}
}
}
}
]
},
"send_strategy": {
"method": "static",
"datetime": "2026-11-17T15:00:00+00:00"
}
}
}
}
}
}
],
"watch": {
"baseline": {
"sends": 10,
"rates_per": "recipient",
"median_unsubscribe_rate_pct": 0.245,
"unsubscribe_flag_above_pct": 0.49,
"median_spam_complaint_rate_pct": 0.012,
"spam_flag_at_pct": 0.1
},
"reaction_check": {
"read_on": "2026-11-24",
"announcement_send": {
"recipients": 1262,
"delivered": 1254,
"unsubscribe_rate_pct": 0.71,
"spam_complaint_rate_pct": 0.079,
"unsubscribe_flag": true,
"spam_flag": false
},
"switched_early": {
"customers": 310,
"share_pct": 25
},
"top_tickets": [
{
"question": "Will my booking page link change?",
"tickets": 46
},
{
"question": "Can I keep $29 if I stay with 1 staff?",
"tickets": 31
},
{
"question": "What happens to my text credits?",
"tickets": 22
},
{
"question": "Do I need to do anything if I'm on annual?",
"tickets": 14
}
],
"actions": [
"Unsubscribes ran at 0.71%, over the 0.49% flag: drop the Classic customers who unsubscribed from marketing sends but keep the service notices (the plan change is a service message), and check the replies for the reason.",
"Spam complaints at 0.079%, under the 0.1% flag.",
"The top ticket ('Will my booking page link change?') is answered in the email body, so readers missed it: put 'your booking link stays the same' in reminder 1's subject line and first line."
]
},
"searches": "Search Console weekly: 'example booking classic' with 'discontinued', 'alternative' or 'replacement'",
"did_they_act": "share of Classic customers switched by E - 7 and by E"
},
"legal_review": [
"The terms promise 30 days' notice of plan changes; confirm the 90-day plan and the auto-move to Growth with whoever owns the terms."
],
"unknowns": []
}
}
}
ReadyPricing Strategy
MarkdownUTF-8