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.