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:
- Add more skills — especially to
strong(3 pts each). The scorer uses synonym expansion, so "React" also matches "ReactJS", "Go" matches "Golang", etc. - Broaden role types — add variations like "platform", "DevOps", "SRE" if those interest you.
- Adjust remote preference —
preferredis flexible (gives partial credit to onsite).requiredpenalizes non-remote jobs. - Lower salary minimum — if you're seeing lots of "below min" salary notes, your minimum may be filtering out otherwise good matches.
- Review deal-breakers — overly broad deal-breakers can tank scores unexpectedly. Use specific phrases.
- 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_jobMCP 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) |