Overview
Location and preferences act as filters that focus the AI matching engine on jobs the candidate would actually consider. A brilliant technical match is worthless if the job is 200km away and the candidate only wants to work within cycling distance. Similarly, a perfect skills match for a full-time on-site role is irrelevant if the candidate only wants remote contract work. By configuring these preferences, you tell Recruitier exactly what to look for — and what to exclude — so every match that surfaces is a genuine opportunity worth your time and the candidate’s attention.Setting the Candidate Location
Google Maps Autocomplete
When you set or update a candidate’s location, Recruitier provides a Google Maps autocomplete field. As you type, it suggests matching locations:- Cities: “Amsterdam”, “Rotterdam”, “Utrecht”
- Neighborhoods: “Amsterdam Zuidoost”, “Rotterdam Centrum”
- Specific addresses: “Keizersgracht 520, Amsterdam”
- Regions: “Randstad”, “Noord-Holland”
All three are stored on the candidate profile and serve different purposes in the matching pipeline.
Automatic Geocoding
If you enter a location as text without using the autocomplete picker (for example, when editing a profile directly or when location is extracted from a CV), Recruitier attempts to geocode it automatically through a multi-step process:1
Dutch City Database
The location string is first checked against a comprehensive database of Dutch cities. This provides fast, accurate resolution for the most common case (Dutch candidates looking for Dutch jobs).
2
Nominatim API
If the location is not found in the Dutch city database, it is sent to the Nominatim geocoding API (the open-source geocoding service behind OpenStreetMap). This handles international locations and less common Dutch addresses.
3
AI Normalization
For ambiguous or non-standard location strings (e.g., “somewhere near Rotterdam”, “Randstad area”, “close to Schiphol”), AI-based normalization resolves the location to the most likely coordinates.
Distance-based matching requires coordinates. If a candidate’s location has not been successfully geocoded (no latitude/longitude), the matching engine skips the location filter entirely and shows jobs regardless of distance. The location penalty factor defaults to 1.0 (no penalty), which means distant jobs will not be penalized. Setting a proper geocoded location ensures relevant geographic results and prevents your candidate from being matched to jobs across the country when they only want local opportunities.
Search Radius Configuration
The search radius defines how far from the candidate’s location the AI should look for jobs. This is specified in kilometers and defaults to 40 km when adding a new candidate through the upload wizard. The slider ranges from 5 km to 200 km.Recommended Radius Settings
How Radius Affects Matching (The Location Penalty)
The search radius does not create a hard cutoff at the boundary. Instead, it defines a three-zone scoring system with graduated penalties:Zone 1: Within the Radius (factor = 1.0)
Zone 1: Within the Radius (factor = 1.0)
Jobs located within the candidate’s preferred radius receive the full match score with no location penalty. If a candidate sets a 50km radius and a job is 30km away, it receives a location factor of 1.0 — no reduction.This is the “sweet spot” where the candidate is comfortable commuting.
Zone 2: Between 1x and 2x Radius (factor = 0.7 to 1.0, linear decay)
Zone 2: Between 1x and 2x Radius (factor = 0.7 to 1.0, linear decay)
Jobs between the preferred radius and twice the preferred radius receive a gradually decreasing score. The penalty is applied using linear interpolation:
- At exactly 1x the radius: factor = 1.0 (no penalty)
- At 1.5x the radius: factor = 0.85 (15% penalty)
- At 1.9x the radius: factor = 0.73 (27% penalty)
- At exactly 2x the radius: factor = 0.7 (30% penalty)
Zone 3: Beyond 2x Radius (excluded)
Zone 3: Beyond 2x Radius (excluded)
Jobs beyond twice the preferred radius are excluded entirely from search results. They are not retrieved, not scored, and never shown to you. For a 50km radius, this means jobs beyond 100km are invisible.This hard cutoff prevents the system from wasting scoring resources on jobs that are clearly too far away.
The default search radius is 40 km when adding a new candidate through the wizard. For most candidates in the Netherlands, this covers their local metro area and surrounding cities. For a candidate based in Amsterdam with a 40km radius, this covers Amsterdam, Haarlem, Hilversum, Almere, and surrounding areas. Jobs up to 80km are visible (with penalty), and beyond 80km they are excluded. You can adjust the radius at any time from the candidate’s profile.
Remote Jobs and Location
Jobs marked as remote bypass the location filter entirely. They always receive a location factor of 1.0 (no penalty), regardless of the candidate’s location or search radius:- A candidate in Maastricht with a 25km radius will still see remote jobs from companies in Amsterdam
- A candidate in Groningen with a 10km radius will see remote jobs from Rotterdam
- The location penalty calculation is simply skipped for remote positions
Jobs Without Location Data
Some job listings do not include a specific location or the location could not be geocoded. When either the candidate or the job is missing coordinate data, the location penalty defaults to 1.0 (no penalty). This means:- Jobs without coordinates are treated as if they are within the candidate’s radius
- Candidates without coordinates see jobs from all locations without penalty
Salary Expectations
Configure the candidate’s salary expectations to help evaluate matches:- Minimum salary — The lowest acceptable compensation
- Maximum salary — The target or ideal compensation
salary_expectation_min and salary_expectation_max.
Many job listings in the database do not include salary data. When a job listing does not have compensation information, salary filtering is not applied and the match is evaluated based on other factors (skills, title, experience, location). Salary preferences are most useful when your job database has compensation information, which varies by source and market.
Job Type Preferences
Set which types of employment the candidate is open to:
You can select multiple job types. If no preference is set, the matching engine defaults to searching for all three types (full-time, part-time, and contract).
Flexibility Preferences
Define the candidate’s work arrangement preferences:
Like job types, you can select multiple flexibility options. These preferences are passed as filters to the vector search stage. If no flexibility preference is set, all arrangements are included.
How Preferences Affect the Matching Pipeline
All preferences work together to narrow the job search in a layered filtering approach:Automatic Re-Matching on Location Changes
When you update a candidate’s location or search radius, Recruitier detects that these changes affect matching results and automatically triggers a re-match. The system monitors the following fields as re-match triggers:
When any of these change, the matching pipeline runs again with the updated parameters. The re-matching process:
- Identifies all existing protected matches (favorited, applied, contacted, interviewing, offer stage, placed)
- Collects protected match job IDs into an exclude list
- Runs the full 5-stage matching pipeline with updated location parameters
- Adds new matches alongside existing protected ones
- Old pending matches that are no longer geographically relevant may be replaced
Changes to salary expectations, job type preferences, or flexibility preferences do not automatically trigger re-matching. If you update these preferences and want new matches, you can manually trigger a re-match from the candidate profile. This is by design to prevent excessive re-matching from minor preference tweaks.
Configuring Preferences: Best Practices
Ask the Candidate
Do not guess on preferences. A 5-minute conversation about location tolerance, salary expectations, and work arrangement preferences saves hours of reviewing irrelevant matches. Ask specifically: “What is the furthest you would commute daily?” and “Would you consider fully remote?”
Consider the Dutch Market
In the Netherlands, the Randstad area (Amsterdam, Rotterdam, The Hague, Utrecht) is densely connected by public transport. A 50km radius from Amsterdam covers most of this region. For candidates outside the Randstad (e.g., Eindhoven, Groningen, Maastricht), a larger radius (75-100km) may be needed to reach enough job opportunities.
Update When Priorities Change
Candidates’ preferences evolve. If someone initially wanted on-site work but is now open to hybrid, update the profile. Similarly, if a candidate initially set a 25km radius but realizes they need to widen their search, increasing to 50km triggers re-matching and surfaces new opportunities.
Use Remote for Max Coverage
If a candidate is truly flexible about remote work, enabling the “Remote” preference dramatically expands their job pool. Remote jobs bypass the location filter entirely, meaning a candidate in Maastricht can match with remote opportunities from companies anywhere in the Netherlands (or beyond).
Advanced
The Location Penalty Formula
The location penalty is a deterministic calculation applied after AI scoring. It is multiplicative, meaning it reduces the AI score by a percentage based on distance. Here is the exact formula:final_score = ai_score * location_factor
Example calculations:
How Geocoding Works Internally
The GeocodingService follows a cascading resolution strategy designed for the Dutch market:- Dutch City Database: A pre-loaded list of Dutch cities with their coordinates. This provides sub-millisecond resolution for the most common case. Cities are matched case-insensitively with common variations handled (e.g., “Den Haag” and “‘s-Gravenhage” both resolve to The Hague).
- Nominatim API: For locations not in the Dutch database (international locations, specific addresses, neighborhoods), the Nominatim API provides geocoding. This is the same service that powers OpenStreetMap search. Results include coordinates, display name, and a normalized address string.
- AI Normalization: For location strings that neither the database nor Nominatim can resolve (ambiguous descriptions, regional names, informal location references), AI-based normalization attempts to interpret the intent and map it to specific coordinates. For example, “Randstad area” might resolve to a central point like Utrecht.
Interaction Between Location and Other Filters
The location filter interacts with other matching parameters in specific ways:- Staffing/recruiting agency exclusion: Applied before location filtering. Jobs from staffing agencies are excluded regardless of location.
- Recency filter (6 months): Applied before location filtering. Old jobs are excluded regardless of proximity.
- Job type and flexibility filters: Applied at the same stage as location. These are AND conditions — a job must pass all filters to be included.
- Vector search: Runs after all filters are applied. The fetch limit of 400 provides a buffer for post-filtering, with a display limit of 200 final matches.
Preferences Stored as JSONB
Job type preferences and flexibility preferences are stored as JSONB arrays on the candidate entity:preferred_job_types:["full-time", "contract"]preferred_flexibility:["hybrid", "remote"]preferred_locations: JSONB array of preferred location objects (for candidates who want to search in multiple areas)
Power-User Tips
Changing preferences like job type and flexibility does not trigger automatic re-matching (unlike location changes, which do trigger it). If you update these preferences and want fresh results, manually trigger a re-match from the candidate profile. This design prevents unnecessary re-matching from minor preference adjustments.
Related
- How Matching Works — See how location preferences feed into the matching pipeline
- Understanding Scores — Learn how location affects match scores
- Candidate Pipeline — Track matched jobs through your workflow
- Skills & Expertise — The other critical factor in match quality

