02

Scanner · LLM · Audit

Job Fraud Scanner

Which WorkBC job postings are a genuine local hire — and which exist for other reasons?

RoleSolo — design & build
Year2026
StackNext.js · Postgres · Claude
StatusLive
job-fraud.up.railway.app
Scored job postings with risk score badges and fraud-signal flags
Every posting scored, filterable by risk band and job-type category, with the fraud signals that drove each score.

01 Problem

WorkBC is British Columbia's public job board, but not every posting is a real local opening. Some are credential-harvesting fronts, brand impersonations that route applicants to a host that isn't the named employer, or ghost ads that exist for reasons other than hiring. I wanted an honest, evidence-backed read on how many postings actually look like a genuine attempt to hire locally — not a vibe, but a score I could defend. The scanner started with software postings and has since grown to the whole board.

02 Approach

A scraper pulls the postings; each one is scored by an LLM judge (Claude Haiku) against explicit fraud signals rather than gut feel: generic email domains, an apply-host that differs from the stated employer (brand impersonation), businesses that can't be verified, and NOC job-type mismatches.

Crucially, every verdict keeps a web-search audit trail at an unlinked /audit/<token> URL, so any score can be inspected after the fact — the judge has to show its work. An /analysis page rolls the whole corpus up into elevated-risk rates by job type, counting companies once (by their worst posting) so a few large legitimate employers don't mask how many distinct companies look suspicious.

job-fraud.up.railway.app/analysis
Elevated-risk rate by job type, comparing company-level and posting-level rates
Elevated-risk rate by job type — company-level vs posting-level, so volume doesn't hide concentration.

03 Tech stack

Frontend

Next.jsReactTailwind

Backend

Next.js APIPrismaPostgresAnthropic SDK (Claude Haiku)PlaywrightZod

Infrastructure

Railway

04 Outcome

16,785

WorkBC postings scored — the whole board, continuously refreshed

7.7%

of postings flagged elevated-risk — 20.2% of 3,877 companies

The full WorkBC corpus is scored and continuously refreshed, and every score is auditable — the point was never to accuse, but to make the signal inspectable. The framing throughout is “automated screening signals, not verdicts.”