{"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-08-25T19:32:34","modified_gmt":"2026-08-25T16:02:34","slug":"crs-calculator","status":"publish","type":"page","link":"https:\/\/avalvisa.com\/en\/crs-calculator\/","title":{"rendered":"Express Entry CRS Calculator"},"content":{"rendered":"<p>Calculate your CRS score instantly and for free \u2014 based on the official IRCC grid (updated June 2026). Your IELTS, CELPIP, PTE or TEF scores convert to CLB automatically, and your result is compared with the latest Express Entry draw cut-offs.<\/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-08-24<\/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-08-24\",\"rounds\":[{\"key\":\"french\",\"fa\":\"\u0645\u0647\u0627\u0631\u062a \u0632\u0628\u0627\u0646 \u0641\u0631\u0627\u0646\u0633\u0647\",\"en\":\"French-language proficiency\",\"crs\":382,\"date\":\"2026-08-19\",\"size\":5000},{\"key\":\"cec\",\"fa\":\"\u062a\u062c\u0631\u0628\u0647 \u06a9\u0627\u0646\u0627\u062f\u0627\u06cc\u06cc (CEC)\",\"en\":\"Canadian Experience Class\",\"crs\":523,\"date\":\"2026-08-18\",\"size\":1000},{\"key\":\"pnp\",\"fa\":\"\u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a\u0627\u0646\u06cc (PNP)\",\"en\":\"Provincial Nominee Program\",\"crs\":760,\"date\":\"2026-08-17\",\"size\":442},{\"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},{\"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\":392,\"date\":\"2026-07-10\",\"size\":500}],\"recent\":[{\"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\"},{\"n\":\"430\",\"date\":\"2026-07-23\",\"name\":\"Skilled Military Recruits\",\"size\":\"4\",\"crs\":\"368\"},{\"n\":\"429\",\"date\":\"2026-07-22\",\"name\":\"French-Language proficiency\",\"size\":\"5,000\",\"crs\":\"399\"},{\"n\":\"428\",\"date\":\"2026-07-21\",\"name\":\"Canadian Experience Class\",\"size\":\"2,000\",\"crs\":\"516\"},{\"n\":\"427\",\"date\":\"2026-07-20\",\"name\":\"Provincial Nominee Program\",\"size\":\"511\",\"crs\":\"744\"},{\"n\":\"426\",\"date\":\"2026-07-10\",\"name\":\"Senior managers with Canadian work experience\",\"size\":\"500\",\"crs\":\"392\"},{\"n\":\"425\",\"date\":\"2026-07-09\",\"name\":\"French-Language proficiency\",\"size\":\"5,000\",\"crs\":\"420\"},{\"n\":\"424\",\"date\":\"2026-07-07\",\"name\":\"Canadian Experience Class\",\"size\":\"2,000\",\"crs\":\"517\"}]};\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 === 'transport' || d.key === 'senior') { 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 full table of recent rounds on the <a href=\"https:\/\/avalvisa.com\/en\/express-entry-draws\/\">Express Entry draws tracker<\/a>. About your consultant: <a href=\"https:\/\/avalvisa.com\/en\/hadi-imani\/\">Hadi Imani, RCIC #R522575<\/a>.<\/p>\n<p>Have raw test scores? Convert them first with our <a href=\"https:\/\/avalvisa.com\/en\/clb-converter\/\">CLB converter<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Calculate your CRS score instantly and for free \u2014 based on the official IRCC grid (updated June 2026). Your IELTS, CELPIP, PTE or TEF scores convert to CLB automatically, and your result is compared with the latest Express Entry draw cut-offs. See the full table of recent rounds on the Express Entry draws tracker. About [&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":2,"href":"https:\/\/avalvisa.com\/en\/wp-json\/wp\/v2\/pages\/23265\/revisions"}],"predecessor-version":[{"id":23362,"href":"https:\/\/avalvisa.com\/en\/wp-json\/wp\/v2\/pages\/23265\/revisions\/23362"}],"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}]}}