AI Job Search & Fit Scorer — 10 Sources + V3 Matching avatar

AI Job Search & Fit Scorer — 10 Sources + V3 Matching

Pricing

$20.00 / 1,000 retained job fit results

Go to Apify Store
AI Job Search & Fit Scorer — 10 Sources + V3 Matching

AI Job Search & Fit Scorer — 10 Sources + V3 Matching

All-in-one developer job search and fit scoring: search 10 public sources or score your own jobs against a résumé or profile. Get a gate-aware shortlist with fit evidence, skill gaps, hard-requirement checks, and application links.

Pricing

$20.00 / 1,000 retained job fit results

Rating

0.0

(0)

Developer

Nomad Dev

Nomad Dev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Share

Turn one résumé or structured profile into a ranked, source-linked shortlist of developer jobs. One run can search and deduplicate 10 public job sources, apply evidence-gated fit scoring, and return both a raw 0–100 fit and a safer 0–5 actionability score. You can also skip search and score normalized jobs you already have.

No model key is required. In the default shortlist mode, each returned match costs $0.02; scored jobs below the delivery threshold and trustworthy empty searches have no result-event charge.

This is an independent, unofficial search integration. It is not affiliated with or endorsed by LinkedIn or any source-site operator. Review source terms, privacy requirements, and applicable law for your use case.

What you can build

  • A personal job shortlist: search current developer roles and see why each returned job fits and what is missing. Switch to Audit to inspect blocked or held jobs.
  • A career-product matching step: add an inspectable job-versus-candidate score to a job board, coaching workflow, or internal research tool.
  • A scored job tracker: send stable, deduplicated evaluations to Google Sheets through the supplied n8n or Make starters.
  • An agent tool: let an MCP client run a bounded search, inspect exact-run evidence, and read the result dataset.
  • A batch-scoring API: submit your own nomad-agent-job-v1 records from an upstream Actor run or dataset.

The Actor is stateless. Scheduling, alerts, application actions, user history, and destination writes belong in your downstream workflow.

Why use this Actor

  • Search and fit scoring in one run: no paid child Actor runs or stacked source fees.
  • Two scores with different jobs. Raw fit measures role similarity; the 0–5 delivery score is reduced by explicit contradictions such as work mode, location, language, authorization, seniority, or role family.
  • Evidence, not just a number. Every row includes a short rationale, gaps, blocking gates, static decision, model receipt, source provenance, and stable hashes.
  • Bounded by design. Cap jobs, AI verdicts, concurrency, and total Actor charge. A fixed owner-provider circuit breaker stops further AI work rather than allowing unbounded spend.
  • Automation-safe identity. Upsert candidate/job evaluations by matchKey; preserve evaluationKey as the receipt for the exact content and scoring run.

Quick start: add your candidate evidence

The fresh Apify Console form contains a bounded three-source search and evaluates at most three jobs (at most $0.06 in result-event charges), but it deliberately does not invent candidate evidence. Add exactly one of candidateProfile, resume, or resumeText before running. Missing candidate evidence fails before any source is searched or any paid work begins.

The structured-profile example shown in the input help is illustrative only; it is never inserted into a new run. Replace its values with evidence-backed facts if you copy it.

For a one-result first run, keep Search + score, select one source, set Maximum jobs to 1, and use an evidence-backed structured profile:

{
"mode": "search",
"search": {
"sources": ["linkedin"],
"keywords": ["platform engineer"],
"location": "Madrid",
"postedWithinDays": 14,
"maxItemsPerSource": 1
},
"candidateProfile": {
"primaryRole": "Platform Engineer",
"targetTerms": ["Platform Engineer", "Backend Engineer"],
"skills": ["Python", "PostgreSQL", "Docker"],
"seniorityLevels": ["mid"],
"remoteLocations": ["Spain", "European Union"],
"hybridLocations": ["Madrid, Spain"],
"onsiteLocations": [],
"workArrangementPreferencesComplete": true
},
"maxItems": 1,
"resultMode": "shortlist",
"minDeliveryScore": 2,
"aiConcurrency": 1
}

Replace the example with facts supported by the candidate's evidence. Leave an unknown field empty instead of guessing. The complete three-source example is in examples/search-input.json.

Score jobs you already have

Set mode to score-jobs, provide exactly one candidate source, and choose one job source:

  • jobs: inline nomad-agent-job-v1 records;
  • sourceDatasetId: an existing Apify dataset, read only;
  • sourceActorRunId: one exact terminal successful Actor run. Add expectedSourceBuild when you need an immutable upstream-build check.
{
"mode": "score-jobs",
"sourceDatasetId": "YOUR_DATASET_ID",
"candidateProfile": {
"primaryRole": "Data Engineer",
"targetTerms": ["Data Engineer", "Analytics Engineer"],
"skills": ["Python", "SQL", "dbt"],
"remoteLocations": ["European Union"],
"hybridLocations": [],
"onsiteLocations": [],
"workArrangementPreferencesComplete": true
},
"maxItems": 25,
"resultMode": "shortlist",
"minDeliveryScore": 2
}

See examples/inline-input.json for a complete inline job record.

Candidate inputs

Choose exactly one:

  • candidateProfile: structured, evidence-grounded facts and preferences;
  • resume: a text-based PDF or TXT uploaded in the Apify UI;
  • resumeText: plain text for API clients.

preferences can add explicit role, location, work-mode, language, contract, or other constraints. The Actor does not invent a search query from a résumé; search.keywords remains required in search mode.

Search sources

Input keyPublic source
linkedinLinkedIn public job pages
remote_boardsRemote job boards
builtinBuilt In
justjoinitJust Join IT
nofluffjobsNo Fluff Jobs
hackernewsHacker News “Who is Hiring?”
ycombinator_wasY Combinator Work at a Startup
wttjWelcome to the Jungle
infojobsInfoJobs
tecnoempleoTecnoempleo

The default selects LinkedIn, remote boards, and Just Join IT. Cross-source merging is fair, normalized records are deduplicated before scoring, and full job-description evidence is required.

Filter support varies. Location is native only on some sources; Built In and No Fluff Jobs use developer categories instead of native keyword search. A strict remoteOnly search excludes hybrid and unknown arrangements. The exact per-source result and supported-filter evidence is recorded in RUN-SUMMARY.

Understand the two scores

The Actor uses FindJobs scoring v3:

  1. deterministic checks classify hard contradictions, recoverable uncertainty, and plausible candidates;
  2. eligible jobs receive a pinned AI verdict with a raw fitScore from 0–100;
  3. hard gates can clamp the separate deliveryScore from 0–5;
  4. rows are ordered by delivery score first, then raw fit.

Use fitScore to understand similarity. Use deliveryScore, recommendation, and blockingGates to decide whether a match is actionable. An attractive skills overlap cannot hide a known hard constraint. AI failure is reported as ai_failed, never silently converted to a zero score.

Choose shortlist or audit output

resultMode controls what reaches the dataset and the result-event meter:

  • shortlist (default) returns only rows with evaluationStatus: "scored" and deliveryScore >= minDeliveryScore. The default threshold is 2, and equality counts. Filtered scores, static drops, holds, and failures are not returned or charged.
  • audit preserves the complete evaluation dataset: scored rows, static drops, static and forward-cap holds, and ai_failed rows. This keeps the previous billing behavior: every retained row except ai_failed is charged. minDeliveryScore is recorded but does not filter Audit output.

Use the gate-adjusted deliveryScore for shortlist delivery. A high raw fitScore can coexist with a low delivery score when a hard requirement is contradicted. minRankToForward is different: it controls which jobs reach AI after static screening, not which completed scores are returned.

Output

Each returned dataset row follows nomad-ai-job-fit-v1. In Shortlist mode all rows are successfully scored and meet the delivery threshold; in Audit mode the same schema also represents drops, holds, and failures. This is a compact excerpt; the actual row preserves the normalized job, gates, static decision, scoring receipt, provenance, and content hashes:

{
"schemaVersion": "nomad-ai-job-fit-v1",
"jobKey": "linkedin:1234567890",
"fitScore": 82,
"deliveryScore": 4,
"recommendation": "strong",
"evaluationStatus": "scored",
"title": "Platform Engineer",
"company": "Example Labs",
"location": "Madrid, Spain",
"blockingGates": [],
"why": "Strong role and Python platform overlap.",
"gapSummary": "Kubernetes depth is not explicit.",
"url": "https://www.linkedin.com/jobs/view/1234567890"
}

matchKey is the stable candidate-plus-job destination key. evaluationKey changes with the exact candidate snapshot, job content, scoring contract, or evaluation time.

The default key-value store also contains RUN-SUMMARY with schema nomad-ai-job-fit-run-summary-v4. It records source outcomes, result policy, warnings, candidate hashes (not résumé text), model/provider usage, billing receipts, and the terminal reason. Its counts always include staticDropped, staticHeld, aiScored, aiFailed, resultFilteredOut, and outputRows, even when no row is returned. A consumer should reconcile that summary with the exact run and dataset before writing results downstream.

API example

This one-result call pins an immutable build and caps the result charge at $0.02:

curl --request POST \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header "Content-Type: application/json" \
--data @examples/search-input.json \
"https://api.apify.com/v2/actors/nomad-agent~ai-job-fit-scorer/runs?build=0.1.12&waitForFinish=120&maxItems=1&maxTotalChargeUsd=0.02"

Always keep the returned run ID. Continue only after that exact run is SUCCEEDED with exit code 0 and build 0.1.12; then read its defaultDatasetId and RUN-SUMMARY. Storage metadata can settle just after a run finishes, so boundedly re-read the same run and storages when counts or charge receipts have not reconciled yet. Never substitute “last run” state.

Ready-made integrations

The public, credential-free starter pack pins an exact live-verified runtime build; inspect its evidence manifest before repinning:

The files are inactive and contain no credentials. Local contract validation and live Actor proof do not prove a user's n8n, Make, Zapier, or Google Sheets destination; test a disposable destination before enabling a schedule.

Pricing and limits

Result modejob-fit-result is charged whenPrice
shortlist (default)A scored row meets minDeliveryScore and is returned$0.020/returned match ($20 per 1,000)
auditA complete evaluation row is retained; ai_failed is never charged$0.020/retained non-failure row ($20 per 1,000)

Examples: one charged row is $0.02, 25 are $0.50, and 100 are $2.00. There is no separate search, résumé, run-start, or model-key fee. In Shortlist mode, scored rows below the threshold, drops, holds, and ai_failed rows are uncharged. Trustworthy empty searches, all-source failures, and work excluded by the total-charge gate also have no result-event charge.

The owner-funded provider route is capped at $0.20/M prompt tokens and $1.20/M completion tokens, allows at most two provider attempts per logical AI call, and has a fixed $0.25 circuit breaker per run.

The Actor caps a run at 200 unique evaluations, AI concurrency at 8, source concurrency at 10, résumé uploads at 5 MB / 50 pages / 8,000 readable characters, and job-description evidence at 20,000 characters. The owner-provider circuit breaker can turn later AI-dependent rows into unbilled ai_failed results when its reserved envelope is exhausted.

Caveats and failure behavior

  • Public sites can change, rate-limit, block, or omit fields. One source can be partial while other sources still return usable rows.
  • A source teaser is not accepted as a full job description. Supplied jobs over the description limit fail validation; searched descriptions may be explicitly truncated and marked.
  • A validated zero-row source is a clean empty outcome. Unverified empties, all-source failure, or only invalid/incomplete records fail rather than pretending the search was clean.
  • Search caches source responses for the configured TTL. Set cacheTtlSeconds: 0 when a canary must force a fresh source request.
  • Duplicate source identities with conflicting supplied content fail closed.
  • maxTotalChargeUsd limits how many jobs can be evaluated before scores are known. A low charge cap can therefore bound the evaluated prefix even when some later results would have been filtered and uncharged in Shortlist mode.
  • The Actor evaluates one candidate per run and does not learn from clicks or previous runs.
  • Scores are decision support, not facts about a person or a substitute for reviewing the source posting.

Privacy and responsible use

  • Only public job pages are in scope. The Actor does not use user cookies, borrowed accounts, login/paywall bypasses, or CAPTCHA evasion.
  • Résumés are processed in memory and are not written as a separate dataset or copied into every fit prompt. The original Actor input/upload remains subject to Apify retention controls.
  • Extracted candidate evidence and fit prompts are sent through the configured OpenRouter/OpenAI route with provider data collection denied. No zero-data-retention claim is made.
  • File URLs are restricted to Apify upload hosts; arbitrary URL fetching is rejected.
  • Dataset and upstream-run inputs are read only. The Actor never applies to a job, changes source data, or makes an automated hiring decision.

Verify the source posting and keep a human responsible for application and hiring decisions.