We open it in a real browser, read the page, and tell you whether it is safe to shorten. It usually takes 15–30 seconds.
▾ More options
The check could not run
{{ scanError }}
Check the link is complete (including https://) and try again. If it keeps failing, tell an engineer what you pasted.
What you will get back
- One clear answer — safe to shorten, risky, do not shorten, or "a person needs to decide".
- A picture of the page as it really rendered, so you can see what the customer would see.
- The reasons, folded away underneath — open them only when you need them.
Past checks
Every link checked, newest first. Click a row to see the full answer again.
| Answer | Score | Link | Actions |
|---|---|---|---|
| {{ fx.words(r.verdict) }} | {{ r.abuse_score }} |
{{ r.final_url || r.url }}
{{ r.category }}
|
Delete this record? |
Links waiting for a person
The checks could not settle these on their own. Open one, look at the page and the reasons, then decide.
- Safe and Not safe both teach the system — the page is remembered as an example.
- I can't tell closes the item and deliberately teaches nothing. Use it when the page genuinely cannot be judged: a guess would be learned as if it were fact.
The second-opinion model, measured against people
{{ rev.agree.trust === 'authoritative' ? 'Counted in the answer' : 'Advisory — changes nothing' }}Measured over {{ rev.agree.comparable }} decisions. Before anyone promotes this model to counting in the answer, the number that matters is "said safe, people said unsafe" — that is the column that publishes a bad link.
| Answer so far | Score | Link | Status |
|---|---|---|---|
| {{ fx.words(r.verdict) }} | {{ r.abuse_score == null ? '—' : r.abuse_score }} |
{{ r.url }}
waiting since {{ fx.when(r.created_at) }}
|
waiting {{ fx.decisionWord(r.decision) }} |
What people have taught the system
Nothing is learned automatically. A page is only remembered when a person confirms it here or in a review. There is one entry per link, so confirming again replaces the old entry rather than adding a second one.
| Taught as | Link | Actions |
|---|---|---|
|
{{ l.label === 'fraud' ? 'Fraud' : 'Safe' }}
{{ l.fraud_family }}
|
{{ l.url }} |
Forget this example? |
Threat feeds
Lists of known-bad links and known-popular domains. A feed that quietly stops updating makes every check worse, so its age is shown here.
| Feed | State | Entries | Last updated | Problem |
|---|---|---|---|---|
| {{ f.name }} | {{ f.status || 'never run' }} out of date | {{ (f.items || 0).toLocaleString() }} | {{ f.lastRunAt ? fx.when(f.lastRunAt) : 'never' }} | {{ f.error }} |
- Cloudflare Radar
- {{ intel.data.radar && intel.data.radar.configured ? 'connected' : 'not connected' }}
- Radar budget
- {{ intel.data.radar.used || 0 }} of {{ intel.data.radar.monthly_cap }} used this month · {{ intel.data.radar.remaining || 0 }} left
Always-safe and always-blocked domains
A decision pinned by hand, for when waiting on a code change is not an option. It applies to the whole domain, so use it sparingly.