> ## Documentation Index
> Fetch the complete documentation index at: https://docs.recruitier.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Contact Information

> Find and use contact details extracted from job postings for your outreach.

## Overview

One of Recruitier's most valuable features is its ability to discover and surface contact
information for the people behind job listings. Instead of spending hours manually
researching who to contact at a company, Recruitier automatically extracts and enriches
contact details from multiple sources, giving you a direct path to decision makers.

Contact details appear on individual job pages and include email addresses, phone numbers,
LinkedIn profiles, and contact person names -- each with source attribution and quality
indicators to help you choose the best outreach channel.

<Tip>
  Contact information is one of Recruitier's strongest differentiators. The 3-level
  aggregation system (job-level, company-level, global company-level) means you often
  have contact details even for jobs where the listing itself provides no contact
  information at all.
</Tip>

## How Contacts Are Discovered

Recruitier discovers contact information through several channels, each with a different
source badge that helps you understand where the data came from:

### Job Description Extraction

When a job listing includes contact details in its text (e.g., "Send your application to
[j.dejong@company.nl](mailto:j.dejong@company.nl)" or "For questions, call 020-1234567"), Recruitier's AI extracts
this information automatically during the scraping process.

**Source badge:** `Job Description`

This is often the highest-quality source because the company explicitly provided the
contact details for applicants. Names, email addresses, and phone numbers found in job
descriptions are extracted and structured into the ScrapedJob's `contact_information`
JSONB field.

### Company LinkedIn

Recruitier enriches job listings with data from the company's LinkedIn profile, including
identifying relevant decision makers and their contact information.

**Source badge:** `Company LinkedIn`

LinkedIn-sourced contacts often include the person's job title and profile link, making
it easy to verify their relevance before reaching out. These contacts are ranked by
relevance to hiring decisions.

### Company Website

Contact details discovered on the company's website (e.g., from "Contact Us" pages,
team directories, or about pages) are attributed to this source.

**Source badge:** `Company Website`

### Previously Saved Job

When a contact was already discovered in a different job listing from the same company,
Recruitier carries that contact information forward to new listings.

**Source badge:** `Previously Saved Job`

<Note>
  This cross-pollination of contacts across jobs from the same company is one of the
  key benefits of Recruitier's aggregation system. A contact discovered on one listing
  becomes available for all listings from that company in your collection.
</Note>

### Self-Provided

Contacts that you manually add to a job record are marked with this source. This includes
contacts you discovered through your own research or existing network.

**Source badge:** `Self Provided`

### Enrichment Services

Recruitier uses professional data enrichment services to discover additional contacts,
particularly for finding verified email addresses and decision-maker profiles.

**Source badge:** `Bright Data` or `Lusha`

<Note>
  Enrichment service lookups consume credits from your subscription plan. The platform
  indicates when enrichment data is available and lets you choose whether to use credits
  for additional contact discovery.
</Note>

## The 3-Level Contact Aggregation System

Recruitier aggregates contacts from three hierarchical levels, deduplicating across all
sources to give you the most comprehensive set of contacts possible:

| Level                               | Source                                                | What It Contains                                                                          |
| ----------------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| **Level 1: Job Contacts**           | Extracted from the specific job listing's description | Direct contacts mentioned in the job posting (most relevant to that specific role)        |
| **Level 2: Company Contacts**       | From the Company record linked to this job            | Contacts associated with the company as a whole, discovered across all their listings     |
| **Level 3: GlobalCompany Contacts** | From the global company database                      | Contacts enriched from external sources (LinkedIn, enrichment services, website scraping) |

The aggregation works bottom-up: job-level contacts are shown first (highest relevance),
then company-level contacts, then global contacts. Deduplication ensures you never see
the same person listed twice, even if they appear at multiple levels.

<Info>
  The deduplication logic matches contacts by email address, phone number, or LinkedIn
  profile URL. If the same person appears at both the job level and the company level
  (e.g., their email was in the job description AND in the company's contact database),
  only one entry is shown, preserving the most complete set of attributes from all sources.
</Info>

## Contact Types

Recruitier categorizes contacts into three types:

| Type                 | Constant                  | Icon          | Description                                                                    |
| -------------------- | ------------------------- | ------------- | ------------------------------------------------------------------------------ |
| **Email**            | `EMAIL`                   | Envelope      | An email address associated with the job or company. Includes quality scoring. |
| **Phone**            | `TEL`                     | Phone         | A telephone number, typically a direct line found in the job description.      |
| **LinkedIn Profile** | `LINKEDIN_CONTACT_PERSON` | LinkedIn icon | A link to a relevant person's LinkedIn profile at the hiring company.          |

Each contact record includes a **contact person name** when available. A name plus a
specific contact type (email or LinkedIn) gives you the most actionable outreach target.

## Email Quality Indicators

Email contacts come with additional quality signals to help you prioritize which addresses
to use:

### Email Score

A numerical score (0-100) indicating the confidence that the email address is valid,
deliverable, and associated with the right person. Higher scores mean higher confidence.
This score comes from an email verification service that checks deliverability.

### Email Status

The verification status of the email address:

* **Valid** -- The address has been verified and is likely to accept messages
* **Risky** -- The address exists but delivery is uncertain (e.g., catch-all domain)
* **Unknown** -- The address could not be verified

### Email Recommendation

A boolean indicator showing whether Recruitier recommends using this email for outreach.
Recommended emails have been validated and are associated with a named contact person.

### Email Reasoning

A text explanation of why the email is or is not recommended. For example: "Verified
personal email for hiring manager" or "Generic info@ address, consider finding a
direct contact."

<Tip>
  When a job has multiple email contacts, start with the one that has the highest score
  and a recommended status. Generic addresses (info@, hr@, careers@) are less effective
  than personal addresses for recruitment outreach. A personal email with a score above
  80 and a "recommended" flag is your best bet.
</Tip>

## LinkedIn Contact Scoring

LinkedIn contacts also have quality indicators:

| Field               | Description                                                                                                                                                                   |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **LinkedIn Rank**   | A numerical ranking among LinkedIn contacts for this company. Lower numbers indicate higher relevance (rank 1 is the most relevant decision maker).                           |
| **LinkedIn Score**  | A confidence score for the contact's relevance to the job and hiring decisions.                                                                                               |
| **LinkedIn Reason** | An explanation of why this person was identified as a relevant contact (e.g., "VP of Engineering at a 50-person company -- likely the hiring manager for development roles"). |

### Profile Freshness

For LinkedIn contacts, Recruitier tracks:

* **Profile last updated** -- When the contact's LinkedIn profile was last scraped or
  verified
* **Verified current** -- Whether the contact's current employment at the company has
  been verified through their LinkedIn experience section

<Warning>
  LinkedIn data can become stale. A contact who was the "Head of HR" six months ago may
  have changed roles. Always check the profile freshness indicators and verify on
  LinkedIn before reaching out. The "verified current" flag is your best indicator of
  data accuracy.
</Warning>

## Contact Context Classification

During the discovery process, Recruitier's AI classifies contacts with additional context
to help you understand the contact's role and relevance:

* **Company employee count at discovery** -- How many employees the company had when the
  contact was found. This helps contextualize the contact's role and influence.
* **Is likely sole employee** -- Flag for very small companies where the contact is
  probably the only employee (common for ZZP/freelance entities in the Dutch market).
* **Is likely founder** -- Flag for startup contacts who appear to be the company founder.
  Founders at small companies are often the direct hiring decision maker.
* **Is sole decision maker** -- Flag indicating this person is likely the only decision
  maker for hiring, especially relevant at small companies where there is no HR department.
* **Context summary** -- A human-readable summary of the contact's role and relevance
  (e.g., "CTO at a 25-person fintech startup -- primary technical decision maker").

<Info>
  These contextual flags are particularly valuable for tailoring your outreach approach.
  Reaching out to a sole decision maker at a 10-person startup requires a very different
  tone and pitch than contacting one of several HR managers at a 500-person enterprise.
</Info>

## Using Contact Information for Outreach

Once you have identified the right contact, there are several ways to use the information:

### Direct Outreach from Recruitier

Click the **outreach** button on a contact to open the message composer. Recruitier can:

* Pre-fill the recipient's email or LinkedIn profile
* Generate a personalized outreach message based on the job description and your tone
  of voice settings
* Include the auto-generated subject line for email outreach
* Start a multi-step outreach flow for sustained engagement

### Manual Outreach

Copy the contact details (email, phone, LinkedIn URL) to use in your own email client
or communication tool. The contact's name and context summary provide the information
you need to personalize your approach.

### Contact History

The **last contact info** section shows a summary of your most recent interaction with
this contact, including:

* The date of last contact
* The channel used (email, LinkedIn, phone)
* A brief summary of the interaction

This prevents duplicate outreach and helps you pick up conversations where you left off.

<Warning>
  Always check the "geen acquisitie" (acquisition not wanted) flag on the job before
  initiating contact. If the flag is set, the company has explicitly stated they do not
  want recruiter outreach. Respect this request.
</Warning>

## Favoriting Contacts

You can favorite individual contacts by clicking the star icon. Favorited contacts are
highlighted in the contact list and can be filtered across your entire collection. This
is useful for building a network of go-to contacts at companies you frequently work with.

<Info>
  Contact favorites are shared across jobs and companies. If you favorite a contact on
  one job listing, that person will appear as a favorite whenever they show up on other
  listings from the same company. This creates a persistent network of your most valuable
  contacts.
</Info>

## Best Practices

* **Prioritize named contacts** over generic email addresses -- personal outreach gets
  significantly higher response rates
* **Check the email score** before sending -- low-scoring emails are more likely to bounce
  and hurt your sender reputation
* **Verify LinkedIn profiles** are current before connecting -- look for the "verified
  current" flag
* **Use the context summary** to personalize your message -- mentioning the contact's
  specific role shows you did your research
* **Check for "acquisition not wanted"** flags on the job before contacting -- respect
  the company's stated preference
* **Log your interactions** using internal notes so your team knows who has been contacted
  and what was discussed
* **Start with rank-1 LinkedIn contacts** -- these are identified as the most relevant
  decision makers for the type of role you are pursuing

## Advanced

### Contact Information Storage Architecture

Contact information is stored at multiple levels in the database:

**ScrapedJob level:**

* `contact_information` (JSONB field) -- Stores contacts extracted directly from the job
  description during scraping. Contains structured records with type, value, name, and
  source attribution.

**Company level:**

* Contact records linked to the Company entity associated with the ScrapedJob.

**GlobalCompany level:**

* Contact records in the global company database, enriched from external sources like
  LinkedIn, Bright Data, Lusha, and website scraping.

The aggregation service combines all three levels when rendering the job detail page,
applying deduplication based on contact type and value (email address, phone number,
or LinkedIn URL).

### How AI Extracts Contacts from Job Descriptions

During the scraping process, Recruitier's AI parses job description text to identify
contact information. The extraction looks for:

* **Email patterns**: Standard email address formats, including those embedded in
  sentences like "Contact [jan.devries@company.nl](mailto:jan.devries@company.nl) for more information"
* **Phone patterns**: Dutch phone number formats (06-XXXX, 020-XXXX, +31-XX-XXXX)
* **Name-role pairs**: Patterns like "Contact person: Jan de Vries, HR Manager"
* **LinkedIn URLs**: Direct links to person profiles embedded in the listing

The extracted data is stored in the `contact_information` JSONB field on the ScrapedJob
entity, making it available to all users who have a Job linked to that ScrapedJob.

### Email Verification Pipeline

Email addresses go through a verification pipeline:

1. **Syntax validation** -- Checks the email format is valid
2. **Domain verification** -- Confirms the email domain exists and has MX records
3. **Deliverability check** -- Attempts SMTP verification without sending a message
4. **Catch-all detection** -- Identifies domains that accept all addresses (reduces
   confidence)
5. **Score assignment** -- Produces a 0-100 confidence score based on all checks
6. **Recommendation** -- Combines score, contact name presence, and email type
   (personal vs. generic) into a recommendation flag

### LinkedIn Contact Discovery and Ranking

LinkedIn contacts are discovered and ranked through a multi-step process:

1. **Company identification** -- The hiring company's LinkedIn profile is identified
2. **Employee discovery** -- Key employees are identified based on their LinkedIn
   profiles and current employment
3. **Relevance scoring** -- Each contact is scored based on their job title's relevance
   to hiring decisions (e.g., "Head of Engineering" scores higher than "Junior Developer")
4. **Rank assignment** -- Contacts are ranked from 1 (most relevant) to N
5. **Context generation** -- An AI-generated summary explains why each contact is
   relevant (e.g., "CTO at a 25-person fintech startup -- primary technical decision
   maker for all engineering roles")

### Power-User Tips

<Accordion title="Building a contact network over time">
  Favoriting contacts across multiple jobs from the same company builds a persistent
  network. Over time, you develop relationships with key contacts at companies you
  frequently interact with. When a new job appears at one of these companies, your
  favorited contacts are immediately available, giving you a warm outreach path.
</Accordion>

<Accordion title="Using context flags for outreach strategy">
  The context classification flags (sole employee, likely founder, sole decision maker)
  directly inform your outreach approach:

  * **Sole decision maker**: Be direct about the opportunity and the value you bring.
    This person has authority to hire and does not need to consult others.
  * **Likely founder**: Appeal to their vision and growth plans. Founders respond well
    to messages that demonstrate understanding of their company's mission.
  * **One of many HR contacts**: Be concise and professional. Your message is competing
    with many others in their inbox.
</Accordion>

<Accordion title="Cross-referencing contacts across jobs">
  When the same company has multiple open positions in your collection, the aggregation
  system ensures you see all contacts across all their listings. This is valuable because
  a contact discovered on their "Python Developer" listing (e.g., the tech lead) might
  be the perfect outreach target for their "DevOps Engineer" listing as well.
</Accordion>

<Accordion title="Handling stale LinkedIn data">
  If a LinkedIn contact's profile freshness indicates it was last verified months ago:

  1. Open their LinkedIn profile directly using the provided URL
  2. Check if their current role still matches what Recruitier shows
  3. If they have moved on, look at who replaced them -- the new person in that role is
     likely your best contact now
  4. Update your internal notes to flag the stale contact for your team
</Accordion>

### Business Rules

* **Contact deduplication**: When the same contact appears at multiple aggregation levels,
  the most complete record is kept. A contact with name + email + LinkedIn at the global
  level takes precedence over a contact with only an email at the job level.
* **Enrichment credit consumption**: Looking up contacts via Bright Data or Lusha
  enrichment services consumes subscription credits. The platform shows credit usage
  and remaining balance.
* **Contact persistence**: Contacts are never deleted when jobs are deleted. The contact
  data remains in the system at the Company and GlobalCompany levels, available for
  future job listings from the same company.
* **Privacy compliance**: Contact information is sourced from publicly available data
  (job listings, company websites, LinkedIn profiles). Manual contacts added by users
  are private to their agency.

## Related

* [Job Details](/jobs/job-details) -- The full job detail page where contacts are displayed
* [Saving & Managing Jobs](/jobs/saving-and-managing) -- Managing your job collection
* [Active Jobs](/jobs/active-jobs) -- Filtering for active jobs before outreach
