Mapping JobCannon Scores to HubSpot Properties
Reference for the 23 jc_* HubSpot contact properties: what each carries, why the numbers are percentages rather than percentiles, and what not to build on them.
Reference for the 23 custom properties JobCannon creates on your HubSpot Contacts schema. Every name is prefixed jc_ and grouped under jobcannon_assessments.
The table below is generated from the same list the integration creates when it bootstraps your portal. If a property is in this table it exists in your portal, and if it is not in this table JobCannon does not write it.
The properties
| Property | Label in HubSpot | Type / values |
|---|---|---|
jc_disc_d | JC DISC — Dominance | number |
jc_disc_i | JC DISC — Influence | number |
jc_disc_s | JC DISC — Steadiness | number |
jc_disc_c | JC DISC — Conscientiousness | number |
jc_bigfive_o | JC Big Five — Openness | number |
jc_bigfive_c | JC Big Five — Conscientiousness | number |
jc_bigfive_e | JC Big Five — Extraversion | number |
jc_bigfive_a | JC Big Five — Agreeableness | number |
jc_bigfive_n | JC Big Five — Neuroticism | number |
jc_iq_score | JC Cognitive — % Correct | number |
jc_mbti_type | JC MBTI Type | text |
jc_riasec_holland | JC RIASEC Holland Code | text |
jc_enneagram_type | JC Enneagram Type | 1, 2, 3, 4, 5, 6, 7, 8, 9 |
jc_integrity_flag | JC Integrity Flag | clean, review, concern |
jc_test_status | JC Test Status | invited, in_progress, completed, expired |
jc_result_url | JC Result URL | text |
jc_completed_at | JC Completed At | datetime (ISO-8601) |
jc_invitation_id | JC Invitation ID | text |
jc_invite_sent_at | JC Invite Sent At | datetime (ISO-8601) |
jc_last_reminded_at | JC Last Reminded At | datetime (ISO-8601) |
jc_reminder_count | JC Reminder Count | number |
jc_assessments_assigned | JC Assessments Assigned | text |
jc_invite_url | JC Invite URL | text |
What the numbers mean
Every numeric property above is the percentage of that scale's maximum, 0-100, as JobCannon scored it. Three consequences:
- They are not percentiles. A
jc_bigfive_oof 78 means the candidate endorsed 78% of the maximum on Openness. It does not mean they scored higher than 78% of anyone. (The Big Five percentile against published norms does exist — it is in the result envelope delivered over the ATS and API paths, alongsidemetadata.norms_n. The CRM properties carry the percentage.) - They are not comparable across tests.
jc_disc_dof 72 andjc_bigfive_cof 72 are two different rulers. - There is no total, and none of these is one. A HubSpot calculated property that averages the Big Five columns produces a number with no meaning: high Conscientiousness and high Neuroticism do not add up to anything.
jc_iq_score is the percentage of items answered correctly on the cognitive assessment — which is why it is labelled JC Cognitive — % Correct. It is not an IQ in the standardised, mean-100 sense; do not compare it to one. The internal name still reads jc_iq_score because a HubSpot property name cannot be changed once a portal holds data under it. If your portal was connected before 2026-08-15 the label was corrected in place on your next sync — the values are unchanged and were always percent-correct.
The type properties
jc_mbti_type is the four-letter type. jc_riasec_holland is the Holland code — the top three interest areas as letters, highest first, e.g. IAS. jc_enneagram_type is the type number as an enumeration.
These are categories, not rankings. Sorting a contact list by jc_mbti_type sorts alphabetically and means nothing.
jc_integrity_flag
clean, review or concern, computed server-side from behaviour during the session. When a candidate has taken several assessments, the worst flag across them wins — a single concern is not diluted by three cleans.
This is an input to a human review, not a filter. A review flag is a reason to read the report, not a reason to reject. A HubSpot workflow that auto-disqualifies on concern is exactly the use this signal is not fit for, and it is the use we will ask you to stop.
The social-desirability estimate derived from Big Five responses is deliberately not pushed to HubSpot. It stays on the candidate's result in JobCannon.
Status and lifecycle
jc_test_status moves invited → in_progress → completed, or expired. jc_invite_sent_at, jc_last_reminded_at and jc_reminder_count let you build a workflow on stale invitations without asking us for anything — a task on jc_reminder_count >= 2 AND jc_test_status = invited is the usual one.
jc_assessments_assigned is the list of tests on that invitation. jc_invite_url is the candidate's link, if you want to resend it from HubSpot rather than from JobCannon.
Upserts and timestamps
Every push is an upsert by email. A candidate finishing a second test updates the existing contact; no duplicates are created.
jc_completed_at is the most recent push, not the first. If you need a first-completed timestamp for reporting, create your own property and copy from jc_completed_at with a workflow that only fires when the target is empty.
Name collisions
If your portal already uses one of these names, email partners@jobcannon.io and we will add a per-tenant mapping override on your connection record.
Integrity and social-desirability signals
JobCannon does compute two validity signals, and neither one travels in the result envelope:
- Integrity flag —
clean/review/concern, derived server-side from behaviour during the session (seelib/integrity-scoring). It is computed for any test. - Social-desirability estimate — a 0–100 score with a
low/moderate/elevated/highflag, derived from Big Five responses only.
Both are stored on the result row as validity_scores and are recruiter-only: they surface in your JobCannon org dashboard, in the candidate report, and in the results CSV export. The HubSpot integration writes the integrity flag to the jc_integrity_flag contact property. They are deliberately absent from the ATS payload — a candidate-visible channel is the wrong place for a signal about that candidate's honesty, and the flag is an input to a human review, not a filter to automate.
There is no faking_detected, no faking_risk and no social_desirability_scale field on any payload JobCannon sends. If you have code branching on one of those, it has never fired.
What we publish about the instruments
Reliability figures from our own sample are at /research/reliability, and Big Five has a full technical manual at /research/big-five-technical-manual.
That coverage is not the whole catalogue. We do not publish validity documentation for every one of the 42 hire-eligible tests, so check what exists for the specific instrument before you rely on it in a selection decision. If the documentation you need is missing, ask partners@jobcannon.io rather than assuming it is somewhere on the site.
Vendor docs: https://developers.hubspot.com/docs/api/crm/properties Support: partners@jobcannon.io