Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save iamarsenibragimov/de6d14fe03f87d44ca0d3835a3c2dab6 to your computer and use it in GitHub Desktop.

Select an option

Save iamarsenibragimov/de6d14fe03f87d44ca0d3835a3c2dab6 to your computer and use it in GitHub Desktop.
CrustData RT Search: strict_title_and_company_match does not work for past positions

CrustData RT Search: strict_title_and_company_match Does Not Work for Past Positions

Date: 2026-03-19 Severity: High — directly impacts search precision and credit cost Endpoint: POST /screener/person/search (Realtime People Search)


Summary

CrustData's Realtime People Search has a post_processing.strict_title_and_company_match parameter that is supposed to ensure the searched title and company co-occur within the same employment record. This works correctly for current positions but fails completely for past positions. The result is that PAST_TITLE and PAST_COMPANY are matched independently across different employment records, producing false positives.


How the API Works

Request Structure

{
  "filters": [
    { "filter_type": "PAST_TITLE", "type": "in", "value": ["CFO", "Chief Financial Officer"] },
    { "filter_type": "PAST_COMPANY", "type": "in", "value": ["Open-Xchange"] },
    { "filter_type": "REGION", "type": "in", "value": ["Germany"] }
  ],
  "page": 1,
  "post_processing": {
    "strict_title_and_company_match": true
  }
}

Expected Behavior

With strict_title_and_company_match: true, we expect the API to only return profiles where the same employment record contains both:

  • A title matching one of our PAST_TITLE values (e.g., "CFO")
  • A company matching our PAST_COMPANY value (e.g., "Open-Xchange")

In other words: people who were CFO at Open-Xchange, not people who were CFO somewhere and also worked at Open-Xchange in a different role.

Actual Behavior

The API returns profiles where:

  • The person held a title matching PAST_TITLE at any past company
  • AND the person worked at PAST_COMPANY in any past role

The title and company are matched independently — not within the same employment record. The strict_title_and_company_match post-processing does not fix this for past positions.


Evidence

Test Case 1: EQS Group — CFO Search

Query:

{
  "filters": [
    { "filter_type": "PAST_TITLE", "type": "in", "value": ["CFO", "Chief Financial Officer", "Chief Finance Officer", "C.F.O", "CFOs", "Chief Finance Officers", "Chief Financial Officers", "Chief Fin Officer", "Chief Fin. Officer"] },
    { "filter_type": "PAST_COMPANY", "type": "in", "value": ["EQS Group"] },
    { "filter_type": "REGION", "type": "in", "value": ["Austria", "Germany", "Switzerland"] }
  ],
  "page": 1,
  "post_processing": { "strict_title_and_company_match": true }
}

Result: 1 profile — FALSE POSITIVE

Name Role at EQS Group CFO Role (different company)
George Dietrichsbruckner Senior Product Manager Compliance / GRC (2017-2019) Interim CFO at ENHANCE INVESTMENT PARTNERS (2014)

Why this is wrong: George was never a CFO at EQS Group. He was a Product Manager at EQS and a CFO at a completely unrelated company. Strict matching should have filtered him out.


Test Case 2: Open-Xchange — CFO Search

Query: Same structure as above, with PAST_COMPANY: "Open-Xchange".

Result: 4 profiles — 3 are FALSE POSITIVES

# Name Role at Open-Xchange CFO Role (different company) Verdict
1 Markus Struppler Aufsichtsrat / supervisory board (2011-2012) CFO at BayTech Venture Capital (2009-2012), CFO at ATOSS Software (1997-2008) ❌ Board member at OX, CFO elsewhere
2 Stefanie S. Sr. Corporate Marketing Manager (2016-2025) "Assistentin der Geschäftsleitung (CEO/CFO)" at KIRCHHOFF Group (2013-2016) ❌ Marketing manager at OX, word "CFO" appeared in an assistant role title at another company
3 Uwe Reumuth CFO / Finanzvorstand (2016-2017) Serial CFO at multiple companies ✅ Genuine past CFO at Open-Xchange
4 Olga Virkus Finance Controlling (2016-2020) CFO at Enough Software (2013-2018) ❌ Finance controller at OX, CFO elsewhere

Contrast: Current Positions Work Correctly

When using CURRENT_TITLE + CURRENT_COMPANY with strict_title_and_company_match: true, the results are accurate:

Company Query Results Precision
EQS Group CURRENT_TITLE=CFO + CURRENT_COMPANY=EQS Group 1 (Andre Silverio Marques — genuine CFO) 100%
Open-Xchange CURRENT_TITLE=CFO + CURRENT_COMPANY=Open-Xchange 1 (Dirk Valbert — genuine CFO) 100%

Strict matching works perfectly for current positions — title and company are correctly linked within the same active employment record.


False Positive Patterns Observed

Pattern 1: Title at Company A + Role at Company B

The most common pattern. Person was CFO at Company A and held a non-CFO role at the target company.

Example: George Dietrichsbruckner — CFO at ENHANCE INVESTMENT PARTNERS, Product Manager at EQS Group.

Pattern 2: Title keyword in unrelated role description

The title filter matches any occurrence of the keyword in the role title string, even when embedded in a completely different context.

Example: Stefanie S. — her KIRCHHOFF Group role was literally "Assistentin der Geschäftsleitung (CEO/CFO)" — she was an assistant to the CEO/CFO, not a CFO herself. The API matched the substring "CFO" in this title.

Pattern 3: Adjacent but different role at target company

Person held a finance-adjacent role at the target company (e.g., Finance Controlling) but was CFO at a different company.

Example: Olga Virkus — Finance Controller at Open-Xchange, CFO at Enough Software.


Impact

Precision Degradation

Search Type Total Results Valid False Positives Precision
Current (2 searches) 2 2 0 100%
Past (2 searches) 5 1 4 20%
Combined 7 3 4 43%

Cost Impact

Each false positive costs credits. With min charge of 5 credits per search:

  • We paid 10 credits ($1.00) for past searches
  • Got 1 valid result and 4 false positives
  • Effective cost per valid past result: $1.00 (vs $0.50 for current)

At scale (100 companies), if past search averages 3 false positives per company:

  • 300 false positive profiles × $0.10 = $30 wasted on noise
  • Plus additional engineering time to filter them in our pipeline

Operational Impact

Our sourcing pipeline must now implement client-side title+company cross-validation for past results — checking that the matched title actually occurred at the matched company within the same employment record. This is doable but adds complexity and requires processing the full employment history of each returned profile.


Recommendation for CrustData

strict_title_and_company_match should verify that PAST_TITLE and PAST_COMPANY co-occur within the same employer record, not just that both exist somewhere in the person's history. The current behavior makes the strict flag effectively useless for past position searches.


Workaround (Client-Side)

Until CrustData fixes this, we can filter results ourselves:

// After receiving RT Search results for past title + past company
foreach ($profiles as $profile) {
    $isValid = false;
    foreach ($profile['employer'] as $employer) {
        $titleMatch = /* check if employer.title matches our search titles */;
        $companyMatch = /* check if employer.company_name matches our target company */;
        if ($titleMatch && $companyMatch) {
            $isValid = true;
            break;
        }
    }
    if (!$isValid) {
        // False positive — skip this profile
        continue;
    }
}

The downside: we still pay credits for false positives before filtering them client-side.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment