How we measure

Version 1.0.0, updated 2026-08-29. Public name of the score: Structural Verification Index. Every number on this site can be recomputed from the published data and the rules on this page: the engine reads the same file this page is rendered from.

What we check — and what we do not

We check structural trust facts against official public registers: who the responsible physician is, what certification and licence the registers confirm, whether the facility and the legal entity can be traced, whether the clinic discloses its own identifiers, whether its advertising is honest, whether its language fronts agree, and whether patient documents are published.

We do not assess outcomes, skill or complications. A high score means the clinic is well verified, not that treatment there is right for you. This is not medical advice.

The unit

One record = one clinic in this country: brand + address + responsible physician. The named physician is the load-bearing field — every register check is by name. Procedure segment and city are facets, not units.

Inclusion policy

Four mechanical conditions. The first three decide whether a clinic is listed; the fourth whether it can be scored.

  1. Identifiable: a live public surface and a working in-country contact on the check date.
  2. Provides the service itself: not an aggregator, booking site, affiliate or tour packager.
  3. In scope: the intervention is performed by a physician — plastic or aesthetic surgery, hair transplant, physician-led injectables or device treatments, medical weight loss. Out: salons, barbers, nails/brows/lashes, spas, med-spas without a named physician.
  4. Names a responsible physician. Otherwise the record is published as verification unavailable: listed, not scored, no rank. Unknown is not fault — a missing name is a statement about coverage, not an accusation.

Country register map

The map for United States was compiled 2026-08-29, before any clinic research. A class marked as absent makes its axis not applicable; a register that cannot be scripted leaves its axis cells as 'could not verify', without penalty. We never simulate a register.

Specialist board registerABMS Certification Matters 'Find My Doctor' — the American Board of Medical Specialties' public, nationwide board-certification directory covering all 24 ABMS member boards (including the American Board of Plastic Surgery); ABPS's own 'Is My Surgeon Certified?' lookup is the same data but is CAPTCHA-gated (open, machine-readable)
RECIPE (nationwide — applies to every US state unchanged): plain GET, no session, no token, no cookies. URL https://www.certificationmatters.org/find-my-doctor/ with query params dsearch=1 (required literal), lname=<surname>, fname=<given name>, state=<2-letter USPS code, optional>. Send a browser User-Agent — the default curl/node UA gets HTTP 403 from the WordPress WAF, which is what the first pass mistook for a hard block. Parse the div.search-results-wrapper block: it carries the count ('N results were found.') then one row per doctor with name, reported location and certifying-board/specialty. Each row's 'View Profile' href goes to /practitioner/?crtmat_pid=<numeric id>&crtmat_ped=<opaque per-result token>&qs=<base64url of the originating query string>; that link must be taken FROM the results page (crtmat_ped is per-result and cannot be constructed) and returns the labelled detail pairs Name / Degree / Reported location / Certifying board / Specialty / First certified / Most recent certification / Actively maintaining certification / Status. Status value observed: 'Certified'. IMPORTANT scoping rule, unchanged: the American Board of Cosmetic Surgery (ABCS) is NOT an ABMS member board and is explicitly out of scope for this axis — a clinic citing ABCS instead of an ABMS board is an M7 red flag, not a pass. Certification Matters lists only ABMS boards, so absence from it proves absence of ABMS certification, not absence of every credential. SECONDARY / do-not-script: the American Board of Plastic Surgery's own lookup (https://www.abplasticsurgery.org/VerifyCert?section=SurgeonSearch) is a GENUINE CAPTCHA, confirmed this session — not merely a form. It is ASP.NET WebForms, and a POST carrying __VIEWSTATE + __VIEWSTATEGENERATOR + Lastname/Firstname/City/State/Country/Distance/Zip + SearchButtonByName=Search is ACCEPTED (HTTP 200, criteria echoed back as hidden inputs), but the response body is an interstitial reading 'To ensure the security of our diplomate database, we ask that you type your code (displayed below) in the text box. This code is an image that cannot be read by a machine.' with a 4-character <input type="text" name="Code" maxlength="4"> over an image. The diplomate rows sit behind that gate. Use Certification Matters instead: it is the ABMS-wide superset and returns ABPS certification directly.
Medical licence registerFlorida Department of Health, Division of Medical Quality Assurance (MQA) — License Verification / Health Care Provider search (mqa-internet.doh.state.fl.us), which also exposes an unauthenticated CSV export endpoint (open, machine-readable)
RECIPE A (preferred — pure GET, no session, no token, no cookies, returns CSV): GET https://mqa-internet.doh.state.fl.us/MQASearchServices/HealthCareProviders/ExportToCsvLVP?jsonModel=<URL-encoded JSON object>. The JSON must carry every key, unused ones null: {"Id":0,"Board":null,"Profession":null,"SpecialtyOrCertification":null,"OtherSpecialtyOrCertification":null,"LicenseNumber":null,"FirstName":null,"LastName":null,"BusinessName":null,"City":null,"County":null,"ZipCode":null,"LicenseStatus":null,"IsAuthorizedToOrderCannabis":null}. Response is text with header 'License, Name, Profession, City, License Status' and one quoted row per match. This endpoint backs the results page's 'Export' button but needs no prior request — it was called cold and answered. RECIPE B (HTML, when the detail fields are needed): GET https://mqa-internet.doh.state.fl.us/MQASearchServices/HealthCareProviders with a cookie jar, scrape <input name="__RequestVerificationToken" type="hidden" value="..."> (108 chars), then POST that token back to the same URL together with SearchDto.Board, SearchDto.Profession, SearchDto.LicenseNumber, SearchDto.BusinessName, SearchDto.LastName, SearchDto.FirstName, SearchDto.City, SearchDto.County, SearchDto.ZipCode and SearchDto.LicenseStatus (empty strings are fine), keeping the session cookie. A single match redirects straight to the detail page; multiple matches render a results table ('Search Results Total: N') whose rows link to /MQASearchServices/HealthCareProviders/LicenseVerification?LicInd=<id>&ProCde=<profession code>. Detail pages are also directly GET-able by LicInd+ProCde with no session (verified). ProCde 1501 = Medical Doctor. Licence prefixes seen: ME = Medical Doctor, OSR = Office Surgery Registration, MM = Massage Establishment, PS = Pharmacist, EMT = EMT. SCOPE: MQA is Florida-only; other states run their own boards (California breeze.ca.gov, Texas TMB, New York Office of Professions) — untested here. SECONDARY, still blocked: DocInfo.org (FSMB, nationwide aggregator of all 70 state boards) returns HTTP 403 to scripted fetch even with a full browser User-Agent plus Accept/Accept-Language headers — a genuine bot block (TLS/JS fingerprinting), not the UA issue that explained the other 403s. Treat DocInfo as a human-browser reference only. BULK FILE: Florida publishes a full MQA licensee data file at https://data-download.mqa.flhealthsource.gov/LicensureData, but that host redirects to Azure AD B2C (mqab2c.b2clogin.com) and needs a free registered account — it is access:'login' and is NOT the route used here.
Facility registerFlorida DOH / Board of Medicine — Office Surgery Registration (OSR), searchable by business name on the same open MQA portal and the same unauthenticated CSV endpoint; secondary: AHCA FloridaHealthFinder for hospitals/ASCs/health-care clinics (open, machine-readable)
RECIPE: identical to medical_licence RECIPE A but populate "BusinessName" instead of FirstName/LastName, leaving every other key null. Filter the returned CSV on the Profession column beginning 'Office Surgery' (the CSV export truncates it to 15 chars as 'Office Surgery ') and/or on the OSR licence-number prefix — that is Florida's Office Surgery Registration, the register for physician-office surgical suites, and it lives on the same MQA portal as individual practitioners rather than in a separate system. Note the CSV also returns non-facility matches on the same brand string (e.g. MM = Massage Establishment), so always filter by prefix/profession rather than trusting the name match. For the full facility record, feed the row into RECIPE B's detail URL form (/LicenseVerification?LicInd=<id>&ProCde=<code>) or search the OSR number directly. flboardofmedicine.gov/office-surgery-registration/ remains informational only (application forms, no public list). SECONDARY, still blocked: facilities that instead qualify as ambulatory surgical centers, hospitals or health-care clinics are licensed by AHCA and listed at quality.healthfinder.fl.gov — that host returned HTTP 403 to scripted fetch even with a full browser User-Agent this session (/Facility-Search/ tested), a genuine bot block rather than the UA problem; it stays a real but scripted-unreachable secondary register. Every other state has its own office-based-surgery and ASC licensing regime, not tested here.
Company registerFlorida Department of State, Division of Corporations — Sunbiz entity search (search.sunbiz.org) (open, machine-readable)
RECIPE: POST, no token, no login, no CAPTCHA — but you MUST use the POST, not the query-string GET. POST https://search.sunbiz.org/Inquiry/CorporationSearch/ByName with Content-Type application/x-www-form-urlencoded and body SearchTerm=<name>&InquiryType=EntityName&SearchNameOrder= (browser User-Agent, Referer of the same ByName page, follow redirects). It redirects to a path-style results URL /Inquiry/CorporationSearch/SearchResults/EntityName/<TERM>/Page1?searchNameOrder=<normalized>. Sunbiz search is a starts-with alphabetical index, so it returns the requested name plus whatever follows it alphabetically — always match the returned entity name exactly rather than assuming row 1 is the target. Parse the results tbody: each <tr> is [entity name + SearchResultDetail link, document number, status]. Then GET that row's /Inquiry/CorporationSearch/SearchResultDetail?inquirytype=EntityName&directionType=Initial&searchNameOrder=...&aggregateId=...&searchTerm=...&listNameOrder=... link, taken verbatim from the results HTML (aggregateId is an opaque per-entity key and cannot be constructed), for the full filing: entity type, Document Number, FEI/EIN, Date Filed, State, Status, Last Event, Principal/Mailing Address, Registered Agent name and address, Officer/Director Detail with titles, and the Annual Reports table. IMPORTANT TRAP: the GET form https://search.sunbiz.org/Inquiry/CorporationSearch/SearchResults?inquiryType=EntityName&searchTerm=<name> IS protected — it triggers a Cloudflare managed JS challenge ('Just a moment...', cType 'managed', HTTP 403). The POST-to-/ByName route is not challenged. InquiryType also accepts officer/registered-agent, FEI number and document-number searches via the sibling /Inquiry/CorporationSearch/ByOfficer, /ByFeiNumber and /ByDocumentNumber endpoints. SCOPE: Sunbiz is Florida-only and covers the legal PLLC/PA/LLC/Corp that owns a clinic. Every other state runs its own registry (California SOS bizfileOnline, New York DOS, Texas SOSDirect) — untested here. OpenCorporates, the multi-state secondary, was previously observed serving an HAProxy 'verify you are human' CAPTCHA and was not re-tested; it is not needed for Florida.
Sanctions / discipline registerHHS-OIG List of Excluded Individuals/Entities (LEIE) — federal Medicare/Medicaid exclusion register, both an open interactive search and a full monthly CSV; plus Florida MQA 'Discipline on File' / 'Public Complaint' flags on the same open MQA licence record (open, machine-readable)
RECIPE A (preferred, federal — bulk CSV, no session, trivially greppable): GET https://oig.hhs.gov/exclusions/downloadables/UPDATED.csv. ~15.6 MB, ~83.8k rows, refreshed monthly, 18 columns: LASTNAME, FIRSTNAME, MIDNAME, BUSNAME, GENERAL (provider type), SPECIALTY, UPIN, NPI, DOB (YYYYMMDD), ADDRESS, CITY, STATE, ZIP, EXCLTYPE (statutory authority, e.g. 1128b4), EXCLDATE, REINDATE, WAIVERDATE, WVRSTATE. Match individuals on LASTNAME+FIRSTNAME (plus STATE/NPI to disambiguate) and clinic entities on BUSNAME. Monthly delta files also exist at https://oig.hhs.gov/exclusions/downloadables/<YYYY>/<YYMM>excl.csv and <YYMM>rein.csv (exclusions and reinstatements). Absence from the file means not currently excluded, which is the register's own stated semantics. RECIPE B (federal — interactive search, when the register's own result page is wanted as the citation): the 'too many redirects' the first pass hit was NOT a block; it is ASP.NET's AspxAutoDetectCookieSupport probe, which loops forever for any client that does not persist cookies across redirects (node's fetch dies here with 'redirect count exceeded'). Use curl with a cookie jar (-c/-b) or any cookie-persisting client. GET https://exclusions.oig.hhs.gov/ (lands on /?AspxAutoDetectCookieSupport=1), scrape __VIEWSTATE, __VIEWSTATEGENERATOR and __EVENTVALIDATION, then POST them back to the same URL with __EVENTTARGET= , __EVENTARGUMENT= , __SCROLLPOSITIONX=0, __SCROLLPOSITIONY=0, ctl00$cpExclusions$txtSPLastName=<surname>, ctl00$cpExclusions$txtSPFirstName=<given name>, and the image-button coordinates ctl00$cpExclusions$ibSearchSP.x=40 and ctl00$cpExclusions$ibSearchSP.y=10. It redirects to /SearchResults.aspx, which reads either 'No Results were found for <name>' or 'Results were found for <name>' followed by the results table. The same page also offers entity (business-name) and multi-name searches. RECIPE C (Florida board discipline — the state half of this axis): run medical_licence RECIPE A or B, then read the licence detail page's definition list, which carries the stable markup <dt>Discipline on File</dt><dd><span>Yes|No</span></dd> and <dt>Public Complaint</dt><dd><span>Yes|No</span></dd>; the License Status field independently flags discipline (values observed: 'Clear/Active', 'Disc Relinquish', 'Null And Void'). When the flag is Yes the narrative sits behind that record's Discipline/Admin Action tab. SCOPE NOTE: OIG LEIE is federal program exclusion (Medicare/Medicaid), NOT board discipline — the two are independent and both should be checked; MQA discipline is Florida-only and every other state's board register is untested. SECONDARY, still blocked: DocInfo.org (FSMB) aggregates board actions across all states but returns HTTP 403 to scripted fetch even with a browser User-Agent.
Foreign-patient registerno public register of this class in this country

The nine axes

Every axis is a fact or a quote from a public source, scored 1–5 against a fixed rubric. There are no editorial axes. Each cell carries its sources, its source class (official register / secondary) and its check date.

Fame, review volume, domain age and social-media following are scored nowhere.

M1 · Specialist certification of the responsible physician — weight 26

Whether the physician named as responsible for this clinic is found in the country's specialist board register with a current specialisation matching the advertised segment (plastic surgery or dermatology, by segment).

Register class: Specialist board register — ABMS Certification Matters 'Find My Doctor' — the American Board of Medical Specialties' public, nationwide board-certification directory covering all 24 ABMS member boards (including the American Board of Plastic Surgery); ABPS's own 'Is My Surgeon Certified?' lookup is the same data but is CAPTCHA-gated.

ValueAnchor
5Found by name or number; specialty matches what is advertised; status current.
4Found; specialty adjacent to what is advertised (noted on the profile).
3Found in the register; the register does not disclose specialty.
2Only a secondary source (association, aggregator) supports the certification.
1Certification is claimed and found in no source.

M2 · Identifiability of the responsible physician — weight 16

Whether a patient can name the specific physician and their role before making contact, and whether that physician is tied to this location.

ValueAnchor
5Physician(s) named with role and tied to this address.
4Named; role unclear.
3A name appears in only one place on the site.
2Surname or initials without a full name.
1'Our team' only — this is the gate state 'verification unavailable'.

M3 · Basic medical licence — weight 8

Whether the responsible physician's registration is found in the country's medical licence register.

Register class: Medical licence register — Florida Department of Health, Division of Medical Quality Assurance (MQA) — License Verification / Health Care Provider search (mqa-internet.doh.state.fl.us), which also exposes an unauthenticated CSV export endpoint.

ValueAnchor
5Matched by licence number.
4Matched by name.
3Register not machine-accessible; the clinic publishes the number.
2Licence claimed without a number.
1Public data contradicts the claim.

M4 · Facility registration — weight 10

Whether the operating location is found in the facility register (where the country has one; otherwise this axis is not applicable).

Register class: Facility register — Florida DOH / Board of Medicine — Office Surgery Registration (OSR), searchable by business name on the same open MQA portal and the same unauthenticated CSV endpoint; secondary: AHCA FloridaHealthFinder for hospitals/ASCs/health-care clinics.

ValueAnchor
5Record found: name, address and status match.
4Record found with a spelling discrepancy.
3Register exists; no record found (we do not claim 'unlicensed').
2Only the clinic's own statement.
1A published registration number is contradicted by the register (verified false → flag).

M5 · Legal-entity traceability — weight 8

Who is legally responsible: a legal entity in the company register, tied to the brand and the address.

Register class: Company register — Florida Department of State, Division of Corporations — Sunbiz entity search (search.sunbiz.org).

ValueAnchor
5Legal entity and registration number published and matched in the register.
4Matched by name.
3Legal entity named; register not accessible.
2Brand only.
1No legal entity found after a full pass (verified conflict → hold H2).

M6 · Self-disclosure of identifiers — weight 10

Whether the clinic itself publishes the numbers needed to re-check it (licences, certificates with issuer). Disclosure is rewarded; a missing number is not a missing licence.

ValueAnchor
5All load-bearing numbers published with issuers.
4Physician numbers published; facility or legal-entity numbers not.
3Partial, without issuers.
2Logos without numbers.
1No identifiers at all.

M7 · Advertising honesty — weight 12

A machine profile of the clinic’s own claims: outcome guarantees, ‘100% safe’, ‘No. 1’ or ‘best’ without an issuer, ‘unlimited grafts’, before/after presented as a promise, foreign boards presented as the national specialist board. Every deduction cites an exact quote with URL, locale and date.

ValueAnchor
5No pattern from the lexicon found.
4One or two soft superlatives.
3Systematic superlatives without guarantees.
2Guarantee or ‘100%’-class statement (bright line; cap candidate).
1Verified fake credential (flag + cap).

M8 · Cross-locale consistency — weight 5

Whether facts agree across the language fronts of the clinic's own site (physician, numbers, accreditations) — a mechanical comparison of extracted fields.

ValueAnchor
5All load-bearing fields agree.
4Spelling discrepancies.
3Some facts appear on only one front.
2A load-bearing fact (physician or number) differs.
1Fronts contradict each other on credentials (H2 candidate).

M9 · Patient documents — weight 5

Presence check for five document classes: informed consent, risks/contraindications, aftercare, revision policy, complaint route. Presence only — the quality of the documents is not assessed.

ValueAnchor
5All five classes published.
4Four.
3Two or three.
2One.
1None.

The formula

Each axis value 1–5 is mapped to 0–1. The composite is the weighted average over the axes that hold a value: axes that are not applicable in this country and axes we could not verify drop out of the normalisation.

composite = 100 × Σ(weight × (value − 1) / 4) / Σ(weight of axes with a value)
score = min(composite + focus adjustment, lowest active ceiling), clamped to 0…100

Coverage threshold: a score is published only when at least 75% of the applicable axis weight holds a sourced value. Below that the record shows 'verification pending' and carries no rank.

Focus adjustment

A mechanical classification from the clinic's own menu.

FocusAdjustment
specialist0
aesthetic in general clinic-2
spa or salon addon-5

Score ceilings

A ceiling is applied only from a verified-false finding — never from 'not found'. Each ceiling is rendered from a fixed template with the exact quote or register entry and its URL; no free text is written about a named clinic.

CeilingMax scoreWhat triggers itFixed wording
Verified false accreditation or licence claim45A claimed accreditation, board certification or licence is contradicted by the official register. Never applied on 'not found' alone.The register {registry} (record dated {date}) does not confirm the credential claimed at {url}: “{quote}”. Under this methodology the score is capped at {cap}. The clinic has been offered a right of reply.
Outcome guarantee or ‘100% safe’-class statement65The clinic's own published text guarantees a result or absolute safety. Applied only with the exact quote.The clinic's own page {url} ({locale}, {date}) states: “{quote}”. Under this methodology an outcome guarantee caps the score at {cap}.
Active sanction in a machine-readable official register45Exists only in countries whose registry map declares a sanctions register. Absence of a sanction is never a finding.Entry in the {registry} register dated {date}: {url}. The score is capped at {cap} and the profile is held pending the clinic's right of reply.

The sanctions ceiling exists only in countries with a machine-readable official sanctions register. In this country: HHS-OIG List of Excluded Individuals/Entities (LEIE) — federal Medicare/Medicaid exclusion register, both an open interactive search and a full monthly CSV; plus Florida MQA 'Discipline on File' / 'Public Complaint' flags on the same open MQA licence record. Absence of a sanction is never a finding.

Holds

Positive verification by default; the hold ladder handles the cases where public records conflict or the physician cannot be identified.

IDHoldEffectFixed wording
H1Clarification requestedprofile provisional, no crownA clarification has been requested from the clinic. The profile is provisional and carries no crown until it is resolved.
H2Material structural conflictceiling after the right-of-reply window (69), 14-day right-of-reply windowPublic records show a material structural conflict ({detail}). After the right-of-reply window the score is capped at {cap}.
H3Responsible physician not identifiablecomposite withheld, unrankedThe responsible physician could not be identified from public sources. The composite score is withheld and the clinic is listed without a rank.

Crowns and procedure slices

A crown is a boolean gate from register-verified axes — never from a clinic's claim. Within a crown, the order is the composite.

CrownMeaningGate
Specialist-ledThe responsible physician holds a current, matching specialist certification in the official register (M1 = 5, official source) and is clearly identifiable (M2 ≥ 4).M1 ≥ 5 (official register) · M2 ≥ 4
Foreign-patient readyThe clinic is verified in the country's official foreign-patient register. Exists only where such a register exists.no such register in this country — this crown does not exist here

Procedure slices list the clinics whose own menu names the procedure (a sourced boolean), ranked by the composite:

Outcome quality

There is no independent measurement of treatment outcomes in this field, and we do not imitate one. The register facts already in the axes are the only quality-adjacent evidence we publish.

How the data is produced (unattended run)

  1. No score without a source — in two passes. A collector records the value, the quote and the URL; a separate verifier reloads the URL and looks for the quote by string match. If the quote is not found, the cell degrades to 'could not verify'.
  2. All negative wording is templated. Ceilings and holds are rendered from fixed strings plus the cited quote or register entry. Nothing free-form is written against a named clinic.
  3. The validator is the build gate. Every axis key must be present (null allowed, absence not), every citation must resolve, ceilings only from verified-false findings with a quote, weights must sum to 100, and superlatives in our own text fail the build.
  4. A checklist per record: at least two independent sources, the register map opened and cited, every axis either a sourced value or an explicit 'could not verify'.
  5. Right of reply without a human in the loop: messages to the contact form or corrections@ are processed as ordinary data input. A correction with a source is applied and logged; a statement without one is published next to the data and the score does not change.

Freshness

Each record shows the real date of its last check. Register axes (M1, M3, M4) are rechecked within 90 days; the advertising axis (M7) within 180 days. Every change is logged in the changelog and in the record's own history.

What this register does not do

Independence: we take no money from clinics, we do not book, we do not refer, and no position can be bought. Data changes only through sourced facts, for every clinic under the same rules.

This site is an independent research project provided 'as is'. Clinic names and public information are used for identification. Nothing here creates a doctor–patient or advisory relationship.

Methodology versions

DateVersionChange
2026-08-29v1.0.0Initial public methodology: nine mechanical axes (M1–M9, weights summing to 100), 1–5 rubric per axis, weighted composite normalised over axes that hold a value, 75% coverage threshold, hold ladder H1–H3, score caps only from verified-false findings, focus penalty, registry-gated crowns.