A Grade scores a record from 0 to 100 using a rubric you write: a list of
criteria, each worth some weight, each reading something the workspace already
knows. The score lands in a band you name, and every grade carries the
breakdown that produced it, so “why is this a B?” is one click rather than a
guess.It is one property type behind four different jobs. Pick it from Complex in
the property type list.
Lead fit
How promising a new lead is. A / B / C / D.
Deal confidence
How likely an open deal is to close. Committed down to Unlikely.
Customer health
Whether a live account is in good shape. Healthy down to At risk.
Churn risk
How likely a customer is to leave. A high score is bad news.
Create a Grade property on the object you want to score (Contacts, Deals,
Accounts), then choose Start from a preset. A preset fills in the bands
and sets which way the score reads. It deliberately does not write any
criteria: a rubric depends on your own properties, so anything it invented
would point at fields you may not have.
2
Check which way it reads
Reads as decides whether a rising score is good news. Leave it on
A higher score is better for fit, confidence and health. Set it to
A higher score is worse for churn risk, so a climbing score shows a red
arrow rather than a green one.
3
Write the criteria
Each criterion has a label, a weight, and one thing it reads. It is all or
nothing. The criterion either earns its full weight or earns zero. See
what a criterion can read below.
4
Choose when it recomputes
When the record changes, and nightly is the default and is almost always
right. See when it recomputes.
Field tests cover is any of, is not any of, is empty, is not empty,
at least, at most and contains.
A field criterion can read a computed property, a
Usage property, a
rollup or a
formula, the same way it reads one somebody
typed in. That is how you score on product usage: point at least at
API calls (30d) and the rubric does the rest.A Usage property is aggregated live each time the rubric runs, so the score
is exact at the moment it was calculated rather than reading a stored figure. If
the property is misconfigured, its line shows the reason and is left out of
the score entirely, rather than quietly counting as a criterion the record
failed.
There is no “ask AI” criterion, on purpose. An AI-written score is one nobody
can argue with. Instead, have a property agent fill a
normal property, then read that property with a field criterion. The AI’s
contribution then earns its points as one visible line of the breakdown that
you can see, weight, and remove.
Add up the weight every criterion earned, then rescale against the total of all
the positive weights. So a rubric of four criteria worth 30, 30, 20 and 20
that earns the first two scores 60.Weights can be negative, a penalty. A penalty subtracts from what the
positive criteria earned and is left out of the rescaling, so adding one cannot
inflate everything else.
Rescaling is why you can add a fifth criterion to a four-criterion rubric
without every existing record’s score dropping. Scores only move when something
about those records moves.
A band is a label and a floor. Scores take the highest band they clear, and
the lowest band catches everything underneath the one above it, so there is no
gap a score can fall into and no overlap where two bands both match.Each band also carries a colour, which is how an inverted grade works: churn
risk puts green on Low and red on High, the opposite of every other preset.
A lead with a work email at a 200-person company who has not replied scores
45, a C. The breakdown says exactly which two lines it missed.
Deal confidence, on Deals
Criterion
Weight
Reads
Past the demo
30
Field: Stage is any of Proposal, Negotiation
Champion identified
20
Field: Champion is not empty
Two or more calls this quarter
25
Count: 2+ calls in 90 days
Talked to us in the last 14 days
25
Recency: conversation within 14 days
No open blocker
−20
Signal: an open blocker signal (penalty)
Set Recompute to When the record changes, and nightly: the two
time-based criteria go stale on their own, and a deal nobody has touched is
exactly the one you want to hear about.
Customer health, on Accounts
Criterion
Weight
Reads
On a paid plan
30
Field: Plan is not any of Trial, Free
Spoke to us this month
25
Recency: conversation within 30 days
Three or more sessions this quarter
25
Count: 3+ conversations in 90 days
Named owner
20
Field: Owner is not empty
Open “went quiet” signal
−25
Signal: account.went_quiet (penalty)
Onboarding health, on Accounts
Driven by product usage rather than by who has spoken to whom, so a quiet
customer who is using the thing every day reads as healthy.
Criterion
Weight
Reads
Activated: sent a first event
30
Field: API calls (all time) at least 1
Using it week to week
30
Field: API calls (30d) at least 20
More than one seat in use
20
Field: Seats used at least 2
Reached out for help
20
Recency: conversation within 30 days
An account that has activated and uses it weekly, on one seat and with no
contact, scores 60: Steady. Sort the view by the score and work up
from the bottom.
Churn risk, on Accounts
The same facts as health, pointed the other way. Set Reads as to
A higher score is worse and write the criteria so that firing means bad
news.
Criterion
Weight
Reads
No reply in 30 days
30
Field: Last contacted is empty, or recency inverted
Still on a trial plan
25
Field: Plan is any of Trial
No named owner
20
Field: Owner is empty
Open “went quiet” signal
25
Signal: account.went_quiet
An account hitting the first and the last scores 55: Elevated, in
amber, with a red arrow if it climbed to get there.
A property the rubric reads is written, and a nightly sweep. The default.
Only when the record changes
A property the rubric reads is written.
Only when someone asks
Nothing automatic: the ↻ in the grade’s panel.
Anything reading recency, a count or a signal needs the nightly run.
Those criteria only become true with the passage of time, and a quiet account is
precisely the one nobody is editing, so with Only when the record changes, a
health score can never slip on its own.
The score, the band, the breakdown that produced it, and a short history of
recent scores that drives the trend arrow. Sorting, filtering and a table’s
average / min / max footer all see the score as a plain number, so a
grade behaves like any other numeric column.Click the grade to open its panel. It shows:
the score, its band, and a small line of recent scores beside the change
(“+14 since 15 Aug”)
the points earned against the points possible (“82 earned of 100 possible”).
Penalties count against what was earned, never toward what was possible
every band with the score it starts at, with the current band highlighted
each criterion, what it tested (“Stage is Proposal or Negotiation”, “At least
3 calls in 90 days”), and what it earned
To show the panel on the record page itself instead of behind a click, add the
Grade block to the record layout and pick the grade it shows.What each criterion tested is saved when the score is computed. Scores computed
before this was added show the criterion’s name only, until they are next
recomputed.
Open the grade’s panel and type a score. That marks the value manual: it
replaces the computed one and drops the breakdown, because the rubric’s
explanation no longer describes the number on screen. The trend history is kept,
so the arrow survives an override. Clear returns the record to the rubric.
A grade with no criteria is never scored, deliberately: a rubric with
nothing in it would score every record 0, and 0 is not “ungraded”, it is
the worst lead in the workspace on a number your team sorts by. Add at least
one criterion. An empty cell also means a record the rubric has simply not
run over yet, which the next nightly sweep or edit fixes.
The score never changes
Check When it recomputes. On Only when the record changes, nothing
reading recency, a count or a signal can ever move the score, because those
criteria only become true with the passage of time. Switch the property to
When the record changes, and nightly, or press the ↻ in the grade’s panel
to run it now.
The arrow is green when the score got worse
That grade reads the wrong way round. Open the property and set Reads as
to A higher score is worse for anything measuring risk. It changes nothing
about the score or the rubric, only whether a rising number is shown as good
news, and a preset sets it for you.
A criterion fires but the line is red
On a grade that reads A higher score is worse, an earned line is bad news
by definition: “No reply in 30 days, +30” means the criterion worked and
the account got worse. The colour describes the account, not the criterion.
A band never appears
Bands are matched by the highest floor a score clears, so a band whose
floor sits above every score in practice is unreachable, and two bands
sharing a floor make the lower one dead. A band missing a label or a floor is
dropped entirely and will not show in the editor either.
A criterion I wrote does not match
A criterion written against a select or a user field matches either the
option’s label or the stored value, so “Qualified” and the option itself both
work. If a field is genuinely empty on the record, the criterion earns
nothing and the line shows 0 of <weight> rather than being hidden.
The breakdown does not match the criteria I can see
The explanation is snapshotted with the score, not recomputed when you
open it. If you have edited the rubric since, the panel still explains the
score that was produced by the old one. Press ↻ to score the record against
the rubric as it stands now.
Recommendations: the open recommendations a signal criterion can read.
Rollup: aggregate across related records, useful as an input to a grade.
Formula: compute a value from other fields on the same record.
Was this page helpful?
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Custral Docs","colors":{"primary":"#5E7CFF","light":"#5E7CFF","dark":"#5E7CFF"},"logo":{"light":"https://mintcdn.com/custral/9h_119tROzHTKUiS/assets/logos/light.svg?fit=max\u0026auto=format\u0026n=9h_119tROzHTKUiS\u0026q=85\u0026s=50b063929ddff7335cc4db8352ae694a","dark":"https://mintcdn.com/custral/9h_119tROzHTKUiS/assets/logos/dark.svg?fit=max\u0026auto=format\u0026n=9h_119tROzHTKUiS\u0026q=85\u0026s=4025f09bcbe60697aef60a5bb3f849f0"},"favicon":"https://mintcdn.com/custral/NGCdls_pt-1YDx5S/favicon.svg?fit=max\u0026auto=format\u0026n=NGCdls_pt-1YDx5S\u0026q=85\u0026s=3a0ce3e846a625e7bc5e70aafe82cffa","navbar":{"links":[{"href":"https://custral.com","label":"Get Started"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.custral.com"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/custral"},"links":[{"header":"Resources","items":[{"label":"Status Page","href":"https://status.custral.com"},{"label":"Blog","href":"https://blog.custral.com"}]},{"header":"Support","items":[{"label":"Get support","href":"/support"},{"label":"hello@custral.com","href":"mailto:hello@custral.com"}]}]},"search":{"prompt":"Search Custral docs..."},"seo":{"metatags":{"og:image":"/images/og-docs.png","og:image:width":"2400","og:image:height":"1260","twitter:card":"summary_large_image","twitter:image":"/images/og-docs.png"}},"banner":{"content":"New: Focus Mode sorts your inbox, records open in a peek, a rebuilt mobile app, and a daily brief. [See what's new](/product/updates)","dismissible":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":false},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"custral","hasAudioNarration":false,"actualSubdomain":"custral","customDomains":["docs.custral.com"],"gitSource":{"type":"github","owner":"custral","repo":"custral-mono","deployBranch":"master","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ade1ad5cc4d8fc7f4e59b84","collectionId":"a149e1a3-54d3-4769-89c2-5031be517fb3","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ade1ad5cc4d8fc7f4e59b84"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ae601488b8badc2e429ed75","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"Documentation","count":317},{"language":"default","tag":"Developer References","count":108},{"language":"default","tag":"Communications","count":66},{"language":"default","tag":"Data Structures","count":60},{"language":"default","tag":"API Reference","count":56},{"language":"default","tag":"Endpoints","count":49},{"language":"default","tag":"Blocks","count":46},{"language":"default","tag":"Properties","count":40},{"language":"default","tag":"Getting Started","count":37},{"language":"default","tag":"Embedded Components","count":35}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".cxh{--brand:#5E7CFF;--brand-ink:#3f57e6;--brand-soft:#eef1ff;--g1:#5E7CFF;--g2:#8b5cf6;--g3:#ff5f7a;--bg:#ffffff;--bg2:#fbfbfe;--card:#ffffff;--panel:#f6f7fb;--border:#e8e9f3;--border-soft:#f0f1f8;--text:#191b26;--muted:#5b5e73;--faint:#9a9db2;--code-bg:#0f1119;--code-text:#e7e9f5;--a1:#5E7CFF;--a2:#8b5cf6;--a3:#ff5f7a;--a4:#10b981;--k:#c4b5fd;--s:#86efac;--f:#93c5fd;--c:#6b7089;--p:#f0a4b8;--shadow-sm:0 1px 2px rgba(20,22,50,.05),0 3px 10px rgba(20,22,50,.05);--shadow-lg:0 2px 6px rgba(20,22,50,.06),0 20px 50px rgba(30,34,80,.13);--dot:rgba(94,124,255,.14);--radius:14px;--mono:ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,monospace;color:var(--text)}:root[data-theme=dark] .cxh,html.dark .cxh,html[data-theme=dark] .cxh{--brand:#7d90ff;--brand-ink:#a6b2ff;--brand-soft:#191c2e;--bg:#0c0d14;--bg2:#0a0b11;--card:#14161f;--panel:#111219;--border:#242738;--border-soft:#1b1e29;--text:#e9eaf2;--muted:#a0a3b8;--faint:#6f7288;--code-bg:#0a0b12;--code-text:#e7e9f5;--shadow-sm:0 1px 2px rgba(0,0,0,.4),0 3px 10px rgba(0,0,0,.35);--shadow-lg:0 2px 6px rgba(0,0,0,.5),0 24px 60px rgba(0,0,0,.6);--dot:rgba(125,144,255,.14)}.cxh *{box-sizing:border-box}.cxh a{color:inherit;text-decoration:none}.cxh .wrap{max-width:1120px;margin:0 auto;padding-inline:28px}.cxh .fullbleed{width:100%}.cxh .hero{position:relative;overflow:hidden;border-bottom:1px solid var(--border-soft);background:var(--bg)}.cxh .hero-bg,.cxh .hero-dots{position:absolute;inset:0;z-index:0}.cxh .hero-bg{background:radial-gradient(680px 360px at 80% -10%,color-mix(in srgb,var(--brand) 22%,transparent),transparent 70%),radial-gradient(560px 300px at 6% 0%,color-mix(in srgb,var(--g2) 13%,transparent),transparent 70%)}.cxh .hero-dots{opacity:.9;background-image:radial-gradient(var(--dot) 1px,transparent 1.4px);background-size:22px 22px;mask-image:linear-gradient(180deg,#000,transparent 80%);-webkit-mask-image:linear-gradient(180deg,#000,transparent 80%)}.cxh .hero-in{position:relative;z-index:1;display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;padding:66px 0 60px}.cxh .eyebrow{font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--brand-ink)}.cxh h1{font-size:46px;line-height:1.04;letter-spacing:-.03em;margin:14px 0 0;font-weight:750;text-wrap:balance;color:var(--text)}.cxh .lead{font-size:17.5px;line-height:1.55;color:var(--muted);margin:18px 0 0;max-width:34ch}.cxh .cta{display:flex;align-items:center;gap:12px;margin-top:28px;flex-wrap:wrap}.cxh .btn{display:inline-flex;align-items:center;gap:7px;height:40px;padding:0 18px;border-radius:9px;font-size:14px;font-weight:600;border:1px solid transparent;cursor:pointer}.cxh .btn.primary{background:var(--brand);color:#fff;box-shadow:0 1px 2px rgba(63,87,230,.35)}.cxh .btn.ghost{background:0 0;color:var(--text);border-color:var(--border)}.cxh .btn.ghost:hover{border-color:color-mix(in srgb,var(--brand) 45%,var(--border))}.cxh .cta .clink{font-size:14px;font-weight:600;color:var(--brand-ink);display:inline-flex;align-items:center;gap:6px}.cxh .herovis{position:relative;padding:6px 8px 26px 0}.cxh .appwin{position:relative;z-index:1;background:var(--card);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-lg);overflow:hidden;transform:rotate(-.6deg)}.cxh .winbar{display:flex;align-items:center;gap:7px;padding:9px 13px;border-bottom:1px solid var(--border-soft);background:var(--panel)}.cxh .tl{width:10px;height:10px;border-radius:50%}.cxh .tl.r{background:#ff5f57}.cxh .tl.y{background:#febc2e}.cxh .tl.g{background:#28c840}.cxh .winbar .wt{margin-left:8px;font-size:12px;font-weight:600;color:var(--muted)}.cxh .winbar .wpill{margin-left:auto;font-size:10.5px;color:var(--brand-ink);background:var(--brand-soft);border-radius:20px;padding:2px 8px;font-weight:600}.cxh .winbody{display:flex;min-height:214px}.cxh .side,.cxh .tcol ul{display:flex;flex-direction:column;gap:2px}.cxh .side{flex:0 0 120px;background:var(--bg2);border-right:1px solid var(--border-soft);padding:10px 8px}.cxh .snav{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);padding:6px 8px;border-radius:7px;font-weight:500}.cxh .snav .g{width:15px;text-align:center;opacity:.85}.cxh .snav.on{background:var(--brand-soft);color:var(--brand-ink);font-weight:600}.cxh .main{flex:1;padding:6px 4px}.cxh .conv{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:9px}.cxh .conv+.conv{border-top:1px solid var(--border-soft)}.cxh .conv .av{flex:0 0 auto;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;color:#fff;font-size:11px;font-weight:700}.cxh .conv .av.a1{background:var(--a1)}.cxh .conv .av.a2{background:var(--a2)}.cxh .conv .av.a3{background:var(--a3)}.cxh .conv .av.a4{background:var(--a4)}.cxh .conv .ct{min-width:0;flex:1}.cxh .conv .cn{font-size:12.5px;font-weight:600;display:flex;align-items:center;gap:6px;color:var(--text)}.cxh .conv .ch{font-size:9.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--faint);border:1px solid var(--border);border-radius:5px;padding:0 4px}.cxh .conv .cs{display:block;font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}.cxh .conv .cd{flex:0 0 auto;font-size:10.5px;color:var(--faint)}.cxh .conv .un{width:7px;height:7px;border-radius:50%;background:var(--brand);flex:0 0 auto}.cxh .codecard{position:absolute;z-index:2;right:-6px;bottom:-6px;width:290px;border-radius:12px;background:var(--code-bg);box-shadow:var(--shadow-lg);border:1px solid rgba(255,255,255,.07);overflow:hidden;transform:rotate(2.2deg)}.cxh .codebar{display:flex;align-items:center;gap:6px;padding:8px 11px;border-bottom:1px solid rgba(255,255,255,.07)}.cxh .codebar .tl{width:9px;height:9px}.cxh .codebar .name{margin-left:6px;font:11px/1 var(--mono);color:#8b8fa8}.cxh pre.code{margin:0;white-space:pre;text-align:left;padding:12px 13px 14px;font:11px/1.65 var(--mono);color:var(--code-text);overflow:hidden;background:0 0;border:0}.cxh .k{color:var(--k)}.cxh .s{color:var(--s)}.cxh .f{color:var(--f)}.cxh .c{color:var(--c)}.cxh .p{color:var(--p)}.cxh section{padding-block:56px}.cxh .pathsec{padding-block:48px 8px}.cxh .tasksec{padding-top:40px}.cxh .sechead{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:26px}.cxh .path h4,.cxh h2{font-size:22px;letter-spacing:-.02em;font-weight:700;color:var(--text)}.cxh .path p,.cxh .sechead .sub{font-size:13.5px;color:var(--faint)}.cxh .paths{display:grid;grid-template-columns:1fr 1fr;gap:16px}.cxh .path{display:flex;gap:14px;align-items:flex-start;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px;box-shadow:var(--shadow-sm)}.cxh .path:hover{border-color:color-mix(in srgb,var(--brand) 45%,var(--border))}.cxh .path .pic,.cxh .tcol h3 .ic{background:var(--brand-soft);display:grid;place-items:center}.cxh .path .pic{flex:0 0 auto;width:38px;height:38px;border-radius:10px;color:var(--brand-ink);font-size:17px}.cxh .path h4{margin:2px 0 4px;font-size:15.5px;font-weight:650;letter-spacing:-.01em}.cxh .path p{margin:0;color:var(--muted);line-height:1.5}.cxh .path .go{margin-top:10px;font-size:13px;font-weight:600;display:inline-flex;gap:6px}.cxh .tasks{display:grid;grid-template-columns:repeat(3,1fr);gap:34px}.cxh .tcol h3,.cxh .tcol li a{display:flex;align-items:center}.cxh .tcol h3{font-size:12.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin:0 0 14px;gap:8px}.cxh .tcol h3 .ic{width:22px;height:22px;border-radius:6px;font-size:11px}.cxh .tcol ul{list-style:none;margin:0;padding:0}.cxh .tcol li,.cxh h2{margin:0}.cxh .tcol li a{gap:9px;padding:7px 9px;margin:0 -9px;border-radius:8px;font-size:14px;color:var(--text);font-weight:450}.cxh .dgroup h3 .chip,.cxh .path .go,.cxh .tcol h3 .ic,.cxh .tcol li a:hover{color:var(--brand-ink)}.cxh .tcol li a .arw{color:var(--faint);font-size:12px;margin-left:auto;opacity:0;transition:.15s}.cxh .tcol li a:hover .arw{opacity:1}.cxh .dirwrap{background:var(--bg2);border-top:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft)}.cxh .dir{display:grid;grid-template-columns:repeat(2,1fr);gap:14px 40px}.cxh .dgroup{padding:4px 0}.cxh .dgroup h3{gap:10px;font-size:14px;font-weight:700;margin:0 0 12px;letter-spacing:-.01em}.cxh .dgroup h3 .chip{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;font-size:13px;background:var(--brand-soft)}.cxh .drow{display:flex;gap:12px;padding:9px 10px;margin:0 -10px;border-radius:10px;align-items:flex-start}.cxh .drow:hover,.cxh .tcol li a:hover{background:var(--panel)}.cxh .drow .di,.cxh .helprow a{font-size:13px;color:var(--muted)}.cxh .drow .di{flex:0 0 auto;width:30px;height:30px;border-radius:8px;border:1px solid var(--border);background:var(--card);display:grid;place-items:center;margin-top:1px}.cxh .drow .dt{font-size:14px;font-weight:600;letter-spacing:-.01em;color:var(--text)}.cxh .drow .dd{font-size:12.5px;color:var(--muted);line-height:1.45;margin-top:1px}.cxh .dgroup h3,.cxh .helprow{display:flex;align-items:center}.cxh .helprow{flex-wrap:wrap;gap:14px 22px;padding:26px 0 8px}.cxh .helprow a{font-weight:500}.cxh .dgroup h3,.cxh .helprow a:hover{color:var(--text)}.cxh .helprow .sep{color:var(--faint)}.cxh .helprow .lead-in{font-size:13px;color:var(--faint);margin-right:6px}.cxh .supportband{background:var(--bg2);border-top:1px solid var(--border);border-bottom:1px solid var(--border);margin-top:40px}.cxh .supportrow{display:grid;grid-template-columns:1fr auto;gap:32px;align-items:center;padding:34px 0}.cxh .supportrow h3{font-size:19px;font-weight:650;letter-spacing:-.01em;margin:0 0 6px}.cxh .supportrow p{font-size:14px;color:var(--muted);margin:0 0 12px;max-width:44ch}.cxh .supportcontacts{display:flex;gap:10px;flex-wrap:wrap}.cxh .scontact{display:flex;align-items:center;gap:11px;padding:12px 16px;border:1px solid var(--border);border-radius:11px;background:var(--bg);min-width:236px;transition:border-color .15s ease}.cxh .scontact:hover{border-color:var(--brand)}.cxh .scontact .si{width:30px;height:30px;flex:none;display:flex;align-items:center;justify-content:center;border-radius:8px;background:var(--brand-soft);color:var(--brand-ink);font-size:14px}.cxh .scontact .sl{display:block;font-size:11.5px;color:var(--faint);letter-spacing:.01em}.cxh .scontact .sv{display:block;font-size:14px;font-weight:600;color:var(--text)}@media (max-width:920px){.cxh .hero-in{grid-template-columns:1fr;gap:44px;padding:48px 0 56px}.cxh .herovis{padding:0 8px 20px 0;max-width:520px}.cxh .tasks{gap:26px}.cxh .paths,.cxh .tasks{grid-template-columns:1fr}.cxh .dir,.cxh .supportrow{grid-template-columns:1fr;gap:8px 0}.cxh h1{font-size:36px}.cxh .supportrow{gap:22px}.cxh .scontact{min-width:0;flex:1 1 100%}}.nav-tag-pill-text[data-nav-tag=OBJECT]{color:rgb(82 82 91);background:rgb(113 113 122/.14);font-size:.5rem;white-space:nowrap}.dark .nav-tag-pill-text[data-nav-tag=OBJECT]{color:rgb(161 161 170);background:rgb(161 161 170/.16)}div:has(>.nav-tag-pill>[data-nav-tag=OBJECT]){order:-1;width:2rem;margin-right:6px;overflow:visible}.update-container>div:first-child>div.break-words{display:none}.card-group .card>img.object-cover{aspect-ratio:16/10;height:auto;object-position:top center}"}],"page":{"pagePath":"data/properties/complex/grade","slug":"/data/properties/complex/grade","pageMetadata":{"title":"Grade","description":"Score a record out of 100 from a rubric you write, with the reasoning attached.","icon":"gauge-high","href":"/data/properties/complex/grade"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Score a record out of 100 from a rubric you write, with the reasoning attached.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const Shot=({id,caption,gif=false,phone=false})=>{const base=`/images/screens/${id}`;const size={width:`100%`,maxWidth:phone?320:`100%`,height:`auto`};const img=`mx-auto rounded-xl border border-gray-950/10 dark:border-white/10`;return _jsxs(`figure`,{className:`mint-my-6`,\"data-shot\":id,children:[gif?_jsx(`img`,{src:`${base}.gif`,alt:caption,className:`mint-mx-auto mint-rounded-xl mint-border mint-border-gray-950/10 dark:mint-border-white/10`,style:size}):_jsxs(_Fragment,{children:[_jsx(`img`,{src:`${base}-light.png`,alt:caption,className:`${`mint-mx-auto mint-rounded-xl mint-border mint-border-gray-950/10 dark:mint-border-white/10`} mint-block dark:mint-hidden`,style:size}),_jsx(`img`,{src:`${base}-dark.png`,alt:caption,className:`${`mint-mx-auto mint-rounded-xl mint-border mint-border-gray-950/10 dark:mint-border-white/10`} mint-hidden dark:mint-block`,style:size})]}),caption\u0026\u0026_jsx(`figcaption`,{className:`mint-mt-2 mint-text-center mint-text-sm mint-text-gray-500 dark:mint-text-gray-400`,children:caption})]})};function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Heading,Note,Step,Steps,Table,Tip,Warning,_MdxComponentBoundary}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`A Grade scores a record from `,_jsx(_components.strong,{children:`0 to 100`}),` using a rubric you write: a list of\ncriteria, each worth some weight, each reading something the workspace already\nknows. The score lands in a band you name, and every grade carries the\n`,_jsx(_components.strong,{children:`breakdown`}),` that produced it, so “why is this a B?” is one click rather than a\nguess.`]}),`\n`,_jsxs(_components.p,{children:[`It is one property type behind four different jobs. Pick it from `,_jsx(_components.strong,{children:`Complex`}),` in\nthe property type list.`]}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Lead fit`,icon:`user-check`,children:_jsxs(_components.p,{children:[`How promising a new lead is. `,_jsx(_components.code,{children:`A`}),` / `,_jsx(_components.code,{children:`B`}),` / `,_jsx(_components.code,{children:`C`}),` / `,_jsx(_components.code,{children:`D`}),`.`]})}),_jsx(Card,{title:`Deal confidence`,icon:`handshake`,children:_jsxs(_components.p,{children:[`How likely an open deal is to close. `,_jsx(_components.code,{children:`Committed`}),` down to `,_jsx(_components.code,{children:`Unlikely`}),`.`]})}),_jsx(Card,{title:`Customer health`,icon:`heart-pulse`,children:_jsxs(_components.p,{children:[`Whether a live account is in good shape. `,_jsx(_components.code,{children:`Healthy`}),` down to `,_jsx(_components.code,{children:`At risk`}),`.`]})}),_jsx(Card,{title:`Churn risk`,icon:`triangle-exclamation`,children:_jsxs(_components.p,{children:[`How likely a customer is to leave. A `,_jsx(_components.strong,{children:`high`}),` score is bad news.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`setting-one-up`,children:`Setting one up`}),`\n`,_jsx(_MdxComponentBoundary,{name:`Shot`,children:_jsx(Shot,{id:`data/property-grade`,caption:`Creating a Grade property.`})}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Add the property and pick a preset`,children:_jsxs(_components.p,{children:[`Create a Grade property on the object you want to score (Contacts, Deals,\nAccounts), then choose `,_jsx(_components.strong,{children:`Start from a preset`}),`. A preset fills in the bands\nand sets which way the score reads. It deliberately does `,_jsx(_components.strong,{children:`not`}),` write any\ncriteria: a rubric depends on your own properties, so anything it invented\nwould point at fields you may not have.`]})}),_jsx(Step,{title:`Check which way it reads`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Reads as`}),` decides whether a rising score is good news. Leave it on\n`,_jsx(_components.em,{children:`A higher score is better`}),` for fit, confidence and health. Set it to\n`,_jsx(_components.em,{children:`A higher score is worse`}),` for churn risk, so a climbing score shows a red\narrow rather than a green one.`]})}),_jsx(Step,{title:`Write the criteria`,children:_jsxs(_components.p,{children:[`Each criterion has a label, a weight, and one thing it reads. It is all or\nnothing. The criterion either earns its full weight or earns zero. See\n`,_jsx(_components.a,{href:`#what-a-criterion-can-read`,children:`what a criterion can read`}),` below.`]})}),_jsx(Step,{title:`Choose when it recomputes`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When the record changes, and nightly`}),` is the default and is almost always\nright. See `,_jsx(_components.a,{href:`#when-it-recomputes`,children:`when it recomputes`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-a-criterion-can-read`,children:`What a criterion can read`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Reads`}),_jsx(_components.th,{children:`What it asks`}),_jsx(_components.th,{children:`Example`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`A field`})}),_jsx(_components.td,{children:`Does a property on this record pass a test?`}),_jsxs(_components.td,{children:[`Stage is any of `,_jsx(_components.code,{children:`Demo booked`}),`, `,_jsx(_components.code,{children:`Proposal`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Recency`})}),_jsx(_components.td,{children:`Has there been activity in the last N days?`}),_jsx(_components.td,{children:`A conversation in the last 14 days`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`A count`})}),_jsx(_components.td,{children:`Have there been at least N in a window?`}),_jsx(_components.td,{children:`3 or more calls this quarter`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`A signal`})}),_jsxs(_components.td,{children:[`Is a `,_jsx(_components.a,{href:`/ai/recommendations`,children:`signal`}),` open on this record?`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`account.went_quiet`})})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Field tests cover `,_jsx(_components.em,{children:`is any of`}),`, `,_jsx(_components.em,{children:`is not any of`}),`, `,_jsx(_components.em,{children:`is empty`}),`, `,_jsx(_components.em,{children:`is not empty`}),`,\n`,_jsx(_components.em,{children:`at least`}),`, `,_jsx(_components.em,{children:`at most`}),` and `,_jsx(_components.em,{children:`contains`}),`.`]}),`\n`,_jsxs(Note,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A field criterion can read a computed property`}),`, a\n`,_jsx(_components.a,{href:`/data/properties/complex/usage`,children:`Usage`}),` property, a\n`,_jsx(_components.a,{href:`/data/properties/complex/rollup`,children:`rollup`}),` or a\n`,_jsx(_components.a,{href:`/data/properties/complex/formula`,children:`formula`}),`, the same way it reads one somebody\ntyped in. That is how you score on product usage: point `,_jsx(_components.em,{children:`at least`}),` at\n`,_jsx(_components.code,{children:`API calls (30d)`}),` and the rubric does the rest.`]}),_jsxs(_components.p,{children:[`A Usage property is aggregated `,_jsx(_components.strong,{children:`live`}),` each time the rubric runs, so the score\nis exact at the moment it was calculated rather than reading a stored figure. If\nthe property is misconfigured, its line shows the reason and is left `,_jsx(_components.strong,{children:`out of\nthe score`}),` entirely, rather than quietly counting as a criterion the record\nfailed.`]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`There is no “ask AI” criterion, on purpose. An AI-written score is one nobody\ncan argue with. Instead, have a `,_jsx(_components.a,{href:`/ai/property-agents/overview`,children:`property agent`}),` fill a\nnormal property, then read that property with a field criterion. The AI’s\ncontribution then earns its points as one visible line of the breakdown that\nyou can see, weight, and remove.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`how-the-score-is-worked-out`,children:`How the score is worked out`}),`\n`,_jsxs(_components.p,{children:[`Add up the weight every criterion earned, then rescale against the total of all\nthe `,_jsx(_components.strong,{children:`positive`}),` weights. So a rubric of four criteria worth 30, 30, 20 and 20\nthat earns the first two scores `,_jsx(_components.code,{children:`60`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Weights can be `,_jsx(_components.strong,{children:`negative`}),`, a penalty. A penalty subtracts from what the\npositive criteria earned and is left out of the rescaling, so adding one cannot\ninflate everything else.`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Rescaling is why you can add a fifth criterion to a four-criterion rubric\nwithout every existing record’s score dropping. Scores only move when something\nabout those records moves.`})}),`\n`,_jsx(Heading,{level:`2`,id:`bands`,children:`Bands`}),`\n`,_jsxs(_components.p,{children:[`A band is a `,_jsx(_components.strong,{children:`label and a floor`}),`. Scores take the highest band they clear, and\nthe lowest band catches everything underneath the one above it, so there is no\ngap a score can fall into and no overlap where two bands both match.`]}),`\n`,_jsxs(_components.p,{children:[`Each band also carries a `,_jsx(_components.strong,{children:`colour`}),`, which is how an inverted grade works: churn\nrisk puts green on `,_jsx(_components.code,{children:`Low`}),` and red on `,_jsx(_components.code,{children:`High`}),`, the opposite of every other preset.`]}),`\n`,_jsx(Heading,{level:`2`,id:`worked-examples`,children:`Worked examples`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`Lead fit, on Contacts`,id:`lead-fit-on-contacts`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Criterion`}),_jsx(_components.th,{children:`Weight`}),_jsx(_components.th,{children:`Reads`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Works at a target-size company`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`30`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`Employees`}),` at least `,_jsx(_components.code,{children:`50`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Job title is a decision maker`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`25`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`Title`}),` contains `,_jsx(_components.code,{children:`Head of`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Has a work email`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`15`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`Email`}),` is not empty`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Replied in the last 30 days`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`30`}),_jsx(_components.td,{children:`Recency: conversation within 30 days`})]})]})]}),_jsxs(_components.p,{children:[`A lead with a work email at a 200-person company who has not replied scores\n`,_jsx(_components.code,{children:`45`}),`, a `,_jsx(_components.code,{children:`C`}),`. The breakdown says exactly which two lines it missed.`]})]}),_jsxs(Accordion,{title:`Deal confidence, on Deals`,id:`deal-confidence-on-deals`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Criterion`}),_jsx(_components.th,{children:`Weight`}),_jsx(_components.th,{children:`Reads`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Past the demo`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`30`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`Stage`}),` is any of `,_jsx(_components.code,{children:`Proposal`}),`, `,_jsx(_components.code,{children:`Negotiation`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Champion identified`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`20`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`Champion`}),` is not empty`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Two or more calls this quarter`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`25`}),_jsx(_components.td,{children:`Count: 2+ calls in 90 days`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Talked to us in the last 14 days`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`25`}),_jsx(_components.td,{children:`Recency: conversation within 14 days`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`No open blocker`}),_jsx(_components.td,{children:`−20`}),_jsx(_components.td,{children:`Signal: an open blocker signal (penalty)`})]})]})]}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.strong,{children:`Recompute`}),` to `,_jsx(_components.em,{children:`When the record changes, and nightly`}),`: the two\ntime-based criteria go stale on their own, and a deal nobody has touched is\nexactly the one you want to hear about.`]})]}),_jsx(Accordion,{title:`Customer health, on Accounts`,id:`customer-health-on-accounts`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Criterion`}),_jsx(_components.th,{children:`Weight`}),_jsx(_components.th,{children:`Reads`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`On a paid plan`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`30`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`Plan`}),` is not any of `,_jsx(_components.code,{children:`Trial`}),`, `,_jsx(_components.code,{children:`Free`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Spoke to us this month`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`25`}),_jsx(_components.td,{children:`Recency: conversation within 30 days`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Three or more sessions this quarter`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`25`}),_jsx(_components.td,{children:`Count: 3+ conversations in 90 days`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Named owner`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`20`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`Owner`}),` is not empty`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Open “went quiet” signal`}),_jsx(_components.td,{children:`−25`}),_jsxs(_components.td,{children:[`Signal: `,_jsx(_components.code,{children:`account.went_quiet`}),` (penalty)`]})]})]})]})}),_jsxs(Accordion,{title:`Onboarding health, on Accounts`,id:`onboarding-health-on-accounts`,children:[_jsx(_components.p,{children:`Driven by product usage rather than by who has spoken to whom, so a quiet\ncustomer who is using the thing every day reads as healthy.`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Criterion`}),_jsx(_components.th,{children:`Weight`}),_jsx(_components.th,{children:`Reads`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Activated: sent a first event`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`30`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`API calls (all time)`}),` at least `,_jsx(_components.code,{children:`1`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Using it week to week`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`30`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`API calls (30d)`}),` at least `,_jsx(_components.code,{children:`20`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`More than one seat in use`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`20`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`Seats used`}),` at least `,_jsx(_components.code,{children:`2`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Reached out for help`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`20`}),_jsx(_components.td,{children:`Recency: conversation within 30 days`})]})]})]}),_jsxs(_components.p,{children:[`An account that has activated and uses it weekly, on one seat and with no\ncontact, scores `,_jsx(_components.code,{children:`60`}),`: `,_jsx(_components.strong,{children:`Steady`}),`. Sort the view by the score and work up\nfrom the bottom.`]})]}),_jsxs(Accordion,{title:`Churn risk, on Accounts`,id:`churn-risk-on-accounts`,children:[_jsxs(_components.p,{children:[`The same facts as health, pointed the other way. Set `,_jsx(_components.strong,{children:`Reads as`}),` to\n`,_jsx(_components.em,{children:`A higher score is worse`}),` and write the criteria so that `,_jsx(_components.strong,{children:`firing means bad\nnews`}),`.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Criterion`}),_jsx(_components.th,{children:`Weight`}),_jsx(_components.th,{children:`Reads`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`No reply in 30 days`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`30`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`Last contacted`}),` is empty, or recency inverted`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Still on a trial plan`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`25`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`Plan`}),` is any of `,_jsx(_components.code,{children:`Trial`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`No named owner`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`20`}),_jsxs(_components.td,{children:[`Field: `,_jsx(_components.code,{children:`Owner`}),` is empty`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Open “went quiet” signal`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`25`}),_jsxs(_components.td,{children:[`Signal: `,_jsx(_components.code,{children:`account.went_quiet`})]})]})]})]}),_jsxs(_components.p,{children:[`An account hitting the first and the last scores `,_jsx(_components.code,{children:`55`}),`: `,_jsx(_components.code,{children:`Elevated`}),`, in\namber, with a `,_jsx(_components.strong,{children:`red`}),` arrow if it climbed to get there.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`when-it-recomputes`,children:`When it recomputes`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`When the rubric runs`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`When the record changes, and nightly`}),_jsxs(_components.td,{children:[`A property the rubric reads is written, `,_jsx(_components.strong,{children:`and`}),` a nightly sweep. The default.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Only when the record changes`}),_jsx(_components.td,{children:`A property the rubric reads is written.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Only when someone asks`}),_jsx(_components.td,{children:`Nothing automatic: the ↻ in the grade’s panel.`})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Anything reading `,_jsx(_components.strong,{children:`recency`}),`, a `,_jsx(_components.strong,{children:`count`}),` or a `,_jsx(_components.strong,{children:`signal`}),` needs the nightly run.\nThose criteria only become true with the passage of time, and a quiet account is\nprecisely the one nobody is editing, so with `,_jsx(_components.em,{children:`Only when the record changes`}),`, a\nhealth score can never slip on its own.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`what-it-stores`,children:`What it stores`}),`\n`,_jsxs(_components.p,{children:[`The score, the band, the breakdown that produced it, and a short history of\nrecent scores that drives the trend arrow. Sorting, filtering and a table’s\n`,_jsx(_components.code,{children:`average`}),` / `,_jsx(_components.code,{children:`min`}),` / `,_jsx(_components.code,{children:`max`}),` footer all see the `,_jsx(_components.strong,{children:`score`}),` as a plain number, so a\ngrade behaves like any other numeric column.`]}),`\n`,_jsx(_components.p,{children:`Click the grade to open its panel. It shows:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`the score, its band, and a small line of recent scores beside the change\n(“+14 since 15 Aug”)`}),`\n`,_jsx(_components.li,{children:`the points earned against the points possible (“82 earned of 100 possible”).\nPenalties count against what was earned, never toward what was possible`}),`\n`,_jsx(_components.li,{children:`every band with the score it starts at, with the current band highlighted`}),`\n`,_jsx(_components.li,{children:`each criterion, what it tested (“Stage is Proposal or Negotiation”, “At least\n3 calls in 90 days”), and what it earned`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`To show the panel on the record page itself instead of behind a click, add the\n`,_jsx(_components.strong,{children:`Grade`}),` block to the record layout and pick the grade it shows.`]}),`\n`,_jsx(_components.p,{children:`What each criterion tested is saved when the score is computed. Scores computed\nbefore this was added show the criterion’s name only, until they are next\nrecomputed.`}),`\n`,_jsx(Heading,{level:`2`,id:`setting-one-by-hand`,children:`Setting one by hand`}),`\n`,_jsxs(_components.p,{children:[`Open the grade’s panel and type a score. That marks the value `,_jsx(_components.strong,{children:`manual`}),`: it\nreplaces the computed one and drops the breakdown, because the rubric’s\nexplanation no longer describes the number on screen. The trend history is kept,\nso the arrow survives an override. `,_jsx(_components.strong,{children:`Clear`}),` returns the record to the rubric.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`The cell is empty on every record`,id:`the-cell-is-empty-on-every-record`,children:_jsxs(_components.p,{children:[`A grade with no criteria is never scored, deliberately: a rubric with\nnothing in it would score every record `,_jsx(_components.strong,{children:`0`}),`, and 0 is not “ungraded”, it is\nthe worst lead in the workspace on a number your team sorts by. Add at least\none criterion. An empty cell also means a record the rubric has simply not\nrun over yet, which the next nightly sweep or edit fixes.`]})}),_jsx(Accordion,{title:`The score never changes`,id:`the-score-never-changes`,children:_jsxs(_components.p,{children:[`Check `,_jsx(_components.strong,{children:`When it recomputes`}),`. On `,_jsx(_components.em,{children:`Only when the record changes`}),`, nothing\nreading recency, a count or a signal can ever move the score, because those\ncriteria only become true with the passage of time. Switch the property to\n`,_jsx(_components.em,{children:`When the record changes, and nightly`}),`, or press the ↻ in the grade’s panel\nto run it now.`]})}),_jsx(Accordion,{title:`The arrow is green when the score got worse`,id:`the-arrow-is-green-when-the-score-got-worse`,children:_jsxs(_components.p,{children:[`That grade reads the wrong way round. Open the property and set `,_jsx(_components.strong,{children:`Reads as`}),`\nto `,_jsx(_components.em,{children:`A higher score is worse`}),` for anything measuring risk. It changes nothing\nabout the score or the rubric, only whether a rising number is shown as good\nnews, and a preset sets it for you.`]})}),_jsx(Accordion,{title:`A criterion fires but the line is red`,id:`a-criterion-fires-but-the-line-is-red`,children:_jsxs(_components.p,{children:[`On a grade that reads `,_jsx(_components.em,{children:`A higher score is worse`}),`, an earned line is bad news\nby definition: “No reply in 30 days, +30” means the criterion worked `,_jsx(_components.strong,{children:`and`}),`\nthe account got worse. The colour describes the account, not the criterion.`]})}),_jsx(Accordion,{title:`A band never appears`,id:`a-band-never-appears`,children:_jsxs(_components.p,{children:[`Bands are matched by the `,_jsx(_components.strong,{children:`highest floor a score clears`}),`, so a band whose\nfloor sits above every score in practice is unreachable, and two bands\nsharing a floor make the lower one dead. A band missing a label or a floor is\ndropped entirely and will not show in the editor either.`]})}),_jsx(Accordion,{title:`A criterion I wrote does not match`,id:`a-criterion-i-wrote-does-not-match`,children:_jsxs(_components.p,{children:[`A criterion written against a select or a user field matches either the\noption’s label or the stored value, so “Qualified” and the option itself both\nwork. If a field is genuinely empty on the record, the criterion earns\nnothing and the line shows `,_jsx(_components.code,{children:`0 of \u003cweight>`}),` rather than being hidden.`]})}),_jsx(Accordion,{title:`The breakdown does not match the criteria I can see`,id:`the-breakdown-does-not-match-the-criteria-i-can-see`,children:_jsxs(_components.p,{children:[`The explanation is `,_jsx(_components.strong,{children:`snapshotted with the score`}),`, not recomputed when you\nopen it. If you have edited the rubric since, the panel still explains the\nscore that was produced by the old one. Press ↻ to score the record against\nthe rubric as it stands now.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`see-also`,children:`See also`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/ai/property-agents/overview`,children:`Property agents`}),`: have AI fill a property a criterion reads.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/ai/recommendations`,children:`Recommendations`}),`: the open recommendations a signal criterion can read.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/data/properties/complex/rollup`,children:`Rollup`}),`: aggregate across related records, useful as an input to a grade.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/data/properties/complex/formula`,children:`Formula`}),`: compute a value from other fields on the same record.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{Shot,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Grade","description":"Score a record out of 100 from a rubric you write, with the reasoning attached.","icon":"gauge-high","href":"/data/properties/complex/grade"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[140,1170,")=>null;function _cr"]]},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Setting one up","slug":"setting-one-up","depth":2,"children":[]},{"title":"What a criterion can read","slug":"what-a-criterion-can-read","depth":2,"children":[{"title":"How the score is worked out","slug":"how-the-score-is-worked-out","depth":3,"children":[]}]},{"title":"Bands","slug":"bands","depth":2,"children":[]},{"title":"Worked examples","slug":"worked-examples","depth":2,"children":[]},{"title":"When it recomputes","slug":"when-it-recomputes","depth":2,"children":[]},{"title":"What it stores","slug":"what-it-stores","depth":2,"children":[]},{"title":"Setting one by hand","slug":"setting-one-by-hand","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"See also","slug":"see-also","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/custral/17880bab12267dd5/index.js"],"dynamicCss":".mint-mx-auto {\n margin-left: auto;\n margin-right: auto\n}\n.mint-my-6 {\n margin-top: 1.5rem;\n margin-bottom: 1.5rem\n}\n.mint-mt-2 {\n margin-top: 0.5rem\n}\n.mint-block {\n display: block\n}\n.mint-hidden {\n display: none\n}\n.mint-rounded-xl {\n border-radius: 0.75rem\n}\n.mint-border {\n border-width: 1px\n}\n.mint-border-gray-950\\/10 {\n border-color: rgb(3 7 18 / 0.1)\n}\n.mint-text-center {\n text-align: center\n}\n.mint-text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem\n}\n.mint-text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1))\n}\n.dark\\:mint-block:is(.dark *) {\n display: block\n}\n.dark\\:mint-hidden:is(.dark *) {\n display: none\n}\n.dark\\:mint-border-white\\/10:is(.dark *) {\n border-color: rgb(255 255 255 / 0.1)\n}\n.dark\\:mint-text-gray-400:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1))\n}","subdomain":"custral","siteName":"Custral Docs","title":"Grade - Custral Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-19T21:39:46.695Z","originalFileLocation":"data/properties/complex/grade.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Score a record out of 100 from a rubric you write, with the reasoning attached.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Custral Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/custral/zNw7VJKFFusEr-3b/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/custral/zNw7VJKFFusEr-3b/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/custral/zNw7VJKFFusEr-3b/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/custral/zNw7VJKFFusEr-3b/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/custral/zNw7VJKFFusEr-3b/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/custral/zNw7VJKFFusEr-3b/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/custral/zNw7VJKFFusEr-3b/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/custral/zNw7VJKFFusEr-3b/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/custral/zNw7VJKFFusEr-3b/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Grade - Custral Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Score a record out of 100 from a rubric you write, with the reasoning attached.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Custral Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.custral.com/data/properties/complex/grade\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://custral.mintlify.app/images/og-docs.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Grade - Custral Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Score a record out of 100 from a rubric you write, with the reasoning attached.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://custral.mintlify.app/images/og-docs.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/custral/zNw7VJKFFusEr-3b/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Custral Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5E7CFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.custral.com/data/properties/complex/grade\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/data/properties/complex/grade.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.custral.com/#organization\",\"name\":\"Custral Docs\",\"url\":\"https://docs.custral.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/custral/9h_119tROzHTKUiS/assets/logos/light.svg?fit=max\u0026auto=format\u0026n=9h_119tROzHTKUiS\u0026q=85\u0026s=50b063929ddff7335cc4db8352ae694a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.custral.com#website\",\"name\":\"Custral Docs\",\"url\":\"https://docs.custral.com\",\"publisher\":{\"@id\":\"https://docs.custral.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.custral.com/data/properties/complex/grade#webpage\",\"url\":\"https://docs.custral.com/data/properties/complex/grade\",\"name\":\"Grade\",\"description\":\"Score a record out of 100 from a rubric you write, with the reasoning attached.\",\"dateModified\":\"2026-10-19T21:39:46.695Z\",\"isPartOf\":{\"@id\":\"https://docs.custral.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.custral.com/data/properties/complex/grade#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.custral.com/data/properties/complex/grade#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Properties\",\"item\":\"https://docs.custral.com/data/properties/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Complex Types\",\"item\":\"https://docs.custral.com/data/properties/complex/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Grade\",\"item\":\"https://docs.custral.com/data/properties/complex/grade\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.custral.com/data/properties/complex/grade#article\",\"headline\":\"Grade\",\"name\":\"Grade\",\"description\":\"Score a record out of 100 from a rubric you write, with the reasoning attached.\",\"url\":\"https://docs.custral.com/data/properties/complex/grade\",\"mainEntityOfPage\":{\"@id\":\"https://docs.custral.com/data/properties/complex/grade#webpage\"},\"image\":\"https://docs.custral.com/images/og-docs.png\",\"dateModified\":\"2026-10-19T21:39:46.695Z\",\"publisher\":{\"@id\":\"https://docs.custral.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.custral.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Custral Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Custral Docs","nav":{"global":null,"products":[{"product":"Documentation","icon":"book-open","tabs":[{"tab":"Getting Started","pages":[{"title":"Getting Started","href":"/start/introduction"}]},{"tab":"AI","pages":[{"title":"AI","href":"/ai/overview"}]},{"tab":"Communications","pages":[{"title":"Communications","href":"/comms/overview"}]},{"tab":"Data Structures","groups":[{"group":"Getting started","pages":[{"title":"Data Structures","sidebarTitle":"Overview","icon":"database","mode":"wide","href":"/data/overview"},{"title":"Getting Started","icon":"stopwatch","href":"/data/getting-started"},{"title":"Data Models","icon":"database","href":"/data/models"}]},{"group":"Objects","pages":[{"title":"Overview","icon":"globe","href":"/data/objects/overview"},{"title":"Standard Objects","icon":"diagram-project","href":"/data/objects/standard-objects"},{"title":"Modifying Objects","sidebarTitle":"Modification","icon":"pen-to-square","href":"/data/objects/modify"},{"title":"Object Views","sidebarTitle":"Views","icon":"eye","href":"/data/objects/views"},{"title":"Object Templates","icon":"clone","href":"/data/objects/templates"}]},{"group":"Contacts","pages":[{"title":"Discover Contacts","icon":"address-book","href":"/data/contacts/discover"}]},{"group":"Properties","pages":[{"title":"Overview","icon":"table-columns","href":"/data/properties/overview"},{"group":"General","icon":"paperclip","pages":[{"title":"Overview","icon":"paperclip","href":"/data/properties/general/overview"},{"title":"File","icon":"paperclip","href":"/data/properties/general/file"},{"title":"Image","icon":"image","href":"/data/properties/general/image"}]},{"group":"Common","icon":"shapes","pages":[{"title":"Overview","icon":"shapes","href":"/data/properties/common/overview"},{"title":"Checkbox","icon":"square-check","href":"/data/properties/common/checkbox"}]},{"group":"Text Types","icon":"font","pages":[{"title":"Overview","icon":"font","href":"/data/properties/text/overview"},{"title":"Text","icon":"font","href":"/data/properties/text/text"},{"title":"Long Text","icon":"align-left","href":"/data/properties/text/long-text"},{"title":"Email","icon":"envelope","href":"/data/properties/text/email"},{"title":"Phone","icon":"phone","href":"/data/properties/text/phone"},{"title":"Website / URL","icon":"globe","href":"/data/properties/text/website"},{"title":"Address","icon":"location-dot","href":"/data/properties/text/address"},{"title":"ID","icon":"barcode","href":"/data/properties/text/id"}]},{"group":"Number Types","icon":"hashtag","pages":[{"title":"Overview","icon":"hashtag","href":"/data/properties/number/overview"},{"title":"Number","icon":"hashtag","href":"/data/properties/number/number"},{"title":"Currency","icon":"dollar-sign","href":"/data/properties/number/currency"},{"title":"Timer","icon":"stopwatch","href":"/data/properties/number/timer"}]},{"group":"Date Types","icon":"calendar","pages":[{"title":"Overview","icon":"calendar","href":"/data/properties/date/overview"},{"title":"Date","icon":"calendar","href":"/data/properties/date/date"},{"title":"Date Range","icon":"calendar-range","href":"/data/properties/date/date-range"},{"title":"Time","icon":"clock","href":"/data/properties/date/time"}]},{"group":"Select Types","icon":"list-dropdown","pages":[{"title":"Overview","icon":"list-dropdown","href":"/data/properties/select/overview"},{"title":"Select","icon":"list-dropdown","href":"/data/properties/select/select"},{"title":"Status","icon":"circle-half-stroke","href":"/data/properties/select/status"},{"title":"Relation","icon":"link","href":"/data/properties/select/relation"},{"title":"User","icon":"user","href":"/data/properties/select/user"},{"title":"Conversation","icon":"messages","href":"/data/properties/select/conversation"}]},{"group":"Communication Types","icon":"walkie-talkie","pages":[{"title":"Overview","icon":"comments","href":"/data/properties/communication/overview"},{"title":"Spreadsheet","icon":"table-cells","href":"/data/properties/communication/spreadsheet"},{"title":"Whiteboard","icon":"chalkboard","href":"/data/properties/communication/whiteboard"},{"title":"Notes","icon":"note-sticky","href":"/data/properties/communication/notes"},{"title":"Presentation","icon":"presentation-screen","href":"/data/properties/communication/presentation"}]},{"group":"Complex Types","icon":"gear-complex","pages":[{"title":"Overview","icon":"gears","href":"/data/properties/complex/overview"},{"title":"Formula","icon":"function","href":"/data/properties/complex/formula"},{"title":"External","icon":"plug","href":"/data/properties/complex/external"},{"title":"Object Mapping","description":"Map a record's fields onto another object's shape.","icon":"shuffle","href":"/data/properties/complex/object-mapping"},{"title":"Grade","icon":"gauge-high","href":"/data/properties/complex/grade"},{"title":"Rollup","description":"Aggregate a value across every related record.","icon":"sigma","href":"/data/properties/complex/rollup"},{"title":"Usage","icon":"chart-line","href":"/data/properties/complex/usage"}]}]},{"group":"Records","pages":[{"title":"Records","sidebarTitle":"Overview","icon":"table-list","href":"/data/records/overview"},{"title":"Fields","icon":"input-text","href":"/data/records/fields"},{"title":"Importing records","icon":"file-import","href":"/data/records/import"}]},{"group":"Lists","pages":[{"title":"Lists","sidebarTitle":"Overview","icon":"list-check","href":"/data/collections/overview"},{"title":"Static lists","sidebarTitle":"Static","icon":"list","href":"/data/collections/list"},{"title":"Smart lists","sidebarTitle":"Smart","icon":"bolt","href":"/data/collections/queue"},{"title":"Cohorts","sidebarTitle":"Cohort","icon":"arrows-rotate","href":"/data/collections/stack"}]},{"group":"Conversations","pages":[{"title":"Conversations","sidebarTitle":"Overview","icon":"messages","href":"/data/conversations/overview"}]},{"group":"Media","pages":[{"title":"Media","icon":"photo-film","href":"/data/media/overview"}]},{"group":"Audits","pages":[{"title":"Company Audit","icon":"clipboard-check","href":"/data/audits/company"},{"title":"Workspace Audit","icon":"sitemap","href":"/data/audits/workspace"}]}]},{"tab":"Surfaces","pages":[{"title":"Surfaces","href":"/surfaces/overview"}]},{"tab":"Blocks","pages":[{"title":"Blocks","href":"/blocks/overview"}]},{"tab":"Team","pages":[{"title":"Team","href":"/team/overview"}]},{"tab":"Automations","pages":[{"title":"Automations","href":"/automation/overview"}]},{"tab":"Business Intelligence","pages":[{"title":"Business Intelligence","href":"/bi/overview"}]},{"tab":"Revenue","pages":[{"title":"Revenue","href":"/revenue/overview"}]}]},{"product":"Developer References","icon":"square-terminal","pages":[{"title":"Developer References","href":"/dev/overview"}]},{"product":"Product Updates","icon":"crystal-ball","pages":[{"title":"Product Updates","href":"/product/overview"}]},{"product":"Integrations","icon":"flask-gear","pages":[{"title":"Integrations","href":"/integrations/overview"}]}]},"basePath":"","title":"Grade - Custral Docs","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":["10e4515597"],"chunks":["BannerMarkdown-CXEEkV6J.js","dist-lvhuD9Du.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-D1Z-ELXV.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}