{"id":23265,"date":"2026-08-25T06:25:03","date_gmt":"2026-08-25T02:55:03","guid":{"rendered":"https:\/\/avalvisa.com\/crs-calculator-2\/"},"modified":"2026-09-02T03:31:23","modified_gmt":"2026-09-02T00:01:23","slug":"crs-calculator","status":"publish","type":"page","link":"https:\/\/avalvisa.com\/en\/crs-calculator\/","title":{"rendered":"Express Entry CRS Calculator"},"content":{"rendered":"<p>Work out your <a href=\"\/en\/canada-express-entry\/\">Express Entry<\/a> CRS score in about a minute. The calculator below follows the official IRCC grid, converts your IELTS, CELPIP, PTE or TEF results into CLB levels automatically, and gives a job offer zero points, which has been the rule since 25 March 2025.<\/p>\n<div id=\"av-crs\" dir=\"ltr\" data-lang=\"en\">\n<style>\n#av-crs{--red:#b4443c;--ink:#26262b;--grey:#6d675e;--line:#e2dccf;--paper:#f7f4ee;--ok:#3f7a55;--warn:#a8702a;font-size:15.5px;line-height:1.8;color:var(--ink)}\n#av-crs .avc-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:22px 24px;margin-bottom:18px}\n#av-crs h3{font-size:17px;margin:0 0 14px;font-weight:700;color:var(--ink)}\n#av-crs label{display:block;font-size:14px;font-weight:600;margin:0 0 4px}\n#av-crs select,#av-crs input[type=number],#av-crs input[type=email]{width:100%;padding:9px 12px;border:1px solid var(--line);border-radius:8px;font-size:14.5px;background:#fff;color:var(--ink);font-family:inherit}\n#av-crs .avc-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:12px}\n#av-crs .avc-radio{display:flex;flex-direction:column;gap:8px;margin-bottom:4px}\n#av-crs .avc-radio label{display:flex;gap:9px;align-items:flex-start;font-weight:400;font-size:14.5px;cursor:pointer;border:1px solid var(--line);border-radius:9px;padding:11px 13px}\n#av-crs .avc-radio input{margin-top:5px;accent-color:var(--red)}\n#av-crs .avc-radio label:has(input:checked){border-color:var(--red);background:#fdf6f5}\n#av-crs .avc-check{display:flex;gap:9px;align-items:flex-start;font-weight:400;font-size:14.5px;cursor:pointer;margin-bottom:9px}\n#av-crs .avc-check input{margin-top:5px;accent-color:var(--red)}\n#av-crs .clb-badge{display:inline-block;min-width:56px;text-align:center;font-size:12px;font-weight:700;background:var(--paper);border:1px solid var(--line);border-radius:6px;padding:2px 7px;margin-top:4px;color:var(--grey)}\n#av-crs .clb-badge.on{color:var(--ok);border-color:var(--ok)}\n#av-crs .avc-btn{display:block;width:100%;padding:14px;background:var(--red);color:#fff;border:0;border-radius:10px;font-size:17px;font-weight:700;cursor:pointer;font-family:inherit}\n#av-crs .avc-btn:hover{background:#9c3831}\n#av-crs .avc-score{text-align:center;padding:26px 20px 18px}\n#av-crs .avc-score .n{font-size:64px;font-weight:800;line-height:1;color:var(--red);font-variant-numeric:tabular-nums}\n#av-crs .avc-score .d{font-size:14px;color:var(--grey);margin-top:6px}\n#av-crs table.avc-bd{width:100%;border-collapse:collapse;font-size:14.5px;margin:10px 0 4px}\n#av-crs table.avc-bd td{padding:7px 4px;border-bottom:1px solid var(--line)}\n#av-crs table.avc-bd td:last-child{text-align:left;font-weight:700;font-variant-numeric:tabular-nums}\n#av-crs[dir=ltr] table.avc-bd td:last-child{text-align:right}\n#av-crs .avc-draw{display:flex;align-items:baseline;gap:10px;padding:10px 2px;border-bottom:1px solid var(--line);flex-wrap:wrap}\n#av-crs .avc-draw:last-child{border-bottom:0}\n#av-crs .avc-draw .nm{font-weight:600;flex:1;min-width:150px}\n#av-crs .avc-draw .co{font-variant-numeric:tabular-nums;font-weight:700}\n#av-crs .avc-draw .st{font-size:12.5px;font-weight:700;border-radius:6px;padding:2px 9px}\n#av-crs .avc-draw .st.ok{background:#e4eee7;color:var(--ok)}\n#av-crs .avc-draw .st.close{background:#f2e8d8;color:var(--warn)}\n#av-crs .avc-draw .st.far{background:#f3e2df;color:var(--red)}\n#av-crs .avc-draw .hint{flex-basis:100%;font-size:12.5px;color:var(--grey)}\n#av-crs .avc-note{background:#e4eee7;border:1px solid #c6dcce;border-radius:9px;padding:11px 14px;font-size:14px;margin:12px 0;color:#2c5940}\n#av-crs .avc-cta{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}\n#av-crs .avc-cta a{flex:1;min-width:220px;text-align:center;padding:12px 16px;border-radius:9px;font-size:14.5px;font-weight:700;text-decoration:none}\n#av-crs .avc-cta .c1{background:var(--ink);color:#fff}\n#av-crs .avc-cta .c2{background:#25d366;color:#fff}\n#av-crs .avc-lead{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}\n#av-crs .avc-lead input{flex:1;min-width:200px}\n#av-crs .avc-lead button{padding:10px 24px;background:var(--red);color:#fff;border:0;border-radius:8px;font-weight:700;cursor:pointer;font-family:inherit}\n#av-crs .avc-msg{font-size:13.5px;color:var(--ok);min-height:1.2em;margin-top:5px}\n#av-crs .avc-small{font-size:12.5px;color:var(--grey)}\n#av-crs #avc-result{display:none}\n#av-crs .avc-spouse{display:none}\n#av-crs.married .avc-spouse{display:block}\n<\/style>\n\n<div class=\"avc-card\">\n  <h3>Marital status<\/h3>\n  <div class=\"avc-radio\">\n    <label><input type=\"radio\" name=\"avc-married\" value=\"0\" checked> <span>Single (or spouse not accompanying \/ spouse is a Canadian citizen or PR)<\/span><\/label>\n    <label><input type=\"radio\" name=\"avc-married\" value=\"1\"> <span>Married or common-law \u2014 spouse coming with me<\/span><\/label>\n  <\/div>\n<\/div>\n\n<div class=\"avc-card\">\n  <div class=\"avc-row\">\n    <div><label for=\"avc-age\">Your age<\/label><input type=\"number\" id=\"avc-age\" min=\"17\" max=\"60\" value=\"30\"><\/div>\n    <div><label for=\"avc-edu\">Highest level of education<\/label>\n      <select id=\"avc-edu\">\n                <option value=\"none\">Less than high school<\/option>\n                <option value=\"secondary\">High school diploma<\/option>\n                <option value=\"oneyear\">One-year post-secondary credential<\/option>\n                <option value=\"twoyear\">Two-year post-secondary credential<\/option>\n                <option value=\"bachelor\" selected>Bachelor&#039;s degree (or 3+ year credential)<\/option>\n                <option value=\"twoplus\">Two or more credentials (one 3+ years)<\/option>\n                <option value=\"masters\">Master&#039;s or professional degree<\/option>\n                <option value=\"phd\">Doctorate (PhD)<\/option>\n              <\/select><\/div>\n    <div><label for=\"avc-canedu\">Post-secondary study in Canada<\/label>\n      <select id=\"avc-canedu\"><option value=\"none\">None<\/option><option value=\"short\">1\u20132 year Canadian credential<\/option><option value=\"long\">3+ year Canadian credential<\/option><\/select><\/div>\n  <\/div>\n<\/div>\n\n<div class=\"avc-card\">\n  <h3>English test<\/h3>\n  <div class=\"avc-row\">\n    <div><select id=\"avc-entest\">\n      <option value=\"\">No test taken<\/option>\n      <option value=\"ielts\" selected>IELTS General<\/option>\n      <option value=\"celpip\">CELPIP-General<\/option>\n      <option value=\"pte\">PTE Core<\/option>\n      <option value=\"clb\">I know my CLB levels<\/option>\n    <\/select><\/div>\n  <\/div>\n  <div class=\"avc-row\" id=\"avc-en-scores\"><\/div>\n  <h3 style=\"margin-top:18px\">French test<\/h3>\n  <div class=\"avc-row\">\n    <div><select id=\"avc-frtest\">\n      <option value=\"\" selected>No test taken<\/option>\n      <option value=\"tef\">TEF Canada<\/option>\n      <option value=\"tcf\">TCF Canada<\/option>\n      <option value=\"nclc\">I know my NCLC levels<\/option>\n    <\/select><\/div>\n  <\/div>\n  <div class=\"avc-row\" id=\"avc-fr-scores\"><\/div>\n<\/div>\n\n<div class=\"avc-card\">\n  <div class=\"avc-row\">\n    <div><label for=\"avc-canexp\">Canadian skilled work experience<\/label>\n      <select id=\"avc-canexp\">\n        <option value=\"0\">None \/ less than 1 year<\/option><option value=\"1\">1 year<\/option><option value=\"2\">2 years<\/option><option value=\"3\">3 years<\/option><option value=\"4\">4 years<\/option><option value=\"5\">5+ years<\/option>\n      <\/select><\/div>\n    <div><label for=\"avc-fexp\">Foreign skilled work experience<\/label>\n      <select id=\"avc-fexp\"><option value=\"0\">None \/ less than 1 year<\/option><option value=\"1\">1\u20132 years<\/option><option value=\"3\">3+ years<\/option><\/select><\/div>\n  <\/div>\n<\/div>\n\n<div class=\"avc-card avc-spouse\">\n  <h3>Spouse \/ partner<\/h3>\n  <div class=\"avc-row\">\n    <div><label for=\"avc-spedu\">Spouse&#039;s education<\/label>\n      <select id=\"avc-spedu\">\n                <option value=\"none\">Less than high school<\/option>\n                <option value=\"secondary\" selected>High school diploma<\/option>\n                <option value=\"oneyear\">One-year post-secondary credential<\/option>\n                <option value=\"twoyear\">Two-year post-secondary credential<\/option>\n                <option value=\"bachelor\">Bachelor&#039;s degree (or 3+ year credential)<\/option>\n                <option value=\"twoplus\">Two or more credentials (one 3+ years)<\/option>\n                <option value=\"masters\">Master&#039;s or professional degree<\/option>\n                <option value=\"phd\">Doctorate (PhD)<\/option>\n              <\/select><\/div>\n    <div><label for=\"avc-spcanexp\">Spouse&#039;s Canadian work experience<\/label>\n      <select id=\"avc-spcanexp\"><option value=\"0\">None \/ less than 1 year<\/option><option value=\"1\">1 year<\/option><option value=\"2\">2 years<\/option><option value=\"3\">3 years<\/option><option value=\"4\">4 years<\/option><option value=\"5\">5+ years<\/option><\/select><\/div>\n  <\/div>\n  <label style=\"font-weight:600;font-size:14px\">Spouse&#039;s English CLB (leave empty if no test)<\/label>\n  <div class=\"avc-row\">\n        <div><label for=\"avc-sp-s\" style=\"font-weight:400;font-size:13px\">Speaking<\/label>\n      <select id=\"avc-sp-s\"><option value=\"\">\u2014<\/option><option value=\"4\">CLB 4<\/option><option value=\"5\">CLB 5<\/option><option value=\"6\">CLB 6<\/option><option value=\"7\">CLB 7<\/option><option value=\"8\">CLB 8<\/option><option value=\"9\">CLB 9<\/option><option value=\"10\">CLB 10<\/option><\/select><\/div>\n        <div><label for=\"avc-sp-l\" style=\"font-weight:400;font-size:13px\">Listening<\/label>\n      <select id=\"avc-sp-l\"><option value=\"\">\u2014<\/option><option value=\"4\">CLB 4<\/option><option value=\"5\">CLB 5<\/option><option value=\"6\">CLB 6<\/option><option value=\"7\">CLB 7<\/option><option value=\"8\">CLB 8<\/option><option value=\"9\">CLB 9<\/option><option value=\"10\">CLB 10<\/option><\/select><\/div>\n        <div><label for=\"avc-sp-r\" style=\"font-weight:400;font-size:13px\">Reading<\/label>\n      <select id=\"avc-sp-r\"><option value=\"\">\u2014<\/option><option value=\"4\">CLB 4<\/option><option value=\"5\">CLB 5<\/option><option value=\"6\">CLB 6<\/option><option value=\"7\">CLB 7<\/option><option value=\"8\">CLB 8<\/option><option value=\"9\">CLB 9<\/option><option value=\"10\">CLB 10<\/option><\/select><\/div>\n        <div><label for=\"avc-sp-w\" style=\"font-weight:400;font-size:13px\">Writing<\/label>\n      <select id=\"avc-sp-w\"><option value=\"\">\u2014<\/option><option value=\"4\">CLB 4<\/option><option value=\"5\">CLB 5<\/option><option value=\"6\">CLB 6<\/option><option value=\"7\">CLB 7<\/option><option value=\"8\">CLB 8<\/option><option value=\"9\">CLB 9<\/option><option value=\"10\">CLB 10<\/option><\/select><\/div>\n      <\/div>\n<\/div>\n\n<div class=\"avc-card\">\n  <h3>Additional factors<\/h3>\n  <label class=\"avc-check\"><input type=\"checkbox\" id=\"avc-pnp\"> <span>I have a provincial\/territorial nomination (PNP)<\/span><\/label>\n  <label class=\"avc-check\"><input type=\"checkbox\" id=\"avc-sibling\"> <span>I have a brother or sister in Canada (citizen or PR, 18+)<\/span><\/label>\n  <label class=\"avc-check\"><input type=\"checkbox\" id=\"avc-cert\"> <span>I hold a Canadian certificate of qualification (skilled trades)<\/span><\/label>\n<\/div>\n\n<button type=\"button\" class=\"avc-btn\" id=\"avc-go\">Calculate my CRS score<\/button>\n\n<div id=\"avc-result\">\n  <div class=\"avc-card avc-score\">\n    <div class=\"avc-small\">Your estimated CRS score<\/div>\n    <div class=\"n\" id=\"avc-total\">0<\/div>\n    <div class=\"d\">\/ 1200<\/div>\n    <div class=\"avc-note\" id=\"avc-frnote\" style=\"display:none\"><\/div>\n    <table class=\"avc-bd\">\n      <tr><td>Core \/ human capital<\/td><td id=\"avc-b-core\"><\/td><\/tr>\n      <tr id=\"avc-b-sp-row\"><td>Spouse factors<\/td><td id=\"avc-b-sp\"><\/td><\/tr>\n      <tr><td>Skill transferability<\/td><td id=\"avc-b-tr\"><\/td><\/tr>\n      <tr><td>Additional points<\/td><td id=\"avc-b-add\"><\/td><\/tr>\n    <\/table>\n  <\/div>\n  <div class=\"avc-card\">\n    <h3>Recent invitation rounds \u2014 where do you stand?<\/h3>\n    <div id=\"avc-draws\"><\/div>\n    <div class=\"avc-small\" style=\"margin-top:8px\">Round data updated: 2026-10-16<\/div>\n  <\/div>\n  <div class=\"avc-card\">\n    <div style=\"font-weight:700;font-size:15px;margin-bottom:4px\">Email me my score and future round alerts<\/div>\n    <div class=\"avc-lead\">\n      <input type=\"email\" id=\"avc-email\" placeholder=\"Your email\">\n      <button type=\"button\" id=\"avc-email-go\">Send<\/button>\n    <\/div>\n    <div class=\"avc-msg\" id=\"avc-email-msg\"><\/div>\n    <div class=\"avc-cta\">\n      <a class=\"c1\" href=\"https:\/\/avalvisa.com\/en\/form\/\">Book a consultation with Hadi Imani, RCIC #R522575<\/a>\n      <a class=\"c2\" href=\"https:\/\/wa.me\/14169390098\" target=\"_blank\" rel=\"noopener\">Ask on WhatsApp<\/a>\n    <\/div>\n  <\/div>\n  <p class=\"avc-small\">Scoring per the official IRCC Comprehensive Ranking System criteria. This is an unofficial estimate for information only, based on the official IRCC criteria (grid updated June 2026; job-offer points removed March 2025). Your official score is determined by IRCC in your Express Entry profile. This calculator stores nothing unless you submit your email.<\/p>\n<\/div>\n\n<script>\/* Avalvisa CRS engine \u2014 implements the official IRCC Comprehensive Ranking System grid\n * as published on canada.ca (page dated 2026-06-22; job-offer points removed 2025-03-25).\n * Pure functions, no DOM. Loaded by the [avalvisa_crs] shortcode; testable with node.\n *\/\nvar AvalCRS = (function () {\n  'use strict';\n\n  \/* ---------- test score -> CLB\/NCLC (official equivalency charts) ---------- *\/\n  \/\/ thresholds[clb] = minimum score for that level, per ability key s\/l\/r\/w\n  var EQUIV = {\n    ielts: {\n      s: { 10: 7.5, 9: 7.0, 8: 6.5, 7: 6.0, 6: 5.5, 5: 5.0, 4: 4.0 },\n      l: { 10: 8.5, 9: 8.0, 8: 7.5, 7: 6.0, 6: 5.5, 5: 5.0, 4: 4.5 },\n      r: { 10: 8.0, 9: 7.0, 8: 6.5, 7: 6.0, 6: 5.0, 5: 4.0, 4: 3.5 },\n      w: { 10: 7.5, 9: 7.0, 8: 6.5, 7: 6.0, 6: 5.5, 5: 5.0, 4: 4.0 }\n    },\n    pte: {\n      s: { 10: 89, 9: 84, 8: 76, 7: 68, 6: 59, 5: 51, 4: 42 },\n      l: { 10: 89, 9: 82, 8: 71, 7: 60, 6: 50, 5: 39, 4: 28 },\n      r: { 10: 88, 9: 78, 8: 69, 7: 60, 6: 51, 5: 42, 4: 33 },\n      w: { 10: 90, 9: 88, 8: 79, 7: 69, 6: 60, 5: 51, 4: 41 }\n    },\n    tef: {\n      s: { 10: 393, 9: 371, 8: 349, 7: 310, 6: 271, 5: 226, 4: 181 },\n      l: { 10: 316, 9: 298, 8: 280, 7: 249, 6: 217, 5: 181, 4: 145 },\n      r: { 10: 263, 9: 248, 8: 233, 7: 207, 6: 181, 5: 151, 4: 121 },\n      w: { 10: 393, 9: 371, 8: 349, 7: 310, 6: 271, 5: 226, 4: 181 }\n    },\n    tcf: {\n      s: { 10: 16, 9: 14, 8: 12, 7: 10, 6: 7, 5: 6, 4: 4 },\n      l: { 10: 549, 9: 523, 8: 503, 7: 458, 6: 398, 5: 369, 4: 331 },\n      r: { 10: 549, 9: 524, 8: 499, 7: 453, 6: 406, 5: 375, 4: 342 },\n      w: { 10: 16, 9: 14, 8: 12, 7: 10, 6: 7, 5: 6, 4: 4 }\n    }\n  };\n\n  function toCLB(test, ability, score) {\n    if (test === 'celpip') {\n      var v = Math.floor(Number(score));\n      if (isNaN(v) || v < 4) return 0;\n      return Math.min(v, 10);\n    }\n    if (test === 'clb' || test === 'nclc') {\n      var d = Math.floor(Number(score));\n      if (isNaN(d) || d < 4) return 0;\n      return Math.min(d, 10);\n    }\n    var tab = EQUIV[test];\n    if (!tab) return 0;\n    var th = tab[ability];\n    var n = Number(score);\n    if (isNaN(n)) return 0;\n    for (var clb = 10; clb >= 4; clb--) {\n      if (n >= th[clb]) return clb;\n    }\n    return 0;\n  }\n\n  \/* ---------- core\/human capital ---------- *\/\n  \/\/ age -> [with spouse, without spouse]\n  var AGE = { 18: [90, 99], 19: [95, 105], 30: [95, 105], 31: [90, 99], 32: [85, 94], 33: [80, 88], 34: [75, 83], 35: [70, 77], 36: [65, 72], 37: [60, 66], 38: [55, 61], 39: [50, 55], 40: [45, 50], 41: [35, 39], 42: [25, 28], 43: [15, 17], 44: [5, 6] };\n  function agePoints(age, married) {\n    var a = Math.floor(Number(age));\n    if (isNaN(a) || a <= 17 || a >= 45) return 0;\n    var row = (a >= 20 && a <= 29) ? [100, 110] : AGE[a];\n    if (!row) return 0;\n    return married ? row[0] : row[1];\n  }\n\n  \/\/ education keys and [with, without] points\n  var EDU = {\n    none:       [0, 0],\n    secondary:  [28, 30],\n    oneyear:    [84, 90],\n    twoyear:    [91, 98],\n    bachelor:   [112, 120],\n    twoplus:    [119, 128],\n    masters:    [126, 135],\n    phd:        [140, 150]\n  };\n  function eduPoints(edu, married) {\n    var row = EDU[edu] || [0, 0];\n    return married ? row[0] : row[1];\n  }\n\n  \/\/ first official language, per ability CLB -> [with, without]\n  function firstLangAbility(clb, married) {\n    var p;\n    if (clb < 4) p = [0, 0];\n    else if (clb <= 5) p = [6, 6];\n    else if (clb === 6) p = [8, 9];\n    else if (clb === 7) p = [16, 17];\n    else if (clb === 8) p = [22, 23];\n    else if (clb === 9) p = [29, 31];\n    else p = [32, 34];\n    return married ? p[0] : p[1];\n  }\n\n  \/\/ second official language, per ability (cap applied by caller)\n  function secondLangAbility(clb) {\n    if (clb <= 4) return 0;\n    if (clb <= 6) return 1;\n    if (clb <= 8) return 3;\n    return 6;\n  }\n\n  \/\/ Canadian work experience years -> [with, without]\n  var CANEXP = { 0: [0, 0], 1: [35, 40], 2: [46, 53], 3: [56, 64], 4: [63, 72], 5: [70, 80] };\n  function canExpPoints(years, married) {\n    var y = Math.min(Math.max(Math.floor(Number(years) || 0), 0), 5);\n    var row = CANEXP[y];\n    return married ? row[0] : row[1];\n  }\n\n  \/* ---------- spouse factors ---------- *\/\n  var SPOUSE_EDU = { none: 0, secondary: 2, oneyear: 6, twoyear: 7, bachelor: 8, twoplus: 9, masters: 10, phd: 10 };\n  function spouseLangAbility(clb) {\n    if (clb <= 4) return 0;\n    if (clb <= 6) return 1;\n    if (clb <= 8) return 3;\n    return 5;\n  }\n  var SPOUSE_CANEXP = { 0: 0, 1: 5, 2: 7, 3: 8, 4: 9, 5: 10 };\n\n  \/* ---------- skill transferability ---------- *\/\n  \/\/ education row group: 0 = secondary or less, 1 = one-year+ credential, 2 = two-or-more \/ masters \/ phd\n  function eduTransferRow(edu) {\n    if (edu === 'none' || edu === 'secondary') return 0;\n    if (edu === 'oneyear' || edu === 'twoyear' || edu === 'bachelor') return 1;\n    return 2; \/\/ twoplus, masters, phd\n  }\n  \/\/ lang tier from first-language CLBs: 2 = all >= 9, 1 = all >= 7, 0 = otherwise\n  function langTier(clbs) {\n    var min = Math.min(clbs.s, clbs.l, clbs.r, clbs.w);\n    if (min >= 9) return 2;\n    if (min >= 7) return 1;\n    return 0;\n  }\n  var TRANSFER_PTS = [[0, 0], [13, 25], [25, 50]]; \/\/ [row][tierIndex] where tierIndex 0 = colA, 1 = colB\n\n  \/* ---------- main ----------\n   * profile = {\n   *   married: bool (spouse accompanying and not citizen\/PR),\n   *   age: number,\n   *   edu: key of EDU,\n   *   canadianEdu: 'none'|'short'|'long'   (1-2yr \/ 3+yr Canadian credential),\n   *   eng: {s,l,r,w} CLB numbers or null,\n   *   fr:  {s,l,r,w} NCLC numbers or null,\n   *   canExpYears: 0..5,\n   *   foreignExpYears: 0 | 1 | 3   (0 none, 1 = 1-2yrs, 3 = 3+yrs),\n   *   cert: bool (certificate of qualification),\n   *   pnp: bool, sibling: bool,\n   *   spouse: { edu: key, lang: {s,l,r,w} CLB or null, canExpYears: 0..5 } | null\n   * }\n   *\/\n  function scoreWithAssignment(p, first, second) {\n    var married = !!p.married;\n    var b = {};\n\n    b.age = agePoints(p.age, married);\n    b.edu = eduPoints(p.edu, married);\n\n    b.lang1 = 0;\n    ['s', 'l', 'r', 'w'].forEach(function (k) { b.lang1 += firstLangAbility(first[k], married); });\n\n    b.lang2 = 0;\n    if (second) {\n      ['s', 'l', 'r', 'w'].forEach(function (k) { b.lang2 += secondLangAbility(second[k]); });\n      b.lang2 = Math.min(b.lang2, married ? 22 : 24);\n    }\n\n    b.canExp = canExpPoints(p.canExpYears, married);\n    b.core = b.age + b.edu + b.lang1 + b.lang2 + b.canExp;\n\n    \/\/ spouse\n    b.spouse = 0;\n    if (married && p.spouse) {\n      var sp = p.spouse;\n      var se = SPOUSE_EDU[sp.edu] || 0;\n      var sl = 0;\n      if (sp.lang) { ['s', 'l', 'r', 'w'].forEach(function (k) { sl += spouseLangAbility(sp.lang[k]); }); }\n      sl = Math.min(sl, 20);\n      var sc = SPOUSE_CANEXP[Math.min(Math.max(Math.floor(Number(sp.canExpYears) || 0), 0), 5)] || 0;\n      b.spouse = Math.min(se + sl + sc, 40);\n    }\n\n    \/\/ transferability \u2014 language conditions use the FIRST official language\n    var tier = langTier(first);\n    var eduRow = eduTransferRow(p.edu);\n    var c1 = tier > 0 ? TRANSFER_PTS[eduRow][tier - 1] : 0;\n    var canY = Math.floor(Number(p.canExpYears) || 0);\n    var c2 = 0;\n    if (canY >= 2) c2 = TRANSFER_PTS[eduRow][1];\n    else if (canY === 1) c2 = TRANSFER_PTS[eduRow][0];\n    var eduTransfer = Math.min(c1 + c2, 50);\n\n    var fRow = p.foreignExpYears >= 3 ? 2 : (p.foreignExpYears >= 1 ? 1 : 0);\n    var c3 = tier > 0 ? TRANSFER_PTS[fRow][tier - 1] : 0;\n    var c4 = 0;\n    if (canY >= 2) c4 = TRANSFER_PTS[fRow][1];\n    else if (canY === 1) c4 = TRANSFER_PTS[fRow][0];\n    var foreignTransfer = Math.min(c3 + c4, 50);\n\n    var c5 = 0;\n    if (p.cert) {\n      var min = Math.min(first.s, first.l, first.r, first.w);\n      if (min >= 7) c5 = 50;\n      else if (min >= 5) c5 = 25;\n    }\n    b.transfer = Math.min(eduTransfer + foreignTransfer + c5, 100);\n\n    \/\/ additional\n    b.additional = 0;\n    var det = [];\n    if (p.sibling) { b.additional += 15; det.push('sibling'); }\n    \/\/ French bonus is based on the FRENCH abilities regardless of assignment\n    if (p.fr) {\n      var fmin = Math.min(p.fr.s, p.fr.l, p.fr.r, p.fr.w);\n      if (fmin >= 7) {\n        var emin = p.eng ? Math.min(p.eng.s, p.eng.l, p.eng.r, p.eng.w) : 0;\n        if (emin >= 5) { b.additional += 50; det.push('french50'); }\n        else { b.additional += 25; det.push('french25'); }\n      }\n    }\n    if (p.canadianEdu === 'short') { b.additional += 15; det.push('canEdu15'); }\n    else if (p.canadianEdu === 'long') { b.additional += 30; det.push('canEdu30'); }\n    if (p.pnp) { b.additional += 600; det.push('pnp'); }\n    b.additional = Math.min(b.additional, 600);\n    b.additionalDetail = det;\n\n    b.total = Math.min(b.core + b.spouse + b.transfer + b.additional, 1200);\n    return b;\n  }\n\n  function calculate(p) {\n    var zero = { s: 0, l: 0, r: 0, w: 0 };\n    var eng = p.eng || null;\n    var fr = p.fr || null;\n    if (!eng && !fr) {\n      var bb = scoreWithAssignment(p, zero, null);\n      bb.firstLang = 'none';\n      return bb;\n    }\n    if (eng && !fr) { var r1 = scoreWithAssignment(p, eng, null); r1.firstLang = 'en'; return r1; }\n    if (fr && !eng) { var r2 = scoreWithAssignment(p, fr, null); r2.firstLang = 'fr'; return r2; }\n    var asEn = scoreWithAssignment(p, eng, fr);\n    var asFr = scoreWithAssignment(p, fr, eng);\n    if (asFr.total > asEn.total) { asFr.firstLang = 'fr'; return asFr; }\n    asEn.firstLang = 'en';\n    return asEn;\n  }\n\n  return { calculate: calculate, toCLB: toCLB, EQUIV: EQUIV };\n})();\nif (typeof module !== 'undefined' && module.exports) { module.exports = AvalCRS; }\n<\/script>\n<script>\n(function () {\n  var T = {\"marital\":\"Marital status\",\"single\":\"Single (or spouse not accompanying \\\/ spouse is a Canadian citizen or PR)\",\"married\":\"Married or common-law \u2014 spouse coming with me\",\"age\":\"Your age\",\"edu\":\"Highest level of education\",\"edu_none\":\"Less than high school\",\"edu_secondary\":\"High school diploma\",\"edu_oneyear\":\"One-year post-secondary credential\",\"edu_twoyear\":\"Two-year post-secondary credential\",\"edu_bachelor\":\"Bachelor's degree (or 3+ year credential)\",\"edu_twoplus\":\"Two or more credentials (one 3+ years)\",\"edu_masters\":\"Master's or professional degree\",\"edu_phd\":\"Doctorate (PhD)\",\"canedu\":\"Post-secondary study in Canada\",\"canedu_none\":\"None\",\"canedu_short\":\"1\u20132 year Canadian credential\",\"canedu_long\":\"3+ year Canadian credential\",\"eng\":\"English test\",\"fr\":\"French test\",\"no_test\":\"No test taken\",\"clb_direct\":\"I know my CLB levels\",\"nclc_direct\":\"I know my NCLC levels\",\"s\":\"Speaking\",\"l\":\"Listening\",\"r\":\"Reading\",\"w\":\"Writing\",\"canexp\":\"Canadian skilled work experience\",\"fexp\":\"Foreign skilled work experience\",\"years0\":\"None \\\/ less than 1 year\",\"y1\":\"1 year\",\"y2\":\"2 years\",\"y3\":\"3 years\",\"y4\":\"4 years\",\"y5\":\"5+ years\",\"f12\":\"1\u20132 years\",\"f3\":\"3+ years\",\"extras\":\"Additional factors\",\"pnp\":\"I have a provincial\\\/territorial nomination (PNP)\",\"sibling\":\"I have a brother or sister in Canada (citizen or PR, 18+)\",\"cert\":\"I hold a Canadian certificate of qualification (skilled trades)\",\"spouse\":\"Spouse \\\/ partner\",\"sp_edu\":\"Spouse's education\",\"sp_lang\":\"Spouse's English CLB (leave empty if no test)\",\"sp_canexp\":\"Spouse's Canadian work experience\",\"calc\":\"Calculate my CRS score\",\"result\":\"Your estimated CRS score\",\"core\":\"Core \\\/ human capital\",\"sp_pts\":\"Spouse factors\",\"transfer\":\"Skill transferability\",\"additional\":\"Additional points\",\"firstlang_fr\":\"French counted as your first official language (it scores higher for you).\",\"draws\":\"Recent invitation rounds \u2014 where do you stand?\",\"cutoff\":\"Cut-off\",\"ok\":\"Above the cut-off\",\"close\":\"Close (within 30 points)\",\"far\":\"Below the cut-off\",\"cec_hint\":\"Requires at least 1 year of Canadian work experience\",\"french_hint\":\"Requires NCLC 7+ in all four French abilities\",\"pnp_hint\":\"Requires a provincial nomination (+600 points)\",\"occ_hint\":\"Category-based round \u2014 requires recent experience in these occupations\",\"french_path\":\"Your French qualifies you for French-language rounds \u2014 currently the lowest cut-offs in the pool.\",\"french_tip\":\"Reaching NCLC 7 in French opens the French-language rounds \u2014 recently the easiest path to an invitation.\",\"email_lead\":\"Email me my score and future round alerts\",\"email_ph\":\"Your email\",\"email_btn\":\"Send\",\"cta_consult\":\"Book a consultation with Hadi Imani, RCIC #R522575\",\"cta_wa\":\"Ask on WhatsApp\",\"disclaimer\":\"This is an unofficial estimate for information only, based on the official IRCC criteria (grid updated June 2026; job-offer points removed March 2025). Your official score is determined by IRCC in your Express Entry profile. This calculator stores nothing unless you submit your email.\",\"updated\":\"Round data updated\",\"src\":\"Scoring per the official IRCC Comprehensive Ranking System criteria.\"};\n  var ROUNDS = {\"updated\":\"2026-10-16\",\"rounds\":[{\"key\":\"french\",\"fa\":\"\u0645\u0647\u0627\u0631\u062a \u0632\u0628\u0627\u0646 \u0641\u0631\u0627\u0646\u0633\u0647\",\"en\":\"French-language proficiency\",\"crs\":435,\"date\":\"2026-10-16\",\"size\":5000},{\"key\":\"cec\",\"fa\":\"\u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0646\u0627\u062f\u0627\u06cc\u06cc (CEC)\",\"en\":\"Canadian Experience Class\",\"crs\":519,\"date\":\"2026-10-15\",\"size\":2500},{\"key\":\"pnp\",\"fa\":\"\u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a\u0627\u0646\u06cc (PNP)\",\"en\":\"Provincial Nominee Program\",\"crs\":772,\"date\":\"2026-10-13\",\"size\":752},{\"key\":\"trades\",\"fa\":\"\u0645\u0634\u0627\u063a\u0644 \u0641\u0646\u06cc\",\"en\":\"Trade occupations\",\"crs\":476,\"date\":\"2026-10-01\",\"size\":3500},{\"key\":\"senior\",\"fa\":\"\u0645\u062f\u06cc\u0631\u0627\u0646 \u0627\u0631\u0634\u062f \u0628\u0627 \u0633\u0627\u0628\u0642\u0647 \u06a9\u0627\u0646\u0627\u062f\u0627\u06cc\u06cc\",\"en\":\"Senior managers (Canadian experience)\",\"crs\":389,\"date\":\"2026-09-16\",\"size\":250},{\"key\":\"healthcare\",\"fa\":\"\u0645\u0634\u0627\u063a\u0644 \u062f\u0631\u0645\u0627\u0646\u06cc \u0648 \u062e\u062f\u0645\u0627\u062a \u0627\u062c\u062a\u0645\u0627\u0639\u06cc\",\"en\":\"Healthcare and social services\",\"crs\":475,\"date\":\"2026-09-04\",\"size\":3500},{\"key\":\"physicians\",\"fa\":\"\u067e\u0632\u0634\u06a9\u0627\u0646 \u0628\u0627 \u0633\u0627\u0628\u0642\u0647 \u06a9\u0627\u0646\u0627\u062f\u0627\u06cc\u06cc\",\"en\":\"Physicians (Canadian experience)\",\"crs\":198,\"date\":\"2026-09-03\",\"size\":229},{\"key\":\"transport\",\"fa\":\"\u0645\u0634\u0627\u063a\u0644 \u062d\u0645\u0644\u200c\u0648\u0646\u0642\u0644\",\"en\":\"Transport occupations\",\"crs\":470,\"date\":\"2026-08-07\",\"size\":300}],\"recent\":[{\"n\":\"450\",\"date\":\"2026-10-16\",\"name\":\"French-Language proficiency\",\"size\":\"5,000\",\"crs\":\"435\"},{\"n\":\"449\",\"date\":\"2026-10-15\",\"name\":\"Canadian Experience Class\",\"size\":\"2,500\",\"crs\":\"519\"},{\"n\":\"448\",\"date\":\"2026-10-13\",\"name\":\"Provincial Nominee Program\",\"size\":\"752\",\"crs\":\"772\"},{\"n\":\"447\",\"date\":\"2026-10-01\",\"name\":\"Trades Occupations\",\"size\":\"3,500\",\"crs\":\"476\"},{\"n\":\"446\",\"date\":\"2026-09-29\",\"name\":\"Canadian Experience Class\",\"size\":\"2,000\",\"crs\":\"518\"},{\"n\":\"445\",\"date\":\"2026-09-28\",\"name\":\"Provincial Nominee Program\",\"size\":\"733\",\"crs\":\"725\"},{\"n\":\"444\",\"date\":\"2026-09-16\",\"name\":\"Senior managers with Canadian Work Experience\",\"size\":\"250\",\"crs\":\"389\"},{\"n\":\"443\",\"date\":\"2026-09-15\",\"name\":\"Canadian Experience Class\",\"size\":\"2,000\",\"crs\":\"519\"},{\"n\":\"442\",\"date\":\"2026-09-14\",\"name\":\"Provincial Nominee Program\",\"size\":\"576\",\"crs\":\"734\"},{\"n\":\"441\",\"date\":\"2026-09-04\",\"name\":\"Healthcare and Social Services Occupations\",\"size\":\"3,500\",\"crs\":\"475\"},{\"n\":\"440\",\"date\":\"2026-09-03\",\"name\":\"Physicians with Canadian Work Experience\",\"size\":\"229\",\"crs\":\"198\"},{\"n\":\"439\",\"date\":\"2026-09-01\",\"name\":\"Canadian Experience Class\",\"size\":\"2,000\",\"crs\":\"521\"},{\"n\":\"438\",\"date\":\"2026-08-31\",\"name\":\"Provincial Nominee Program\",\"size\":\"562\",\"crs\":\"697\"},{\"n\":\"437\",\"date\":\"2026-08-19\",\"name\":\"French-Language proficiency\",\"size\":\"5,000\",\"crs\":\"382\"},{\"n\":\"436\",\"date\":\"2026-08-18\",\"name\":\"Canadian Experience Class\",\"size\":\"1,000\",\"crs\":\"523\"},{\"n\":\"435\",\"date\":\"2026-08-17\",\"name\":\"Provincial Nominee Program\",\"size\":\"442\",\"crs\":\"760\"},{\"n\":\"434\",\"date\":\"2026-08-07\",\"name\":\"Transport Occupations\",\"size\":\"300\",\"crs\":\"470\"},{\"n\":\"433\",\"date\":\"2026-08-06\",\"name\":\"French-Language proficiency\",\"size\":\"5,000\",\"crs\":\"391\"},{\"n\":\"432\",\"date\":\"2026-08-05\",\"name\":\"Canadian Experience Class\",\"size\":\"3,000\",\"crs\":\"516\"},{\"n\":\"431\",\"date\":\"2026-08-04\",\"name\":\"Provincial Nominee Program\",\"size\":\"507\",\"crs\":\"768\"}],\"latest\":\"450\",\"synced\":\"2026-10-16T14:15:05+00:00\",\"source\":\"ircc-feed\"};\n  var LANG = \"en\";\n  var API = \"https:\\\/\\\/avalvisa.com\\\/en\\\/wp-json\\\/avalvisa\\\/v1\\\/subscribe\";\n  var root = document.getElementById('av-crs');\n  var $ = function (id) { return document.getElementById(id); };\n  var ABILITIES = ['s', 'l', 'r', 'w'];\n\n  \/\/ score input builders per test\n  function ieltsOptions(sel) {\n    var o = '<option value=\"\">\u2014<\/option>';\n    for (var v = 9; v >= 3; v -= 0.5) { o += '<option value=\"' + v.toFixed(1) + '\"' + (sel === v.toFixed(1) ? ' selected' : '') + '>' + v.toFixed(1) + '<\/option>'; }\n    return o;\n  }\n  function clbOptions() {\n    var o = '<option value=\"\">\u2014<\/option>';\n    for (var c = 10; c >= 4; c--) { o += '<option value=\"' + c + '\">' + c + '<\/option>'; }\n    return o;\n  }\n  function celpipOptions() {\n    var o = '<option value=\"\">\u2014<\/option>';\n    for (var c = 12; c >= 3; c--) { o += '<option value=\"' + c + '\">' + c + '<\/option>'; }\n    return o;\n  }\n  function buildScoreInputs(wrap, prefix, test) {\n    var el = $(wrap);\n    if (!test) { el.innerHTML = ''; return; }\n    var html = '';\n    ABILITIES.forEach(function (ab) {\n      var input;\n      if (test === 'ielts') { input = '<select id=\"' + prefix + ab + '\">' + ieltsOptions() + '<\/select>'; }\n      else if (test === 'celpip') { input = '<select id=\"' + prefix + ab + '\">' + celpipOptions() + '<\/select>'; }\n      else if (test === 'clb' || test === 'nclc') { input = '<select id=\"' + prefix + ab + '\">' + clbOptions() + '<\/select>'; }\n      else { input = '<input type=\"number\" id=\"' + prefix + ab + '\" min=\"0\" max=\"999\" step=\"1\">'; }\n      html += '<div><label for=\"' + prefix + ab + '\" style=\"font-weight:400;font-size:13px\">' + T[ab] + '<\/label>' + input +\n              '<span class=\"clb-badge\" id=\"' + prefix + ab + '-clb\">CLB \u2014<\/span><\/div>';\n    });\n    el.innerHTML = html;\n    ABILITIES.forEach(function (ab) {\n      $(prefix + ab).addEventListener('input', function () { updateBadge(prefix, ab, test); });\n      $(prefix + ab).addEventListener('change', function () { updateBadge(prefix, ab, test); });\n    });\n  }\n  function updateBadge(prefix, ab, test) {\n    var v = $(prefix + ab).value;\n    var b = $(prefix + ab + '-clb');\n    var label = (test === 'tef' || test === 'tcf' || test === 'nclc') ? 'NCLC' : 'CLB';\n    if (v === '') { b.textContent = label + ' \u2014'; b.classList.remove('on'); return; }\n    var clb = AvalCRS.toCLB(test, ab, v);\n    b.textContent = label + ' ' + (clb || '<4');\n    b.classList.toggle('on', clb >= 7);\n  }\n  function readLang(prefix, test) {\n    if (!test) { return null; }\n    var out = {}, any = false;\n    for (var i = 0; i < ABILITIES.length; i++) {\n      var ab = ABILITIES[i];\n      var v = $(prefix + ab) ? $(prefix + ab).value : '';\n      if (v === '') { out[ab] = 0; } else { out[ab] = AvalCRS.toCLB(test, ab, v); any = true; }\n    }\n    return any ? out : null;\n  }\n\n  $('avc-entest').addEventListener('change', function () { buildScoreInputs('avc-en-scores', 'avc-en-', this.value); });\n  $('avc-frtest').addEventListener('change', function () { buildScoreInputs('avc-fr-scores', 'avc-fr-', this.value); });\n  buildScoreInputs('avc-en-scores', 'avc-en-', 'ielts');\n\n  document.querySelectorAll('input[name=\"avc-married\"]').forEach(function (r) {\n    r.addEventListener('change', function () { root.classList.toggle('married', this.value === '1'); });\n  });\n\n  var lastScore = null;\n  $('avc-go').addEventListener('click', function () {\n    var married = document.querySelector('input[name=\"avc-married\"]:checked').value === '1';\n    var spLang = null;\n    if (married) {\n      var sl = {}, any = false;\n      ABILITIES.forEach(function (ab) { var v = $('avc-sp-' + ab).value; sl[ab] = v === '' ? 0 : parseInt(v, 10); if (v !== '') { any = true; } });\n      spLang = any ? sl : null;\n    }\n    var p = {\n      married: married,\n      age: parseInt($('avc-age').value, 10) || 0,\n      edu: $('avc-edu').value,\n      canadianEdu: $('avc-canedu').value,\n      eng: readLang('avc-en-', $('avc-entest').value),\n      fr: readLang('avc-fr-', $('avc-frtest').value),\n      canExpYears: parseInt($('avc-canexp').value, 10),\n      foreignExpYears: parseInt($('avc-fexp').value, 10),\n      cert: $('avc-cert').checked,\n      pnp: $('avc-pnp').checked,\n      sibling: $('avc-sibling').checked,\n      spouse: married ? { edu: $('avc-spedu').value, lang: spLang, canExpYears: parseInt($('avc-spcanexp').value, 10) } : null\n    };\n    var r = AvalCRS.calculate(p);\n    lastScore = r.total;\n    $('avc-total').textContent = r.total;\n    $('avc-b-core').textContent = r.core;\n    $('avc-b-sp').textContent = r.spouse;\n    $('avc-b-sp-row').style.display = married ? '' : 'none';\n    $('avc-b-tr').textContent = r.transfer;\n    $('avc-b-add').textContent = r.additional;\n\n    var frn = $('avc-frnote');\n    var frMin = p.fr ? Math.min(p.fr.s, p.fr.l, p.fr.r, p.fr.w) : 0;\n    if (r.firstLang === 'fr') { frn.style.display = ''; frn.textContent = T.firstlang_fr + (frMin >= 7 ? ' ' + T.french_path : ''); }\n    else if (frMin >= 7) { frn.style.display = ''; frn.textContent = T.french_path; }\n    else { frn.style.display = ''; frn.textContent = T.french_tip; }\n\n    \/\/ draws\n    var host = $('avc-draws');\n    host.innerHTML = '';\n    (ROUNDS.rounds || []).forEach(function (d) {\n      var cut = parseInt(d.crs, 10);\n      var cls, txt;\n      if (r.total >= cut) { cls = 'ok'; txt = T.ok; }\n      else if (cut - r.total <= 30) { cls = 'close'; txt = T.close; }\n      else { cls = 'far'; txt = T.far; }\n      var hint = '';\n      if (d.key === 'cec' && p.canExpYears < 1) { hint = T.cec_hint; }\n      if (d.key === 'french' && frMin < 7) { hint = T.french_hint; }\n      if (d.key === 'pnp' && !p.pnp) { hint = T.pnp_hint; }\n      if (d.key !== 'cec' && d.key !== 'french' && d.key !== 'pnp') { hint = T.occ_hint; }\n      var row = document.createElement('div');\n      row.className = 'avc-draw';\n      row.innerHTML = '<span class=\"nm\">' + (LANG === 'en' ? d.en : d.fa) + ' <span class=\"avc-small\">(' + d.date + ')<\/span><\/span>' +\n        '<span class=\"co\">' + T.cutoff + ': ' + cut + '<\/span>' +\n        '<span class=\"st ' + cls + '\">' + txt + '<\/span>' +\n        (hint ? '<span class=\"hint\">' + hint + '<\/span>' : '');\n      host.appendChild(row);\n    });\n\n    $('avc-result').style.display = 'block';\n    $('avc-result').scrollIntoView({ block: 'start' });\n  });\n\n  $('avc-email-go').addEventListener('click', function () {\n    var email = $('avc-email').value;\n    var msg = $('avc-email-msg');\n    fetch(API, { method: 'POST', headers: { 'Content-Type': 'application\/json' },\n      body: JSON.stringify({ email: email, lang: LANG, source: 'crs-' + (lastScore === null ? 'na' : lastScore), note: 'CRS ' + (lastScore === null ? '?' : lastScore), website: '' })\n    }).then(function (r) { return r.json(); }).then(function (d) { msg.textContent = d.msg || ''; })\n      .catch(function () { msg.textContent = '\u2014'; });\n  });\n})();\n<\/script>\n<\/div>\n\n<p>See the published record of past rounds on the <a href=\"https:\/\/avalvisa.com\/en\/express-entry-draws\/\">Express Entry draws tracker<\/a>. Have raw test results in hand? Convert them first with our <a href=\"https:\/\/avalvisa.com\/en\/clb-converter\/\">CLB converter<\/a>. About your consultant: <a href=\"https:\/\/avalvisa.com\/en\/hadi-imani\/\">Hadi Imani, RCIC #R522575<\/a>.<\/p>\n<h2>Read this first: a job offer is now worth zero CRS points<\/h2>\n<p>It is a common reason a score you calculated somewhere else is too high. IRCC states it plainly: &#8220;As of March 25, 2025, we&#8217;re removing job offer points from the Comprehensive Ranking System for current and future candidates in the Express Entry pool.&#8221;<\/p>\n<p>Two awards disappeared. A job offer in NOC Major Group 00 \u2014 senior management \u2014 used to be worth 200 points. Any other skilled job offer used to be worth 50. Both are gone, for candidates already in the pool as well as for new ones. There is no grandfathering and no partial credit.<\/p>\n<p>The practical damage is not the points themselves, it is the planning built on them. A candidate who believes a Canadian offer will add 50 points sees a total that has not existed since March 2025, decides they are close enough, and stops working on the two things that would actually have moved them: language and, where it applies, a provincial nomination. Many third-party calculators and guides still carry the old figures. The tool above never adds job offer points.<\/p>\n<p>A job offer can still matter for other reasons. It can be a route into a provincial nomination stream, and it can matter for work permits and for settling once you arrive. It simply no longer adds anything to your CRS.<\/p>\n<p>We covered this change and what it means for people who already hold an offer in a separate piece: <a href=\"https:\/\/avalvisa.com\/en\/blog\/crs-job-offer-points-removed\/\">CRS job offer points removed &mdash; what changed and what to do<\/a>.<\/p>\n<h2>How the CRS is assembled<\/h2>\n<p>The maximum possible score is 1,200 points. That splits into core factors worth up to 600 and additional points worth up to 600 more. Almost everyone in the pool sits well inside the core half, because the additional half is dominated by one item \u2014 a provincial nomination \u2014 that most candidates do not have.<\/p>\n<p>Before anything else, the grid asks whether you have an accompanying spouse or common-law partner, because that changes every ceiling. If your partner is coming with you, some of your own maximums shrink and your partner earns a small number of points in their own right. If your partner is not coming with you, or is already a Canadian citizen or permanent resident, you are scored as if you have no spouse. That last rule surprises people: a candidate married to a Canadian is scored on the higher single-applicant ceilings.<\/p>\n<div class=\"av-tscroll\">\n<table>\n<thead>\n<tr>\n<th scope=\"col\">Section<\/th>\n<th scope=\"col\">With spouse<\/th>\n<th scope=\"col\">Without spouse<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">Age<\/th>\n<td>100<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Level of education<\/th>\n<td>140<\/td>\n<td>150<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Official languages proficiency<\/th>\n<td>150<\/td>\n<td>160<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Canadian work experience<\/th>\n<td>70<\/td>\n<td>80<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Spouse or partner factors<\/th>\n<td>40<\/td>\n<td>\u2014<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Skill transferability<\/th>\n<td colspan=\"2\">100 (each block capped at 50)<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Additional points<\/th>\n<td colspan=\"2\">600<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Age<\/h3>\n<p>Age is the one factor you cannot work on. It peaks from 20 to 29, holds at that peak for a full decade, then falls away \u2014 gently at first, then sharply after 40, and to nothing at 45. Read the table as a clock rather than a score: it tells you how much time you have before the profile you are building today is worth less than it is now.<\/p>\n<div class=\"av-tscroll\">\n<table>\n<thead>\n<tr>\n<th scope=\"col\">Age<\/th>\n<th scope=\"col\">With spouse<\/th>\n<th scope=\"col\">Without spouse<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">17 or younger<\/th>\n<td>0<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">18<\/th>\n<td>90<\/td>\n<td>99<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">19<\/th>\n<td>95<\/td>\n<td>105<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">20 to 29<\/th>\n<td>100<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">30<\/th>\n<td>95<\/td>\n<td>105<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">31<\/th>\n<td>90<\/td>\n<td>99<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">32<\/th>\n<td>85<\/td>\n<td>94<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">33<\/th>\n<td>80<\/td>\n<td>88<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">34<\/th>\n<td>75<\/td>\n<td>83<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">35<\/th>\n<td>70<\/td>\n<td>77<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">36<\/th>\n<td>65<\/td>\n<td>72<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">37<\/th>\n<td>60<\/td>\n<td>66<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">38<\/th>\n<td>55<\/td>\n<td>61<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">39<\/th>\n<td>50<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">40<\/th>\n<td>45<\/td>\n<td>50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">41<\/th>\n<td>35<\/td>\n<td>39<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">42<\/th>\n<td>25<\/td>\n<td>28<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">43<\/th>\n<td>15<\/td>\n<td>17<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">44<\/th>\n<td>5<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">45 or older<\/th>\n<td>0<\/td>\n<td>0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Level of education<\/h3>\n<p>Credentials earned outside Canada need an Educational Credential Assessment before they can be claimed, and it is the assessed Canadian equivalency that scores, not the title printed on your diploma. Notice the two rows people most often misread. A second credential counts: a bachelor&#8217;s plus a shorter post-secondary certificate scores above a bachelor&#8217;s alone. And &#8220;entry-to-practice professional degree&#8221; is a narrow list \u2014 medicine, veterinary medicine, dentistry, optometry, law, chiropractic medicine or pharmacy \u2014 not any professional-sounding qualification.<\/p>\n<div class=\"av-tscroll\">\n<table>\n<thead>\n<tr>\n<th scope=\"col\">Highest credential<\/th>\n<th scope=\"col\">With spouse<\/th>\n<th scope=\"col\">Without spouse<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">Less than secondary school<\/th>\n<td>0<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Secondary (high school)<\/th>\n<td>28<\/td>\n<td>30<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">One-year post-secondary credential<\/th>\n<td>84<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Two-year post-secondary program<\/th>\n<td>91<\/td>\n<td>98<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Bachelor&#8217;s, or a program of three years or more<\/th>\n<td>112<\/td>\n<td>120<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Two or more credentials, one of them three years or longer<\/th>\n<td>119<\/td>\n<td>128<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Master&#8217;s, or entry-to-practice professional degree<\/th>\n<td>126<\/td>\n<td>135<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Doctoral (PhD)<\/th>\n<td>140<\/td>\n<td>150<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>First official language<\/h3>\n<p>Language is scored ability by ability \u2014 reading, writing, listening and speaking each earn points separately. Your weakest ability is not averaged away; it is simply worth less. The steps are worth a similar amount all the way up: moving one ability from CLB 6 to CLB 7 is worth 8 points, and from CLB 8 to CLB 9 is worth 7 points with a spouse or 8 without \u2014 but CLB 9 across all four abilities is also the gate that unlocks the higher skill-transferability tier further down.<\/p>\n<div class=\"av-tscroll\">\n<table>\n<thead>\n<tr>\n<th scope=\"col\">CLB level (per ability)<\/th>\n<th scope=\"col\">With spouse<\/th>\n<th scope=\"col\">Without spouse<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">Below CLB 4<\/th>\n<td>0<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">CLB 4 to 5<\/th>\n<td>6<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">CLB 6<\/th>\n<td>8<\/td>\n<td>9<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">CLB 7<\/th>\n<td>16<\/td>\n<td>17<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">CLB 8<\/th>\n<td>22<\/td>\n<td>23<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">CLB 9<\/th>\n<td>29<\/td>\n<td>31<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">CLB 10 or higher<\/th>\n<td>32<\/td>\n<td>34<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Maximum, all four abilities<\/th>\n<td>128<\/td>\n<td>136<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>A second official language is scored on the same per-ability basis but far more modestly: CLB 4 or less earns nothing, CLB 5 to 6 earns 1 point per ability, CLB 7 to 8 earns 3, and CLB 9 or higher earns 6 \u2014 capped at 22 points with a spouse and 24 without. Do not confuse this with the French additional points described further down, which are much larger and are counted separately.<\/p>\n<h3>Canadian work experience<\/h3>\n<p>Only skilled work performed in Canada counts here. Experience gathered anywhere else is not scored in this section at all; it appears only inside skill transferability, and only in combination with strong language results or Canadian experience. The first year is the big step, and the returns flatten after that.<\/p>\n<div class=\"av-tscroll\">\n<table>\n<thead>\n<tr>\n<th scope=\"col\">Skilled work experience in Canada<\/th>\n<th scope=\"col\">With spouse<\/th>\n<th scope=\"col\">Without spouse<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">None, or less than one year<\/th>\n<td>0<\/td>\n<td>0<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">One year<\/th>\n<td>35<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Two years<\/th>\n<td>46<\/td>\n<td>53<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Three years<\/th>\n<td>56<\/td>\n<td>64<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Four years<\/th>\n<td>63<\/td>\n<td>72<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Five years or more<\/th>\n<td>70<\/td>\n<td>80<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Spouse or partner factors<\/h3>\n<p>An accompanying partner can contribute up to 40 points: 10 for education, 20 for official language ability and 10 for Canadian work experience. Their language is scored per ability like yours, at 1 point for CLB 5 to 6, 3 points for CLB 7 to 8 and 5 points for CLB 9 or higher, to a maximum of 20. Run both versions in the calculator: the higher single-applicant ceilings sometimes beat the couple version.<\/p>\n<h2>Skill transferability: the part people forget<\/h2>\n<p>This section is worth up to 100 points and it rewards combinations, not individual credentials. Each block inside it is capped at 50, and the section total is capped at 100 no matter how many blocks you fill.<\/p>\n<ul>\n<li><strong>Education combined with language or Canadian experience.<\/strong> Every value here has two tiers: the lower one applies at CLB 7 or higher with at least one ability below 9, the higher one at CLB 9 or higher across all four. A post-secondary credential of a year or more is worth 13 points, or 25. Two or more credentials with one of three years or longer, a master&#8217;s, an entry-to-practice professional degree or a doctorate are worth 25, or 50. The same two tiers apply to education combined with Canadian work experience, where one year of that experience stands in for CLB 7 and two years or more for CLB 9.<\/li>\n<li><strong>Foreign work experience.<\/strong> On its own it scores nothing. Paired with CLB 7 or higher it is worth 13 points for one to two years and 25 for three or more; paired with CLB 9 across all four abilities, 25 and 50. The same values apply when it is paired with one year of Canadian experience, or with two years or more.<\/li>\n<li><strong>Certificate of qualification in a trade.<\/strong> Worth 25 points with CLB 5 or higher (with at least one ability below 7), and 50 points with CLB 7 or higher on all four abilities.<\/li>\n<\/ul>\n<p>Read those bullets again and you will see the pattern that runs through the whole grid: language is the multiplier. Inside skill transferability, the same degree and the same career are worth double once you reach CLB 9 in all four abilities.<\/p>\n<h2>Additional points: where scores actually jump<\/h2>\n<div class=\"av-tscroll\">\n<table>\n<thead>\n<tr>\n<th scope=\"col\">Additional factor<\/th>\n<th scope=\"col\">Points<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">Provincial or territorial nomination<\/th>\n<td>600<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">French at NCLC 7 or higher on all four abilities, with CLB 5 or higher in English on all four<\/th>\n<td>50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">French at NCLC 7 or higher on all four abilities, with CLB 4 or lower in English, or no English test<\/th>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Post-secondary education in Canada, three years or longer<\/th>\n<td>30<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Post-secondary education in Canada, one- or two-year credential<\/th>\n<td>15<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Sibling in Canada, aged 18 or over, a citizen or permanent resident<\/th>\n<td>15<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">Job offer of any kind<\/th>\n<td>0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2>What actually moves a score<\/h2>\n<p>Once the arithmetic is done, only a handful of levers are real.<\/p>\n<p><strong>A provincial nomination is 600 points and dwarfs everything else.<\/strong> It is worth as much as the entire core half of the grid \u2014 up to 600 points \u2014 added together. Nothing you do to your language results, your education or your work history compares to it. That does not make it a plan \u2014 nominations are awarded by provinces under their own streams and criteria, and no calculator can tell you whether you will receive one. But it does mean that if a provincial stream fits your occupation and circumstances, it deserves more of your attention than another retest.<\/p>\n<p><strong>Language is the best repeatable lever.<\/strong> It is scored four times over in the first-language table, again in the second-language table, and again as the multiplier inside skill transferability. A single ability lifted from CLB 8 to CLB 9 pays in more than one place at once. It is also the only major factor you can genuinely change within a few months.<\/p>\n<p><strong>French is worth up to 50 additional points.<\/strong> NCLC 7 across all four French abilities earns 25, or 50 when it is paired with CLB 5 or higher in English on all four. For a candidate with usable French already, that is often the largest gain available short of a nomination \u2014 and French ability also opens doors in provincial streams that English-only candidates cannot use.<\/p>\n<p><strong>Age decays and cannot be repaired.<\/strong> Every birthday past 29 costs points, and the losses accelerate after 40. This is the argument against waiting: a profile assembled at 34 is worth more than the identical profile assembled at 38, and no amount of later effort recovers the difference.<\/p>\n<p><strong>Education is a one-time step, not a strategy.<\/strong> Getting an existing credential assessed, or claiming a second credential you already hold and had overlooked, can be worth real points for the price of some paperwork. Enrolling in a new program purely to gain CRS points rarely pays for the years it costs \u2014 the age table usually takes back what the education table gives.<\/p>\n<h2>How to read the number this calculator gives you<\/h2>\n<p>It is an estimate, and an unofficial one. The calculator applies the published grid to the answers you type; IRCC scores the profile you actually submit, against the documents you actually provide. Three things commonly separate the two.<\/p>\n<ul>\n<li><strong>Education.<\/strong> Your score depends on the Canadian equivalency in your ECA report, not on how the credential is described at home.<\/li>\n<li><strong>Work experience.<\/strong> Only work that is properly documented and correctly classified counts, and only continuous, paid, skilled experience qualifies at all.<\/li>\n<li><strong>Language.<\/strong> Test results have a validity period, and the results IRCC scores are the ones valid on the day your profile is assessed \u2014 not your best-ever sitting.<\/li>\n<\/ul>\n<p>Nobody can promise you an invitation, and this page deliberately does not publish a target score. Rounds are announced by IRCC after the fact, and each one sets its own cut-off; you can review the published history on our <a href=\"https:\/\/avalvisa.com\/en\/express-entry-draws\/\">Express Entry draws tracker<\/a>. The useful way to use the tool above is comparatively: run your profile as it stands, then run it again with one ability at CLB 9, then with a second credential claimed, and see which change is worth your next six months.<\/p>\n<p>If your score is close to what recent rounds have required, the details start to matter a great deal, and a mistake in how a credential or a year of work is classified can cost more points than any retest will win back. That is the point at which it is worth having a licensed professional look at the profile itself. <a href=\"https:\/\/avalvisa.com\/en\/hadi-imani\/\">Hadi Imani, RCIC #R522575<\/a>, is a Regulated Canadian Immigration Consultant based in Toronto.<\/p>\n<h2>Source<\/h2>\n<p>All point values on this page are taken from the official IRCC Comprehensive Ranking System grid: <a href=\"https:\/\/www.canada.ca\/en\/immigration-refugees-citizenship\/services\/immigrate-canada\/express-entry\/eligibility\/criteria-comprehensive-ranking-system\/grid.html\" rel=\"nofollow noopener\" target=\"_blank\">Comprehensive Ranking System (CRS) criteria \u2014 Express Entry, canada.ca<\/a>. Where this page and IRCC differ, IRCC governs.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Work out your Express Entry CRS score in about a minute. The calculator below follows the official IRCC grid, converts your IELTS, CELPIP, PTE or TEF results into CLB levels automatically, and gives a job offer zero points, which has been the rule since 25 March 2025. See the published record of past rounds on [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-23265","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/avalvisa.com\/en\/wp-json\/wp\/v2\/pages\/23265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/avalvisa.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/avalvisa.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/avalvisa.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/avalvisa.com\/en\/wp-json\/wp\/v2\/comments?post=23265"}],"version-history":[{"count":3,"href":"https:\/\/avalvisa.com\/en\/wp-json\/wp\/v2\/pages\/23265\/revisions"}],"predecessor-version":[{"id":25089,"href":"https:\/\/avalvisa.com\/en\/wp-json\/wp\/v2\/pages\/23265\/revisions\/25089"}],"wp:attachment":[{"href":"https:\/\/avalvisa.com\/en\/wp-json\/wp\/v2\/media?parent=23265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}