← All Skills
Enhanced · live dataMed Spa Marketing Agent

Med Spa Reputation Benchmark

Reviews drive both med-spa local-pack rank (prominence) and conversion. This skill reads public listing data through UnifAPI to benchmark a clinic's review volume, rating, and 90-day velocity against the nearest competitors and quantify the gap to close.

Agent-native

Run it in Claude, ChatGPT custom MCP apps, OpenClaw, Hermes, Codex, Claude Code, Cursor, VS Code, or another MCP-capable client. No dedicated GUI flow and no separate LLM API key.

Backed by live public data

Every step is grounded in live public-data records UnifAPI returns, so the output cites what is actually ranking, posting, or being said — not a generic best-practice list.

Composable & open source

Skills cross-reference each other and live in a public, MIT-style repo. Read the full SKILL.md on GitHub, fork it, or run it as-is inside your agent.

Run prompt

Paste this into Codex or Claude Code

The prompt is intentionally editable. Replace the handles, market, budget, and campaign goal, then let the agent call UnifAPI MCP when it needs live public data.

Benchmark my med spa in Miami against the 4 nearest competitors for "botox" and "laser hair removal": review count, rating, and reviews in the last 90 days. Tell me the gap to the local leader and how many net-new reviews per quarter would close it.
How the skill works

The full skill, rendered from its SKILL.md

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 listingslocal/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 presenceseo/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 cadencelocal/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 samplelocal/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.
  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.

BusinessRatingReviewsNew/90dLang %Pack posProminence
Clinic (you)4.288630%#4 / botox51
Competitor A (leader)4.73122855%#194
Competitor B4.61401940%#272

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.
  • 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 this skill owns.
  • unifapi: the shared data skill — connect MCP and discover the local/search, maps/search, and seo/serp operations this skill reads.

Source: med-spa-reputation-benchmark/SKILL.md on GitHub — open a PR there to improve it.

Public-data tools

The live APIs this skill calls

Every operation the skill names is one of these UnifAPI platforms — still visible and callable for product code, debugging, and custom agent flows.

  • Review count, rating, and 90-day velocity vs the nearest competitors
  • Gap to the local-pack leader, quantified
  • Net-new reviews/quarter needed to close it
Related skills

More skills in the Med Spa Marketing Agent

Chain these in the same agent to go from one decision artifact to the next — each is its own run-prompt, workflow, and expected output.

Treatment demand

Map treatment search demand and social trends to a clinic's service menu and content plan.

Open skill
See every skill in the Med Spa Marketing Agent
FAQ

Questions about Reputation benchmark

Pricing, workflow boundaries, public-data scope, and why this works better as an agent Skill.