I Built an Evergreen Job-Ad Detector for MyCareersFuture
Last month I sent a tailored CV to a recruiter for a CyberArk role on MyCareersFuture. Today that exact ad is still there. Same title, same $3,000–5,000 band, same “1 application” counter — but under a different posting ID.
That’s not a job listing. That’s a subscription.
The Pattern Has a Shape
Job boards in Singapore carry evergreen ads: postings kept alive indefinitely to harvest resumes, not to hire. You can’t prove intent from outside. You don’t need to. The observable facts are enough:
| Signal | Meaning |
|---|---|
| Multi-ID repost | Identical role + company seen under 2+ distinct posting URLs |
| Long-lived single ID | One URL still live 21+ days after first sighting |
Both are pure functions over scan history. No LLM required.
One Afternoon of Bash
My careerbot pipeline already records every listing observation with a date. So the detector is ~90 lines of Babashka on top of data that already existed:
bb farms # -> data/farms.jsonl + data/farms-report.md
It groups observations by company + normalized title, then flags the two signals above. Today’s run produced exactly one finding:
| Company | Role | IDs | Seen | Span |
|---|---|---|---|---|
| RECRUIT EXPERT PTE. LTD. | Cyber Security Engineer (CAT 1, CyberArk) | 2 | 22 Jul → 24 Aug | 33d |
Two different MCF URLs for one role, spanning a month, with my own application archive pinning the earlier end of that range.
Evidence, Not Accusations
The report deliberately says only what was observed: titles, dates, hashes. No “scam”, no “fake”, no allegations. Reposting a role isn’t illegal or even wrong — companies re-open searches all the time. But a repost velocity profile is something every job seeker deserves to see before they spend their 37th tailored cover letter on an ad that never closes.
The methodology section ships inside the artifact itself, so anyone can reproduce or refute it. That’s the whole game.
LLM-Friendly by Design
data/farms.jsonl emits one JSON object per finding —
schema flat, keys self-describing, methodology string embedded in every
record. Any agent (mine, yours, Google’s crawler) can ingest it without
asking questions. This site already publishes llms.txt; the
detector follows the same rule: make the evidence legible to
machines and the conclusions legible to humans.
What It Becomes
Right now the dataset has days of history, so it catches one pattern. Run daily, by December it answers better questions: which agencies repost most, median ad lifespan per source, how applicant counts reset between IDs. A transparency index nobody currently publishes.
Determinism first. The evidence accumulates while you sleep.
Takeaway: if a job ad feels immortal, timestamp it — twice.