Skip to content
Esc
Internships in Canada
New-grad roles in Canada
Remote roles
Roles that show pay
Postings at high ghost risk
PayWhat student tech roles in Canada pay
Check a linkPaste a posting to see its real age and ghost risk
JobsEvery open tech role
CompaniesWho fills fastest, who leaves postings up
Hiring calendarWhen employers open intern and new-grad roles
Skills gapWhat postings ask for that you don't have
Your resumeScore and fixes
Your matchesOpen roles ranked by your resume
ApplicationsSaved, applied, interviewing, offers
SettingsTheme, text size, motion
How it works

↑ ↓ to move, Enter to open? every shortcut

Keyboard shortcuts

CtrlKor/
Search employers, postings and pages
JorK
Next or previous posting in a list
O
Open the posting's page
Enter
Open it in the preview, on wide screens
S
Save or unsave it
?
This list
Esc
Close

How Ghostless works

Job sites show a posting date that resets every time a role is reposted. Ghostless keeps its own record of every posting instead, and the signals come from that record.

Where the postings come from

Every day, Ghostless reads the public career sites of the employers it tracks, the same pages you would visit yourself. It follows each site's robots.txt rules, identifies itself, and slows down when a site asks it to. Sites that prohibit automated collection are left out, which is why Meta isn't included.

The list of employers grows by itself. Each day Ghostless also reads public internship and new grad lists that students keep on GitHub, such as SimplifyJobs. When a posting there links to a Greenhouse, Lever, Ashby or Workday job board Ghostless doesn't read yet, that board is added and read from then on, a batch each day, so every company is revisited every few days. Large Workday employers are searched for internships, co-ops and new grad roles. Until a company's own board is read, its postings appear as the list shows them: title, places and season, with a link to apply.

LinkedIn isn't read: its terms and robots.txt forbid automated collection. Most LinkedIn postings for tech roles are copies of a posting on the employer's own career site, which is where Ghostless reads them.

Every job links to the employer's original posting. You always apply on their site.

Resume match scores

A match score reads the whole posting and your whole resume, not just a skills section. The posting is split into what it requires, what's nice to have, the duties and the boilerplate (benefits, company blurb), which is ignored. From that come its must-have and nice-to-have skills (“React, Angular or Vue” is one requirement that any of the three meets), the years of experience and degree it asks for, and whether you must be in school.

  • Must-have skills, 30 points. A skill shown in a job or project counts fully; one only named in a skills list counts less, and so does one your resume implies without naming (PostgreSQL for SQL).
  • Nice-to-haves, 10 points.
  • Experience, 30 points: your career stage and years against what it asks for, and each job on your resume read the way a hiring manager reads it: was it this kind of work, using the skills this posting asks for, at an employer whose name means something (a top tech or trading firm, a major bank, a large public employer), in the same industry as this employer, how long and how recently. Your best few jobs count most. An employer nobody recognizes is neutral, never a minus.
  • Education, 10 points: degree, field, and being enrolled when it's required.
  • Location, 10 points: in your area or remote in your country counts fully; another city counts less.
  • Role and title, 10 points: how much of your resume is this kind of work.

Some requirements rule a job out whatever your skills, and the score says so: a job in another country that isn't remote from yours (unless you're a student looking at an internship or new grad role abroad), a security clearance, citizenship, no visa sponsorship, or a required PhD. Each caps the score and names the reason. Scores of 72 and up read as a strong fit, 38 and up as okay.

With no job picked, your resume page compares it with real open postings for what you're looking for, names that set, and shows the typical score across it. The fixes it lists are separate: how well your resume is written, for your career stage, whatever job you apply to. Filler doesn't help: near-identical bullets count once.

“Words to add” only ever suggests a skill the posting asks for when your resume already shows related work, and says which. Requirements with no sign of them on your resume are listed separately, as things to learn: never words to type in.

A role meant for a different career stage, like a senior role for a student, is capped however well the skills match. Every requirement is listed on the job's page as met, partly met or missing, with what to change. Match scores are rule based, free and run on Ghostless's own server. The one exception is optional: if you press “Get a detailed AI review” on a job, your resume text and that posting are sent to Anthropic to write the review. Nothing is sent unless you press it.

True posting age

The first time Ghostless sees a posting, it records the date. That date never changes, even when the employer's site shows a fresher one. Postings that were already up when Ghostless began watching an employer are shown as “open at least” that many days, because their real start is earlier.

Ghost signals

A ghost job is a posting that isn't backed by a real plan to hire soon. No outside data can prove that, so Ghostless looks for evidence instead. Each posting gets one of three levels:

  • No flags: none of the signals below.
  • Some flags: one signal.
  • High ghost risk: two or more signals, or the employer says it isn't a real vacancy.
Employer says: not for an existing vacancy
Since January 1, 2026, Ontario requires employers with 25 or more staff to say whether a public posting is for an existing vacancy. Ghostless flags a posting only when it says this about itself, such as “This posting is not for an existing vacancy” or “This is an evergreen requisition”, and quotes that sentence on the job's page so you can check it. A job duty like building pipelines for future hiring needs doesn't count. This flag alone makes a posting high risk, because the employer is telling you it isn't a specific opening.
Reposted
Ghostless fingerprints every posting by its title, location and description, with requisition numbers and dates removed. When a posting disappears and the same role reappears under a new listing, the new one is linked to the old one. Large employers post many different roles with the same title, so the description has to match too.
Duplicate listing
Two or more live listings at the same company have the same title, the same locations and the same description at the same time. The same role posted for different cities isn't a duplicate, and listings without a description are never compared, because title and city alone can't tell different teams apart.
Open unusually long
A posting is flagged when it has been open more than 60 days and more than twice as long as that employer usually takes for that kind of role. The usual time is the median for postings Ghostless has watched open and close, and needs at least five of them.

Signals are evidence, not verdicts. A long-open role can be genuinely hard to fill, and a reposted role may have reopened after a hire fell through.

Pay and vacancy disclosures

Ontario's job posting rules also require a pay range of at most $50,000 and a statement about whether AI is used to screen applicants. Ghostless reads these from the posting text and quotes the sentence it read them from. When the text doesn't say, the page says so rather than guessing. Some employers, Stripe among them, add pay only on their own careers site rather than in the posting data Ghostless receives, so check the original posting before ruling a job out.

Known limits

  • Google only allows the first page of each search to be read, so its coverage is partial.
  • Apple and Shopify don't publish full descriptions in their listings, so their skills are incomplete.
  • Banks and other large employers on Workday need one request per posting for its description, so new postings' descriptions arrive in batches over a few daily runs.
  • Levels, roles and skills are detected with rules. Unusual titles can be misread.
  • Postings known only from a job list have no description, so they aren't scored: they say “Not scored” everywhere and come after the scored ones.

Spotted a mistake? .