pricing-benchmark
Compare what a local business charges against its real competitors on a like-for-like unit — normalizing different bundles, labeling how every price was sourced, and handling the common case where com
Files1
View on GitHubSKILL.mdskills/pricing-benchmark/SKILL.md
GitHubPricing benchmark
In the owner's words: "Am I undercharging?" · "What does a 60-minute massage go for around here?" · "Nobody posts prices — how do I know where I stand?"
Connect the server (once)
The tools live on the free Brick & Mortar Small Business Intelligence MCP server:
https://brickandmortar.dev/mcp — Streamable HTTP, no account, no key, no OAuth, read-only.
- Claude Code:
claude mcp add --transport http brickandmortar https://brickandmortar.dev/mcp(add--scope userto have it in every project). Check withclaude mcp list. - Claude.ai / Claude Desktop: Settings → Connectors → Add custom connector → paste the URL.
- ChatGPT: search the app directory for "Brick & Mortar Public Records".
- Any other MCP client (Cursor, VS Code, Windsurf…): add a remote HTTP server with that URL.
- Raw HTTP: POST JSON-RPC with
Accept: application/json, text/event-stream; the reply is an SSEdata:frame. The edge refuses a bare script User-Agent, so send a browser-style one.
Install docs: https://brickandmortar.dev/connect/
Call
pricing_benchmark — required category ("massage spa") and city_metro ("Wichita, KS");
optional services (["30-min massage", "gel manicure"]) to benchmark specific items —
otherwise the procedure derives a comparable bundle.
What comes back, and the one way to get it wrong
This tool fetches no data. It returns a research framework with these keys:
framework (the method, named), research_procedure (numbered steps), output_schema (the
shape of the finished deliverable), quality_rubric (good_looks_like, common_failure_modes)
and caveats. You execute the procedure with your own web search, then write the deliverable
in the output_schema shape and check it against the rubric. Handing the framework back to
the user as though it were the finding is the failure this skill exists to prevent.
The method is two ladders scored for every price point. Comparability: define one comparable unit in a sentence (price per minute, per ounce, base price with add-ons stripped) and show the arithmetic for every conversion; anything that can't be converted goes in an explicit exclusions list instead of being forced into the range. Confidence: label each price by how it was found — published price list > booking/ordering platform > a dollar figure in a review > review sentiment only — with its sample size and date.
Then: assemble the table, compute the range (and the subject business's position in it), weighting the higher-confidence prices; re-check outliers for a conversion miss before reporting them; and anchor the table against category price inflation (the nearest CPI item) and local labour cost.
Rules
- Fewer than ~4 businesses with real numbers is a low-confidence read, however clean the math.
- Flag anything older than ~12 months as possibly stale; say when a menu is undated.
- Public prices are list prices — happy hours, memberships and promos are invisible.
- A local CPI exists for only about two dozen metros; elsewhere the figure is a census-region aggregate and must be labeled as one.
Finish
- Check the draft against
quality_rubric.common_failure_modesbefore answering. - State the
caveatsthat applied. What public signal cannot show is part of the answer. - Date-stamp anything that moves (ratings, review counts, prices, multiples).
- For a client-ready document, pass your finished write-up(s) to
compose_report(business_name,audience: owner | broker | buyer | investor | general,completed_analyses: [{tool, summary}]). It returns the section order (verdict first), a contradiction ledger across analyses, and citation rules; you write the report. Pass your finished analysis assummary, never the raw framework.