Inspiration

Every week, young Kenyans are offered jobs abroad on WhatsApp: housemaids in Saudi Arabia, drivers in Qatar, farm workers in Canada. Many of these offers are scams. The "agency" asks for a registration fee, sends a forged NEA certificate, puts people on visitor visas, or in the worst cases recruits them into war zones.

The government's advice is simple: check that the agency is on the National Employment Authority (NEA) register before you pay. Almost nobody does. The register is a long web table, scammers copy real agencies' names and licence numbers, and the other warning signs (fees for unskilled jobs, visitor visas, pay that's too good) aren't widely known. We wanted that check to take ten seconds, work on a phone, and be shareable back into the group chat where the ad came from.

What it does

Paste a job ad or WhatsApp forward, or upload a screenshot. Kazi Halali gives one of three verdicts: Do not pay, Be careful, or No red flags found. With it you get:

  • every reason, ranked by severity and linked to its source (NEA register, government notices, news reports, salary data);
  • what to do next, including the NEA hotline;
  • the whole result in English and Kiswahili;
  • a share link to send back to the WhatsApp group, so one check protects everyone who saw the ad.

It checks the agency against all 1,295 agencies on the real NEA register (exact name, licence number, lookalike names) and checks whether the ad's email and website match the agency's registered ones. Copying a real agency's name is easy; receiving mail at its registered address isn't. It also runs live web checks, all at once, for official government warnings, public fraud reports and typical pay for the job.

How we built it

Models read, rules decide. The language models never choose the verdict. They read messy ads and screenshots in English, Kiswahili and Sheng, and explain the result. The verdict comes from a deterministic rules engine in Go, where every rule cites an official or reported source. Verdicts are reproducible and unit-tested, and a model can't hallucinate a red flag.

NVIDIA Nemotron on Nebius Token Factory runs every model step:

  • Nemotron 3.5 Super VL reads screenshots and certificate photos.
  • Nemotron 3 Nano 30B extracts structured facts as JSON (agency, licence number, destination, job, salary, fees, visa type, contacts, pressure cues) and reads salary figures from search results.
  • Nemotron 3 Super 120B writes the plain-language explanation.

Every result shows which model ran each step, with timings.

Tavily runs three live checks in parallel: a search restricted to Kenyan government domains for official warnings; typical pay for the job and country (Nemotron reads the figures, Go converts currency and computes the ratio, and a figure counts only if the model cites a URL we actually sent it); and public fraud reports mentioning the agency's name or phone number.

Stack: Go API, Next.js + Tailwind web app, deployed on Render and Vercel. If a model call fails, the API falls back to a regex extractor and checked template text, so a user always gets an answer.

Challenges we ran into

  • Testing against real companies without accusing them. One check linked a real, licensed agency to "fraud reports" because a business-directory page about it had "Report a listing that may be fake" in its menu. We now ignore directory sites and strip site boilerplate before matching. A tool like this must never wrongly accuse a real business.
  • A register that goes stale. The NEA register can lag months behind renewals, so a missing or expired agency gets a warning that shows the register's dates, never a "Do not pay" on the register alone.
  • Kiswahili quality. We compared Kiswahili from Nemotron Super and Ultra, with and without reasoning. Each version made errors a Kenyan reader would notice, some of which changed the meaning of the warning. For safety advice that isn't acceptable, so the model writes the English and the Kiswahili comes from checked text that still names each ad's findings.
  • Latency. Reasoning mode roughly doubled response times, and the vision model returned empty answers with it on. Turning thinking off fixed both.

Accomplishments that we're proud of

  • 6/6 correct verdicts against the real NEA register, with every step run by Nemotron on Token Factory: all 4 impersonation scams caught, and 0 false alarms on the 2 genuine offers.
  • Catching impersonation of real, licensed agencies, the scam a simple "is it on the list?" check misses.
  • Every finding links to its source, and no verdict depends on a model's opinion.

What we learned

  • Splitting the work between models that read and rules that decide gives you an AI product you can test, and that's easier to trust.
  • Real data finds bugs synthetic data hides: duplicate listings, shared licence numbers, placeholder phone numbers, directory boilerplate.
  • For a safety tool, deciding what not to say (no accusations from stale data, no unchecked Kiswahili) matters as much as what to say.

What's next for Kazi Halali

  • A WhatsApp bot: forward the ad, get the verdict in the same chat.
  • Load official deregistration notices automatically, and refresh the register daily.
  • Add Uganda's and Tanzania's registers, since the same scams target the whole region.
  • Work with NEA and the State Department for Diaspora Affairs on a reporting loop, so new scams reach official warning lists faster.

Built With

Share this project:

Updates

Submission history