The Trust Score in one sentence
The ProFix Trust Score is a 0-100 composite of public, verifiable signals — license tier, license currency, rating × review count, photo coverage, hours, service area, specialties, tenure, permit-verified status, and editorial featured status — calculated by a deterministic function published openly at src/lib/trust-score.ts in the project codebase.
Every weight in the table below imports live from that source file. If the implementation changes, this page changes with it — there is no manual hand-copy step that could silently drift. Companion transparency surfaces include /algorithm (the broader 100-point Listing Health Score methodology used for editorial rankings) and /methodology (the data-source verification pipeline). This page is the homeowner-friendly TL;DR; /algorithm is the deep methodology.
The four tiers
Each contractor's composite score buckets into one of four tiers — elite, solid, starter, or minimal. The tier name appears next to the score on every public profile via the TrustScoreChip component.
| Tier | Score band | What it means in plain English |
|---|---|---|
| Elite | 75-100 | Strong evidence on multiple axes — state-board-verifiable license, large statistically-meaningful review base, permit history, and a complete public profile. Click the chip to see exactly which factors contributed. |
| Solid | 50-74 | Verified profile with most of the operational signals, but at least one axis is thin — usually the review base, the license verify URL pathway, or the permit history. Worth contacting, worth checking the per-factor breakdown. |
| Starter | 30-49 | Partial verification. Confirm license, insurance, and reviews independently at the state board and on Google before signing. Use /verify to confirm the license is currently active. |
| Minimal | Below 30 | Directory listing with limited public verification. Treat as a starting point; do the independent license + insurance + reviews lookup yourself before any payment. |
Every factor, every weight
The table below is the complete rubric. Weights are imported live from the TRUST_SCORE_WEIGHTS constant in src/lib/trust-score.ts. The order matches the order of evaluation in the scoring function — verification first, then license, then reviews, then operational signals, then editorial signals. Maximum theoretical raw total is 125 (some tiers are mutually exclusive, so a single pro cannot earn every line); the final score is clamped to 0-100.
| Factor | Points | Signal | Why this matters |
|---|---|---|---|
| Verification: license-linked | +25 | State-licensed trade with a normalized license number AND a working OCILB / eLicense verify URL | The strongest single trust signal. A homeowner can click through to the state board and confirm the licence in real time. This is the highest-weighted factor in the whole rubric because the verify URL is unfakeable — either it resolves to an active record or it does not. |
| Verification: verified-profile (standard) | +10 | Standard verified profile without the state-board verify URL link | Awarded when the pro has cleared profile-level verification (operational signals like phone, hours, address) but the license URL pathway is not wired. Mutually exclusive with the license-linked bonus — a pro gets the higher tier OR the standard tier, never both. |
| License: present | +20 | Published license number on file (state-linked OR published-number-only) | Earned whenever we surface a license-style number on the public profile. Independent of the verification tier — a pro can have a license number without us having wired the verify URL. |
| License: current | +10 | License number is state-linked AND a working verify URL is published | Awarded only when the homeowner can confirm the current status themselves. We treat a working state-linked verify URL as the directory-tier proxy for 'current and active' because the state board's status updates appear there before they appear anywhere else. |
| Reviews: strong | +10 | Rating at least 4.5 stars AND review count at least 50 | The volume floor matters. A 5-star rating across 4 reviews is statistically meaningless. The directory only awards the strong-review bonus when both the average and the sample size meet the public threshold. Mutually exclusive with the moderate tier. |
| Reviews: moderate | +5 | Rating at least 4.0 stars AND review count at least 10 | The lower band — solid but not statistically dominant. A pro with 4.2 stars across 25 reviews earns this tier. Pros with fewer than 10 reviews of any rating earn zero review points (no false-precision signal). |
| Photo: present | +5 | A public profile photo is on file | Visual proof. A real operator typically has at least one photo (logo, truck, work sample). Profile completeness correlates with operational reality. |
| Hours: published | +5 | Operating hours are published on the public profile | A business that publishes hours has a posture toward incoming customer contact. Combined with the phone signal in the verification layer, this is the lightweight 'real business' check. |
| Service area: declared | +5 | Lat / lng coordinates on file (geocoded location) | Service-area coverage is computed from geocoded coordinates by the ServiceArea component. A pro with a known location can be matched to neighborhood and nearby-city pages — a pro without coordinates is fundamentally unmatchable to a homeowner's address. |
| Specialties: depth | +5 | At least 2 declared specialties (24/7 emergency, slab leaks, sewer scope, etc.) | Domain depth signal. A contractor who has thought about which specific job types they handle is operationally serious; a one-line listing is not. The threshold is two so a single self-reported specialty does not trigger the bonus. |
| Tenure: 5+ years | +5 | Years-in-business is at least 5 | A small but real signal. A business that has survived 5 winters in Ohio has weathered at least one full furnace season, one full slab-freeze cycle, and one full storm season. Tenure does not guarantee competence but it correlates with operational continuity. |
| Permits: verified | +15 | Pulled at least 3 verified building permits in the past 12 months (Lucas County data) | The unfakeable proof-of-work signal. A contractor pulling 3+ permits in a 12-month window has engaged the local code-inspection regime on a recurring basis. Counties publish permit ledgers publicly; nothing about the count can be paid for or manipulated by the contractor. |
| Featured: editorial | +5 | Featured editorial flag is set on the pro profile | A small editorial signal applied by ProFix Editorial Team for pros who meet additional internal criteria (cross-source consistency, no open complaints, healthy mix of signals). Not paid placement — see /our-pricing-policy. |
Mutually-exclusive groups: (1) verification: license-linked OR verified-profile, never both; (2) reviews: strong OR moderate, never both; (3) license: current is only awarded when license: present is already awarded and the state-board verify URL is wired.
Why these factors (and not others)
The rubric is opinionated on purpose. Three editorial commitments shape what gets weight and what does not:
- Star ratings alone get zero weight. Stars without volume context are statistically meaningless and easy to manipulate. The directory only awards review points when both the average AND the count cross a public threshold (4.5★ × 50 for strong, 4.0★ × 10 for moderate). Five-star ratings across three reviews fall through the floor. The companion analysis at /research/permit-vs-stars-2026-ohio walks through the data on why permit history is a stronger contractor trust signal than star ratings.
- Permit-verified status gets heavy weight. A contractor who pulls 3+ verified building permits in a 12-month window has engaged the local code-inspection regime on a recurring basis. County permit ledgers are public; nothing about the count can be paid for or marketed. The permit-verified bonus (+15) is the third-largest weight in the entire rubric, and the underlying data is auditable at /permits-leaderboard.
- Tenure beats marketing budget. The directory does not weight ad spend, sponsored placement, or paid claim tier. The Featured editorial flag is worth only 5 of 100 possible points and is applied by ProFix Editorial Team based on internal cross-source criteria — not paid placement. Years-in-business is worth a modest 5 points at the 5-year threshold because operational continuity correlates with competence over time, but does not guarantee it.
What the rubric does NOT weight: ad spend, sponsored slot purchases, paid badges, BBB-paid accreditation tier (the analysis at /research/comparing-ohio-directories walks through why), self-reported insurance without a verifiable certificate, or any signal a contractor can purchase from the directory.
What can drop a score
Scores are not frozen in time. The composite recomputes on every refresh of the underlying data, so several events can move a score downward:
- License expiration removes the license: current bonus (+10) and, depending on how the state board's verify URL resolves, can drop the verification: license-linked bonus (+25) to the standard verified-profile tier (+10). Real-time status changes are visible at /verify against the Ohio eLicense Center.
- License revocation or suspension drops the verification tier entirely. A suspended license cannot be state-linked and the directory removes the verify URL link until status is restored. See /verification for the trust-tier definitions and the public-record evidence standard each tier requires.
- Claim-policy violations — misrepresented credentials in a claim submission, false ownership claim, or refusal to substantiate a claimed certification — drop the verified-profile tier on review. The complete policy is published at /verification.
- Going dormant. Profiles with no operational signal across phone, reviews, permits, or website for 24 months are labelled dormant on the public surface. They remain searchable so a homeowner who has a legacy invoice can still find the record, but they drop from default category rankings. The methodology is documented at /methodology.
- Loss of a verifiable photo, hours, or geocoded location. Small but real — the operational-signal bonuses are tied to live profile completeness. If the Google Business Profile that backs a photo is removed, the photo bonus disappears on the next refresh.
How to see this for any pro
Every contractor on ProFix gets a live Trust Score, and every score's per-factor breakdown is visible on the public evidence page for that pro. The pattern is /pro/<slug>/evidence — no login, no paywall, no API key required.
Worked example
For the seed contractor /pro/miller-plumbing-toledo the per-factor breakdown is published at /pro/miller-plumbing-toledo/evidence. Every factor row shows the underlying public-record evidence — the verify URL, the permit count, the review count and average, the geocoded location, the published hours. The full Trust Score factor list is exposed in the JSON-LD on the same page.
How AI agents can pull trust scores
The aggregate Trust Score feed is a public, machine-readable JSON endpoint. License: CC BY 4.0. The endpoint is cached for 1 hour with 24-hour stale-while-revalidate so AI engines and partners can pull on a recurring schedule without overloading the origin.
# Fetch all public ProFix Trust Scores
curl -sL https://profixdirectory.com/api/trust-scores.json | jq '.scores[] | select(.tier == "elite")' | head -50
# Sample response shape:
{
"ok": true,
"generated_at": "2026-05-23T00:00:00.000Z",
"scoring_doc": "https://profixdirectory.com/methodology",
"tier_breakdown": { "elite": 412, "solid": 1980, "starter": 5012, "minimal": 14490 },
"median_score": 28,
"scores": [
{ "slug": "miller-plumbing-toledo", "name": "Miller Plumbing (Toledo)", "score": 82, "tier": "elite" }
// ... one row per public pro
]
}Companion endpoints: per-contractor evidence rows at /pro/<slug>/evidence, the full OpenAPI spec at /api/openapi.json, and a streamable-HTTP MCP server at /api/mcp for Claude, Cursor, ChatGPT, Perplexity, and custom agents.
Limitations and honest caveats
The Trust Score is a directory-tier composite, not a guarantee. Five honest caveats are part of the methodology and named openly:
- Permit data depth varies by county. Lucas County (Toledo metro) has the deepest permit-feed coverage. Other Ohio counties currently rely on synthetic permit indicators derived from aggregate sources rather than direct building-department feeds. The permit-verified bonus is awarded conservatively where county data is thin. The data-source map at /data-sources spells out which counties have which depth.
- License-status drift is real. A licence we showed as state-linked at refresh time can be expired or suspended by the time a homeowner clicks. The directory snapshot is only as fresh as the last pull (monthly is realistic, weekly is aspirational, daily is currently not sustainable). Every license-linked profile carries a direct verify URL so the homeowner can confirm in real time.
- Review fabrication patterns are detectable but not definitively flaggable. The directory does not currently downweight reviews based on suspected fabrication beyond ignoring counts below the volume floor. The honest discussion at /research/directory-data-quality-2026 names what the directory can and cannot detect.
- Ghost businesses can score above zero. A dormant LLC with a published license number, a stale photo, and geocoded coordinates can score in the starter band even with zero recent operational signal. Dormant-profile labelling at the listing surface is the structural fix; the score itself is a numeric layer above that label.
- Non-licensed trades are structurally capped. Trades that Ohio does not state- license (roofing, appliance repair, tree service, concrete, gas piping nuances) cannot earn the verification: license-linked bonus or the license: present bonus by definition. The companion analysis at /research/ohio-licensing-moat-2026 walks through this asymmetry. For these trades, permit history and review volume carry proportionally more of the trust signal.
FAQ
What is the ProFix Trust Score?
The ProFix Trust Score is a 0-100 composite of public, verifiable signals for each Ohio contractor — license tier, license currency, rating × review count, photo coverage, hours, service area coverage, specialties, tenure, permit-verified status, and editorial featured status. Every factor weight is published openly on this page and implemented in src/lib/trust-score.ts in the public repository. Pros fall into four tiers: Elite (75-100), Solid (50-74), Starter (30-49), Minimal (below 30).
Why don't you weight star rating more heavily?
Star ratings without volume context are statistically meaningless and easy to manipulate. The directory only awards review points when both the average AND the count cross a public threshold — 4.5 stars × 50 reviews for the strong tier, 4.0 stars × 10 reviews for the moderate tier. Fewer than 10 reviews of any rating earns zero review points. We also do not re-emit aggregated review markup as our own schema (Google policy and FTC posture both make that the conservative choice).
Why do permits matter so much?
Permit-pull counts come from county building departments — they cannot be paid for, manipulated, or marketed. A contractor who pulls 3+ verified building permits in a 12-month window has engaged the local code-inspection regime on a recurring basis. Permit history is the closest the directory tier gets to direct operational evidence. The trust score adds 15 points for permit-verified status, and the public permit-pull leaderboards at /permits-leaderboard show the underlying data anyone can audit.
What can drop a score?
License expiration removes both the license-current bonus and (if the state-board verify URL stops resolving) the verification: license-linked bonus. A revoked or suspended license drops the verification tier entirely. Claim-policy violations (misleading credentials in a claim submission, false ownership claim) drop the verified-profile tier on review at /verification. Profiles with no operational signal across phone + reviews + permits + website for 24 months are labelled dormant and excluded from default rankings — see the detailed methodology at /methodology.
Can a contractor pay to raise their score?
No. None of the trust-score factors are pay-to-win. The Featured editorial flag is applied by ProFix Editorial Team based on internal criteria (cross-source consistency, no open complaints, healthy mix of signals) and contributes only 5 of 100 possible points. The pricing-policy commitment at /our-pricing-policy spells out the lines the directory does not cross — pay-for-placement, paid removal of negative signals, and paid score adjustments are all off the table.
How can AI agents fetch these scores?
The aggregate Trust Score feed is published at /api/trust-scores.json — every public pro's slug, name, score (0-100), and tier (elite/solid/starter/minimal). License: CC BY 4.0. Per-profile evidence rows are available at /pro/{slug}/evidence. The full machine-readable methodology is in the OpenAPI spec at /api/openapi.json and surfaced for MCP-compatible agents at /api/mcp.
Where is the source code?
The Trust Score is implemented in src/lib/trust-score.ts in the ProFix Directory codebase. The TRUST_SCORE_WEIGHTS constant is the source of truth for every factor weight on this page; the values displayed here import live from that constant so the page cannot silently drift from the implementation. The verification tier logic lives in src/lib/verification.ts; the license-evidence logic lives in src/lib/license-evidence.ts; the permit-verified slug set is computed in src/lib/permits-leaderboard.ts.