Skip to content

Job Scoring Guide

GoGetEm auto-scores every job on a 0-100 scale based on your match profile. This guide explains how scores work and how to tune them.

How it works

When you save or update your match profile (via /settings or the update_match_profile MCP tool), GoGetEm scores all unscored jobs in the background. New jobs are scored at startup and can be scored on demand via the auto_score_jobs MCP tool.

Each job gets a score from 10 weighted signals, then multiplicative penalties reduce the total if deal-breakers or mismatches are found. The floor is 5 — no job scores below that.

Signal breakdown

Signal Max pts What it checks
Skills 25 Word-boundary matching with synonym expansion. Strong skills = 3 pts, familiar = 2 pts, learning = 1 pt. Skills found in the job title get a 1.5x bonus.
Role type 15 Your role_types matched against the job title (15 pts) or description only (6 pts).
Remote fit 12 Job's work_model (remote/hybrid/onsite) vs your remote preference. Full match = 12, partial = 4-8, mismatch = 0.
Location 10 City/country proximity. Same city = max, same country = partial, no data = half credit.
Industry 8 Blocked industries score 0. Preferred industries score 8. Unknown = 5. No data = 4.
Seniority 8 Job level (entry/junior/mid/senior/staff/lead/principal) mapped to year ranges and compared against your experience. Graduated overlap scoring.
Salary 7 Job's max_amount normalized to annual EUR and compared against your salary.min. Meets minimum = 7, proportional below.
Job freshness 5 How recently the job was posted. <=7 days = 5, <=14 = 4, <=30 = 3, <=60 = 2, older = 1.
Nice-to-have 5 Bonus phrases found in description (2 pts each, capped at 5).
Search terms 5 Jobs found by multiple scrape profiles score higher (more overlap = more relevant).

Total possible: 100 points

Penalties

Penalties are multiplicative and stack independently. They reduce the total score after all signals are summed.

Penalty Multiplier Trigger
Deal-breaker x0.3 Any phrase from deal_breakers found in the job title or description.
Language mismatch x0.5 Job requires a language not in your identity.languages. Uses DeepL detection when available, falls back to keyword scanning.
Title avoid x0.5 Any keyword from title_keywords_avoid found in the job title.

Penalties compound: a job hitting both a deal-breaker and a title-avoid keyword gets x0.3 x 0.5 = x0.15. The floor is always 5.

Reading the reasoning text

Every scored job has a reasoning string. It looks like:

[auto-v2] skills:18/25(Python,Go,Docker*); role:15/15(backend); remote:12/12(full match); location:10/10(Berlin); industry:8/8(prefer:tech); seniority:6/8(overlap:senior(75%)); salary:7/7(meets min); fresh:5/5(3d); nice:2/5(remote-first); search:3/5(2 terms)
  • Each signal shows earned/max(detail)
  • * after a skill name means it was found in the job title (1.5x bonus)
  • ~ after a skill name means it was matched via synonym/implied skill
  • (desc) after a role type means it matched in the description, not the title
  • Penalties appear at the front: DEAL-BREAKER:phrase, LANG-MISMATCH:language, TITLE-AVOID:keyword

Improving your scores

If most jobs score low, tune your profile at /settings:

  1. Add more skills — especially to strong (3 pts each). The scorer uses synonym expansion, so "React" also matches "ReactJS", "Go" matches "Golang", etc.
  2. Broaden role types — add variations like "platform", "DevOps", "SRE" if those interest you.
  3. Adjust remote preferencepreferred is flexible (gives partial credit to onsite). required penalizes non-remote jobs.
  4. Lower salary minimum — if you're seeing lots of "below min" salary notes, your minimum may be filtering out otherwise good matches.
  5. Review deal-breakers — overly broad deal-breakers can tank scores unexpectedly. Use specific phrases.
  6. Check title-avoid keywords — "manager" avoids engineering manager roles too. Be specific.

Auto-scoring vs Claude scoring

  • Auto-scored jobs have [auto-v2] at the start of the reasoning text. This is the heuristic scorer built into GoGetEm.
  • Claude-scored jobs have reasoning written by Claude via the score_job MCP tool. Claude's score overrides the auto-score via upsert.
  • You can always re-score manually with Claude for jobs where the auto-score seems off.

When re-scoring happens

Trigger What gets scored
Server startup All unscored jobs (batches of 50, max 200)
Profile update All unscored jobs for the updated profile version
auto_score_jobs MCP tool All unscored jobs (batches of 50, max 200)
score_job MCP tool Single job (manual override)