Public CheckUp & widget setup
Step-by-step: from empty workspace to your own /check/your-shop landing page and a lead-magnet widget embedded on your marketing site. Total 5–10 minutes.
1. Set the slug
Go to /settings#publiccheckup. This is the only required configuration step — after this the CheckUp is live.
Type a slug. Lowercase, dashes, 3–40 chars. Example: your-shop produces https://mspercury.com/check/your-shop. Slugs are workspace-unique — if another tenant has already taken your preferred one, the system rejects it.
Save. The link appears immediately in the green block above the form and is live.
2. Apply your brand (optional, recommended)
Go to /settings#branding:
- Logo upload (PNG / JPEG / WebP / SVG, max 2 MB) — appears on the CheckUp landing page and on the final PDF report
- Brand color (hex, e.g.
#059669) — colors the CTA buttons, score card, and accent elements
Without these the CheckUp looks “MSPercury-default” instead of “your brand”.
3. Customise intro text (optional)
Below the slug field there’s a disclosure “Intro text (optional, per locale)”. Three textareas — DE / EN / ES.
Left blank, MSPercury renders a sensible default with your workspace name. If you have specific sales copy (“Get an honest read on your IT in under 3 minutes from ACME IT — free, no commitment”), drop it here.
You can override only one locale and leave the others blank — the default kicks in only for the un-overridden ones.
4. Edit the question catalog (optional)
Go to /catalog/findings?tab=public-questions.
Out of the box the MSPercury-curated catalog (~26 questions across 5 categories) is seeded. On your first visit it gets cloned into your workspace table — from then on it’s yours.
Per-question editable:
- Stable key (internal, never renamed)
- Question + help text in DE / EN / ES
- Category dropdown
- Weight slider (Secondary / Standard / Critical)
- ↺ Risk-question toggle (for “Did you have an incident?” patterns where “yes” lowers the score)
- ↳ Follow-up parent picker (question only appears when the parent has a specific answer)
- ↑↓ reorder + delete + ”+ Question” per category
If you mess up: the “Reset to defaults” button at the top right (typed-RESET confirm gate) wipes your edits and reseeds the original.
5. Share the direct link or embed the widget
In the green block at /settings#publiccheckup you see two things:
A — Direct link (e.g. https://mspercury.com/check/your-shop)
Copy button next to it. Link from your email signature, LinkedIn bio, newsletter footer, business-card QR code, etc.
B — Iframe embed snippet for your marketing site:
<iframe src="https://mspercury.com/check/your-shop/embed"
style="width:100%;min-height:780px;border:0"
title="IT CheckUp" loading="lazy"></iframe>
Copy button to the right. Paste into wherever the CheckUp should live on your site. The embed endpoint is iframe-optimised (Content-Security-Policy: frame-ancestors *, X-Frame-Options: ALLOWALL) and carries the multi-step flow including PIN entry entirely INSIDE the iframe — the visitor never leaves your site.
Height tuning: 780px is enough for most steps. If you want to show the report or answer summary, that may need 900–1100px on some locales.
6. Add UTM tracking
Just append ?utm_source=…&utm_medium=…&utm_campaign=… to the iframe URL or direct link.
Examples:
- Newsletter:
…/check/your-shop?utm_source=newsletter&utm_medium=email&utm_campaign=q3-launch - Google ad:
…/check/your-shop?utm_source=google&utm_medium=cpc&utm_campaign=brand - LinkedIn bio:
…/check/your-shop?utm_source=linkedin&utm_medium=bio
MSPercury captures on first hit (first-touch) automatically via signed cookie:
utm_source,utm_medium,utm_campaign,utm_content,utm_termreferrerHost(the domain the click came from, when the browser sends the header)sourceUrl(full landing URL with query string)
First-touch wins: a returning visitor with a different UTM doesn’t overwrite the original channel. You see the values later on /leads/[id] in the “Source” card and as a “Top sources” strip on /leads.
7. The prospect’s experience
From the prospect’s POV:
- Landing → enter email → 6-digit code by email
- Enter code → 23 questions with live-score display + progress bar
- “About you” — 4 fields (company, industry, size, optional phone)
- Privacy checkbox → Submit
- Score reveal with maturity badge (🥇 Gold / 🥈 Silver / 🥉 Bronze / 🚨 Acute), position bar 0–100, score explanation, optional cross-tenant benchmark, per-category breakdown
- PDF report is sent by email (background)
From the operator’s POV: the lead lands in /leads as a new entry in the “New” column of the kanban, with all answers, score breakdown, industry/size, and the UTM/source attribution.
8. Lead-to-customer flow
On /leads/[id]:
- Pipeline status: New → Contacted → Proposal → Customer / Rejected
- ”✨ Draft outreach email” — AI builds you a personalised first-contact email (see Features → AI outreach drafter)
- ”→ Convert to customer” — turns the lead into a
customersrow, keeps the link viaconvertedCustomerId
Drag-and-drop: lead cards on /leads move between kanban columns by drag — status updates automatically.
GDPR / privacy notes
- On submit, MSPercury captures consent timestamp + IP + user agent (Art. 7 GDPR proof requirement)
- Lead data lives ONLY in your workspace DB (strict tenant isolation)
- Cross-tenant benchmark on the score page is the ONE documented exception — aggregate, anonymous, hard minimum sample size before any number is shown
- GDPR notice for your website: mention MSPercury processing in your privacy policy as a sub-processor (DPA template at
/legal/dpa)
Common gotchas
“Iframe doesn’t load / shows blank”: check your marketing site’s Content-Security-Policy header. If it has frame-src 'self', you need to whitelist https://mspercury.com.
“Verification email doesn’t arrive”: spam folder. MSPercury sends from noreply@mspercury.com with your operator name as display name — some filters score that as “phishing-like”.
“Lead score swings between tests”: reminder — follow-up questions can shift the score significantly. If a test lead answers “MFA = no”, the phishing follow-up appears; its answer feeds the score too.
“My lead isn’t in the list”: check the pipelineStatus filter or ?source=… filter on /leads. Both can compose — accidentally-active filters are the most common cause.