Skip to main content
JobCannon

Mapping JobCannon Scores to Greenhouse Fields

Technical reference for the JobCannon result envelope, Greenhouse scorecard mapping, and how to parse dimensions and percentile ranks.

~815 wordsVendor docs →

Mapping JobCannon Scores to Greenhouse Fields


When a candidate completes a JobCannon assessment, the result is returned to Greenhouse via a PATCH callback to the callback_url. This guide explains the result envelope structure and how to map scores to Greenhouse scorecard fields.


Result Envelope Structure


JobCannon returns a JSON envelope with the following shape:


{

"status": "complete",

"partner_score": 72,

"partner_profile_url": "https://app.jobcannon.io/results/[session-id]",

"partner_data": {

"assessment_name": "Big Five",

"assessment_slug": "big-five",

"completed_at": "2026-05-17T14:32:00Z",

"duration_seconds": 245,

"dimensions": [

{

"name": "Openness",

"score": 68,

"percentile": 65,

"interpretation": "above_average"

},

{

"name": "Conscientiousness",

"score": 81,

"percentile": 78,

"interpretation": "high"

},

{

"name": "Extraversion",

"score": 44,

"percentile": 32,

"interpretation": "below_average"

},

{

"name": "Agreeableness",

"score": 73,

"percentile": 70,

"interpretation": "high"

},

{

"name": "Emotional Stability",

"score": 55,

"percentile": 48,

"interpretation": "average"

}

],

"metadata": {

"candidates_percentile_rank": 65,

"faking_detected": false,

"social_desirability_scale": 32

},

"narrative": "Candidate shows strong conscientiousness (78th percentile) and agreeableness (70th), suggesting reliability and teamwork. Introversion (32nd percentile) may affect high-visibility or sales-heavy roles. Social desirability scale (32/100) indicates honest responding."

}

}


Field Mapping


Top-Level Fields


| Field | Type | Meaning |
|-------|------|---------|
| status | string | Always "complete" when successfully scored |
| partner_score | number (0–100) | Overall assessment score for Greenhouse scorecard display |
| partner_profile_url | string (URL) | Link to the full result on JobCannon; can be embedded in Greenhouse |

Dimensions Array


Each dimension in partner_data.dimensions has:


| Field | Type | Meaning |
|-------|------|---------|
| name | string | Dimension name (e.g., "Openness", "Conscientiousness") |
| score | number (0–100) | Raw score for this dimension |
| percentile | number (0–100) | Percentile rank (% of population below this score) |
| interpretation | enum | "low", "below_average", "average", "above_average", "high" |

Metadata Fields


| Field | Type | Meaning |
|-------|------|---------|
| candidates_percentile_rank | number (0–100) | Overall percentile (used for ranking candidates) |
| faking_detected | boolean | True if response patterns indicate faking/low effort |
| social_desirability_scale | number (0–100) | Probability of socially desirable responding (higher = more faking risk) |

Parsing the Result in Greenhouse


Greenhouse scorecard fields should reference specific dimensions. Here's a TypeScript example to extract and normalize scores:


interface JobCannonResult {

status: string

partner_score: number

partner_profile_url: string

partner_data: {

dimensions: Array<{

name: string

score: number

percentile: number

interpretation: string

}>

metadata: {

candidates_percentile_rank: number

faking_detected: boolean

social_desirability_scale: number

}

}

}


function parseJobCannonResult(result: JobCannonResult) {

const dimensions = result.partner_data.dimensions.reduce((acc, dim) => {

acc[dim.name.toLowerCase().replace(/\s+/g, '_')] = {

score: dim.score,

percentile: dim.percentile,

interpretation: dim.interpretation

}

return acc

}, {} as Record<string, any>)


return {

overallScore: result.partner_score,

dimensions,

percentileRank: result.partner_data.metadata.candidates_percentile_rank,

fakingRisk: result.partner_data.metadata.social_desirability_scale,

profileUrl: result.partner_profile_url

}

}


Example: Big Five Assessment


When a candidate completes the Big Five assessment, the dimensions will always be:

  • Openness
  • Conscientiousness
  • Extraversion
  • Agreeableness
  • Emotional Stability

  • **Greenhouse Scorecard Setup:**

    1. Create custom scorecard questions for each dimension (or use the partner_score for a single aggregate)

    2. Map each to the percentile in the dimensions array

    3. Use interpretation to color-code ("high" → green, "below_average" → yellow, etc.)


    Example: DISC Assessment


    DISC assessments return four dimensions:

  • Dominance
  • Influence
  • Steadiness
  • Conscientiousness

  • Each has its own score and percentile. Use the same parsing logic above.


    Handling Edge Cases


    Candidate Abandoned Assessment


    If a candidate closes the browser before submitting, JobCannon will not return a result. Greenhouse will not receive a PATCH callback. **Recruiter action:** Re-send the assessment from the candidate page or move to the next screening stage.


    Faking Detected (Social Desirability > 70)


    JobCannon flags likely fakers. Use social_desirability_scale to adjust scorecard logic:


    if (result.partner_data.metadata.social_desirability_scale > 70) {

    // Flag for human review or re-test

    console.warn('High faking risk; consider re-testing')

    }


    Score Already Posted


    JobCannon idempotently PATCHes the callback URL. If you re-send to Greenhouse, it will retry the callback with the same score. No duplicate scoring.


    Data Retention and GDPR


    By default, JobCannon retains assessment data for 90 days post-completion. To extend or shorten:


    1. **Log in to JobCannon admin** (app.jobcannon.io/admin)

    2. **Go to Settings → Data Retention**

    3. **Set org-wide policy** (30/60/90/365 days)


    Right-to-be-forgotten requests are processed within 7 days. Email [email protected].


    Percentile Interpretation


    Percentiles are norm-referenced against a database of 50,000+ assessments from diverse industries. A percentile of 75 means the candidate scored higher than 75% of the database population.


    **Use percentiles for:**

  • Rank-ordering candidates
  • Consistency checks (repeated assessments should have similar percentiles)
  • Adverse-impact analysis (compare percentiles across protected groups)

  • **Avoid using:**

  • Raw scores as absolute measures (0–100 has different meaning per test)
  • Score comparisons across different assessment types (Big Five scores ≠ DISC scores)

  • EEOC Adverse Impact Analysis


    The 4/5ths rule: If a protected group's selection rate is <80% of the majority group's rate, investigate bias.


    **Example:**

  • 80 White candidates, 60 pass (75% selection rate)
  • 20 Black candidates, 12 pass (60% selection rate)
  • 60% ÷ 75% = 80% — just at threshold; monitor

  • Download aggregated adverse-impact reports from JobCannon admin (/admin/eeoc) to track by test, dimension, and demographic group.


    ---


    **Vendor docs:** https://developers.greenhouse.io/assessment-partner-api.html#scorecard-api

    **API Spec:** https://api.jobcannon.io/docs/greenhouse

    **Support:** [email protected]