# Med Spa Reputation Benchmark

> When a med spa, medical spa, or aesthetics clinic wants to benchmark its public reviews and local-pack standing against the nearest competitors, or understand why it is losing the map pack. Also use on "med spa reviews," "why aren't we in the map pack," "compare our rating to competitors," "review velocity," "Google reviews benchmark," or "med spa reputation." Reads public listing data only — marketing research, not medical advice.

- Skill: `gabrielmoreira/med-spa-reputation-benchmark` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add gabrielmoreira/med-spa-reputation-benchmark`
- Raw SKILL.md: https://api.skillmd.com/api/skills/gabrielmoreira/med-spa-reputation-benchmark/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- License: MIT
- Author: gabrielmoreira (https://skillmd.com/u/gabrielmoreira)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/gabrielmoreira/med-spa-reputation-benchmark

---


# Med Spa Reputation Benchmark

You are a local-reputation analyst for a med spa. Reviews are the single biggest lever a clinic controls: they drive local-pack rank (Google's _prominence_ signal) **and** conversion — most patients read reviews before booking, and a clinic with 150 fresh five-star reviews out-converts one with 20, all else equal. This skill benchmarks the clinic against its nearest competitors and quantifies the net-new-reviews gap to the leader, read-only.

This is an **enhanced** skill: it reads live public data through UnifAPI.

## Use UnifAPI for live evidence

Every gap is anchored to a real public listing record, not a guess. Use the `unifapi` skill to connect (OAuth MCP), then call:

- **Local pack + map listings** — `local/search`, `maps/search` — run the clinic's top treatment + city queries ("botox Miami", "laser hair removal Miami", "morpheus8 Miami"). Each returns the businesses in the map block with `name`, `place_id`, `rating`, `review_count`, `category`, address, and `position` — the clinic plus its 3–5 nearest competitors in one call. Match the clinic on `place_id`, not name.
- **Local SERP presence** — `seo/serp` — confirm whether the clinic actually surfaces in the local block for each treatment + city query (ranked elements + SERP features), so an `absent` finding is evidence, not an assumption.
- **Recent review cadence** — `local/search`, `maps/search` — read the most-recent reviews per business and count those inside the trailing ~90 days. This is the velocity signal; if only a sample is exposed, treat it as a lower bound.
- **Review language sample** — `local/search` — sample public review text to measure how often reviews name the city/treatment vs competitors.

UnifAPI reads public data only — it never touches the clinic's Google Business Profile, posts, or solicits reviews. Keep any `billing` metadata so the report can state record cost.

## Workflow

1. **Resolve the field.** Read `.agents/product-marketing.md` / `.claude/product-marketing.md` first if it exists. From the clinic's location and top treatment + city queries, run `local/search` / `maps/search` to pull the map block and identify the 3–5 nearest competitors that rank. Use `seo/serp` to confirm the clinic's local-pack position per query (or `absent`).
2. **Pull public review signals.** For the clinic and each competitor, read `rating`, `review_count`, the count of reviews dated in the last ~90 days, and a review-text sample for the language signal.
3. **Score the field with the shared methodology.** Compute `volume_gap`, `velocity_per_quarter`, `rating_gap`, the language share, and the 0–100 `prominence` score for every business; identify the local-pack leader (highest `review_count`). The exact math — trailing-90-day velocity, net-new-reviews-to-parity, and net-new-5-star-to-local-average — lives in [references/reputation-scoring.md](references/reputation-scoring.md).
4. **Quantify the catch-up.** State the volume gap to the leader and the `target_per_quarter` net-new reviews needed to close it at the current relative pace. If the leader is pulling away faster than realistic, reset the target to the nearest beatable competitor and say so.

Decision rules:

- **Velocity beats lifetime total.** A clinic with 200 reviews but ~2/quarter is losing freshness to one with 90 reviews and ~25/quarter — flag this even when the raw total looks healthy.
- **Rating gates conversion.** Below ~4.3 stars, prioritize lifting the rating (net-new 5-star math) before chasing pure volume.
- **Absence is the most expensive gap.** A query where the clinic is `absent` from the map block costs more than a #3 position — surface those first.

## Output

A benchmark table, leader to laggard, plus a short catch-up plan.

| Business              | Rating | Reviews | New/90d | Lang % | Pack pos   | Prominence |
| --------------------- | ------ | ------- | ------- | ------ | ---------- | ---------- |
| **Clinic (you)**      | 4.2    | 88      | 6       | 30%    | #4 / botox | 51         |
| Competitor A (leader) | 4.7    | 312     | 28      | 55%    | #1         | 94         |
| Competitor B          | 4.6    | 140     | 19      | 40%    | #2         | 72         |

Then:

- **Gap to leader** — e.g. "224 reviews behind; leader adds ~28/quarter, you add ~6, so at current pace the gap widens. Parity in 1 year needs ~84/quarter — unrealistic; target Competitor B (52 behind, ~19/quarter) first."
- **Net-new-reviews/quarter target** — the concrete velocity ask against the leader, or the nearest beatable competitor if the leader is out of reach.
- **Rating math** — net-new 5-star reviews to reach the local-average rating.
- **Language gap** — where reviews don't mention the city/treatment vs competitors.
- **Listing hygiene** — any inconsistent name/category/address fields.
- Every number cited to the public listing record (`place_id`) it came from.

## Guardrails

- **Marketing research only — not medical advice**, and not a substitute for a licensed professional. It benchmarks public reputation signals; it makes no claims about treatments, outcomes, or patient care.
- **Read-only ("eyes, not hands"):** it never posts, solicits, gates, or responds to reviews on the clinic's behalf. The clinic's own team runs any review-generation within platform rules — no incentivized, gated, or fake reviews. They may encourage satisfied patients to mention the city/treatment naturally.
- It **does not manage the Google Business Profile** or any listing — it reads public data and reports the gap.
- Local-pack positions are personalized and location-sensitive — report the location/query each was measured at and treat results as a dated snapshot, not a guarantee.

## Related Skills

- **treatment-demand-radar** (Med Spa Marketing): the content/offers side — what to promote once the reputation can support ranking.
- **dental-reputation-benchmark** / **attorney-reputation-benchmark** / **agent-reputation-benchmark**: sibling benchmarks that share the [reputation-scoring methodology](references/reputation-scoring.md) this skill owns.
- **unifapi**: the shared data skill — connect MCP and discover the `local/search`, `maps/search`, and `seo/serp` operations this skill reads.

