Skip to main content

What Makes Recruitier’s Job Search Different

Most recruitment platforms rely on simple keyword matching. You type “Python developer” and only see listings that contain those exact words. Recruitier takes a fundamentally different approach by combining semantic understanding with keyword matching to deliver results that truly match what you are looking for. When you search for “Python developer,” Recruitier does not just look for those words. It understands that this role involves backend engineering, scripting, frameworks like Django and FastAPI, database experience, and related competencies. This means you also see relevant listings titled “Backend Engineer,” “Software Developer,” or “Data Engineer” — jobs that a traditional keyword search would miss entirely.
Semantic search understands the meaning behind your query, not just the words. This is why a search for “Frontend Developer” also surfaces jobs titled “UI Engineer” or “React Developer” — they describe the same role using different terminology.

Three Search Modes

Recruitier offers three distinct search modes, each suited to different use cases. The default mode is Hybrid, which gives you the best of both worlds.
ModeDescriptionBest For
Hybrid (Default)Combines semantic understanding with keyword precision using Reciprocal Rank Fusion (RRF). Results are scored across both engines and merged.General-purpose searching where you want both meaning-based and exact-term matching.
Semantic OnlyUses vector embeddings exclusively. Finds jobs based purely on meaning similarity.Exploratory searches where you want to discover roles described with different terminology.
Keyword OnlyUses BM25 text matching exclusively. Finds jobs that contain your exact search terms.Precision searches where you know the exact terms employers use, such as specific certifications or niche technologies.
The Hybrid mode is recommended for the vast majority of searches. It ensures you do not miss semantically relevant jobs while still rewarding exact keyword matches with a scoring bonus. Switch to Semantic Only or Keyword Only when you have a specific reason to do so.

How Jobs Are Sourced

Recruitier continuously scrapes job listings directly from company career pages across the Netherlands. Unlike job boards that rely on employers to manually post listings, Recruitier proactively discovers jobs at their source. This means you often find opportunities before they appear on mainstream platforms. The scraping pipeline works around the clock:
  1. Discovery — Recruitier’s scrapers visit thousands of Dutch company websites and career pages to identify new job postings.
  2. Extraction — Each listing is parsed to extract structured data: job title, location, experience level, job type, flexibility options, salary information, and the full job description.
  3. Enrichment — The platform links each job to its parent company record, pulling in company details like industry, employee count, LinkedIn profile, and website.
  4. Indexing — Jobs are converted into vector embeddings and indexed for both semantic and keyword search, making them instantly searchable.
Recruitier refreshes its job data continuously. New listings are typically indexed within hours of being published on a company’s career page. Jobs that are no longer available are automatically marked as expired.

The Search Database

The Recruitier search database contains tens of thousands of active job listings from Dutch companies. Each listing includes:
  • Job title and full description (with markdown formatting)
  • Location with geocoded coordinates for radius-based filtering
  • Experience level (junior, medior, senior, lead)
  • Job type (full-time, part-time, contract, temporary, internship)
  • Flexibility (remote, hybrid, on-site)
  • Salary range when available
  • Company information including name, industry, employee count, and LinkedIn profile
  • Posting date for recency filtering (detected from multiple sources: JSON-LD structured data, LLM extraction, HTML metadata, visible text patterns, URL patterns, sitemaps, or the date Recruitier first discovered the listing)
  • Requirements summary extracted by AI
  • Contact information including emails, phone numbers, and LinkedIn profiles of decision makers
  • “Geen acquisitie” detection — a flag indicating the company does not want recruiter outreach
This rich structured data powers both the search filters and the AI-powered ranking that makes Recruitier’s results so precise.

The Search Workflow

Using Recruitier’s job search follows a clear, guided workflow:
1

Create a Search

Use the 4-step search wizard to define what you are looking for. Enter a job title, review AI-extracted skills, set your filters, and configure preferences like salary range and company size.
2

Review Results

Recruitier processes your search asynchronously and presents a ranked list of matching jobs. Each result includes a relevance score, job details, and company information. Sort, filter, and explore the results to find the best opportunities.
3

Save and Organize

Save the most promising jobs to your collection. Apply tags, add internal notes, and track your outreach progress. Your saved searches are stored for easy access later.
4

Monitor for New Matches

Saved searches are automatically monitored. When new jobs matching your criteria are posted, Recruitier notifies you and adds them to your search results so you never miss an opportunity.

Search vs. Saved Jobs

It is important to understand the distinction between searches and saved jobs in Recruitier:
ConceptDescription
SearchA set of criteria (job title, skills, filters) that you define. Recruitier runs this against the database and returns ranked results. Searches can be re-run, cloned, and monitored for new matches.
Saved JobsIndividual job listings that you have collected from search results or client pages. These live in your Jobs collection where you can tag, annotate, and track them.
A single search can produce hundreds of results. You then selectively save the ones worth pursuing into your Jobs collection for further action.

Boolean Search Support

Recruitier supports boolean operators in the job title field to help you cast a wider net for roles that could be described with different titles. How it works:
  • Use or between terms to search for multiple variations: "python developer or backend engineer"
  • Each combination generates a separate search query to the recommendation engine
  • Results from all queries are merged and deduplicated, so you never see the same job twice
  • The final result set contains the best matches from all query variations
Boolean search with or is particularly useful for roles that go by multiple names. For example, "data engineer or data platform engineer or analytics engineer" captures all common titles for this type of role in a single search.

Search Sources

Every search has a source that indicates where it originated. This helps you track how your searches were created:
SourceDescription
RecommendationCreated through the standard search wizard using the recommendation engine.
LinkedInCreated from LinkedIn job data or candidate profile matching.
IndeedCreated from Indeed job data.
The source is displayed on the search card in your saved searches list and on the search detail page.

Key Features at a Glance

AI Skill Extraction

Enter a job title and AI automatically identifies the relevant skills, technologies, and competencies to improve your search accuracy.

Hybrid Search Engine

Combines vector-based semantic search with BM25 keyword matching for results that balance meaning and precision.

Real-Time Processing

Searches are processed asynchronously with live status updates so you always know what stage your search is in.

Monitored Searches

Your searches are continuously monitored. New jobs matching your criteria are flagged automatically, keeping your pipeline fresh.

Advanced

Search Entity Architecture

Under the hood, each search you create is stored as a search entity with a comprehensive set of fields that drive the entire search pipeline:
  • Core identifiers: name, description, and extra_keywords that define what you are looking for
  • Filter arrays: experience_level, job_type, flexibility, and “when” (recency) are stored as JSONB arrays, allowing multi-select for each filter dimension
  • Location data: city name, latitude, longitude, and radius_km for geocoded radius filtering
  • Source tracking: whether the search originated from LinkedIn, Indeed, or the recommendation engine
  • Boolean type: AND or OR logic for combining search terms
  • AI search flag: marks whether AI-enhanced search features were used
  • Monitoring state: is_monitored tracks whether the search watches for new jobs, and new_jobs_count tracks how many unreviewed matches have been found
  • Candidate linking: candidate_id connects a search to a specific candidate profile for CV-based matching
  • Pagination: pages controls how many pages of results to retrieve from the recommendation engine

How Search Connects to Other Features

The search system is the entry point to several downstream features:
  1. Job collection — Search results populate your personal job collection. Each result becomes a Job entity linked to both the search and the underlying ScrapedJob record.
  2. Contact discovery — When results are returned, Recruitier enriches each job with contact information from the parent company, enabling outreach directly from search results.
  3. Candidate matching — Searches can be linked to a candidate profile. When a candidate_id is present, the search criteria are tailored to that candidate’s skills and experience, and results are presented in the context of that candidate’s profile.
  4. Monitoring pipeline — Monitored searches feed into a background job that periodically re-runs the search criteria against newly indexed jobs, delivering real-time notifications via SSE (Server-Sent Events) when new matches are found.
  5. Cloning and collaboration — The search entity supports cloning to other users within the same agency, copying all jobs, contacts, and metadata.

Power-User Tips

If your initial search returns fewer results than expected, try these approaches:
  • Use boolean OR to include alternative job titles
  • Reduce the number of confirmed skills to the 3-4 most essential ones
  • Widen the location radius or remove the location filter entirely
  • Expand the “posted within” timeframe to 6 months or anytime
  • Select multiple experience levels (e.g., both medior and senior)
You do not need to create a new search to refine results. Use the in-results filters on the search detail page to narrow by experience level, job type, flexibility, match type, tags, and active status. This is faster than re-running the search and preserves your original result set.
Monitoring works best for stable, well-defined searches. If your search criteria are very broad (e.g., just “Developer” with no filters), the monitor will find many new matches and the new_jobs_count can grow quickly. For effective monitoring, use specific job titles and at least 2-3 filters to keep the match stream focused and actionable.

Business Logic Rules

  • Score normalization: All match scores are displayed on a 30-99% scale. The top result in any search is normalized to approximately 99%, with all other results scaled relative to the top score. This means scores are meaningful within a single search but should not be compared across different searches.
  • Poor match removal: Jobs classified as “Poor Match” (matching less than 80% of keywords) can be automatically removed to keep your results focused on quality opportunities.
  • Deduplication: When using boolean OR queries, each combination generates a separate API call. Results are merged and deduplicated by the underlying ScrapedJob ID, so you never see duplicate listings.
  • Search state progression: Each search moves through states (Searching > Classifying > Retrieving Company Info > Done) and cannot skip steps. Real-time progress is delivered via SSE notifications.