{"id":4870,"date":"2026-07-30T15:55:58","date_gmt":"2026-07-30T15:55:58","guid":{"rendered":"https:\/\/sugimotovisa.com\/en\/?page_id=4870"},"modified":"2026-07-30T16:20:51","modified_gmt":"2026-07-30T16:20:51","slug":"oinp-points-calculator","status":"publish","type":"page","link":"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/","title":{"rendered":"Ontario Immigrant Nominee (OINP) Points Calculator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4870\" class=\"elementor elementor-4870\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-412a646 e-flex e-con-boxed e-con e-parent\" data-id=\"412a646\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;ekit_has_onepagescroll_dot&quot;:&quot;yes&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-79a9889 elementor-widget elementor-widget-heading\" data-id=\"79a9889\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">OINP Points Calculator for the Ontario Workforce Priority Stream<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0358678 elementor-widget elementor-widget-text-editor\" data-id=\"0358678\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p class=\"isSelectedEnd\">Use this calculator to estimate your Expression of Interest score for Ontario\u2019s Workforce Priority Stream.<\/p><p class=\"isSelectedEnd\">The stream replaced the previous OINP streams in June 2026, and Ontario published its scoring rules on July 20, 2026. Job-offer applicants can score up to 130 points, while eligible self-employed physicians can score up to 115 points.<\/p><p class=\"isSelectedEnd\">Your estimated score updates as you answer the questions. The result is for general guidance only and does not guarantee eligibility or an invitation to apply.<\/p><p>This is a free, unofficial tool provided by PS Consulter and is not connected to the Government of Ontario.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1a66279 elementor-widget elementor-widget-html\" data-id=\"1a66279\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"svc-oinp\" lang=\"en\" dir=\"ltr\">\n      <div class=\"wrap\">\n\n     <header class=\"hero\">\n      <h2 id=\"svc_h-title\"><\/h2>\n      <p id=\"svc_h-sub\"><\/p>\n    <\/header>\n\n    <div class=\"card\">\n      <h3 id=\"svc_t-type\"><\/h3>\n\n      <div class=\"toggle\" id=\"svc_typeToggle\">\n        <button\n          type=\"button\"\n          data-type=\"offer\"\n          aria-pressed=\"true\"\n        ><\/button>\n\n        <button\n          type=\"button\"\n          data-type=\"physician\"\n          aria-pressed=\"false\"\n        ><\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"card\">\n      <h2 id=\"svc_t-emp\"><\/h2>\n      <div id=\"svc_empFields\"><\/div>\n    <\/div>\n\n    <div class=\"card\">\n      <h2 id=\"svc_t-edu\"><\/h2>\n      <div id=\"svc_eduFields\"><\/div>\n    <\/div>\n\n    <div class=\"card\">\n      <h2 id=\"svc_t-lang\"><\/h2>\n\n      <div class=\"row\">\n        <label\n          class=\"q\"\n          id=\"svc_l1-lab\"\n          for=\"svc_test1\"\n        ><\/label>\n\n        <select id=\"svc_test1\"><\/select>\n      <\/div>\n\n      <div\n        class=\"skills\"\n        id=\"svc_skills1\"\n      ><\/div>\n\n      <div\n        class=\"clbout\"\n        id=\"svc_clb1\"\n        style=\"display:none\"\n      ><\/div>\n\n      <div\n        class=\"row\"\n        style=\"margin-top:22px\"\n      >\n        <label\n          class=\"q\"\n          id=\"svc_l2-lab\"\n          for=\"svc_test2\"\n        ><\/label>\n\n        <select id=\"svc_test2\"><\/select>\n      <\/div>\n\n      <div\n        class=\"skills\"\n        id=\"svc_skills2\"\n      ><\/div>\n\n      <div\n        class=\"clbout\"\n        id=\"svc_clb2\"\n        style=\"display:none\"\n      ><\/div>\n    <\/div>\n\n    <div class=\"card\">\n      <h2 id=\"svc_t-reg\"><\/h2>\n      <div id=\"svc_regFields\"><\/div>\n    <\/div>\n\n    <div class=\"card\">\n      <h2 id=\"svc_t-break\"><\/h2>\n\n      <table class=\"bd\">\n        <tbody id=\"svc_breakdown\"><\/tbody>\n      <\/table>\n\n      <div\n        class=\"note\"\n        id=\"svc_disclaimer\"\n      ><\/div>\n\n      <div class=\"actions\">\n        <button\n          type=\"button\"\n          class=\"primary\"\n          id=\"svc_printBtn\"\n        ><\/button>\n\n        <button\n          type=\"button\"\n          id=\"svc_resetBtn\"\n        ><\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"result\">\n      <div>\n        <div\n          class=\"lbl\"\n          id=\"svc_r-lab\"\n        ><\/div>\n\n        <div>\n          <span\n            class=\"big\"\n            id=\"svc_total\"\n          >0<\/span>\n\n          <span style=\"opacity:.8\">\n            \/\n            <span id=\"svc_maxTotal\">130<\/span>\n          <\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"bar\">\n        <i\n          id=\"svc_barFill\"\n          style=\"width:0%\"\n        ><\/i>\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5159bca elementor-widget elementor-widget-html\" data-id=\"5159bca\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script>\n(function(){\n  \"use strict\";\n\n  \/* ------------------------------------------------------------------\n     1. CLB conversion tables\n  ------------------------------------------------------------------ *\/\n\n  var CELPIP = [\n    ['12', 10],\n    ['11', 10],\n    ['10', 10],\n    ['9', 9],\n    ['8', 8],\n    ['7', 7],\n    ['6', 6],\n    ['5', 5],\n    ['4', 4],\n    ['3 or below', 0]\n  ];\n\n  var TESTS = {\n    none: null,\n\n    celpip: {\n      name: 'CELPIP-General',\n      lang: 'en',\n      R: CELPIP,\n      W: CELPIP,\n      L: CELPIP,\n      S: CELPIP\n    },\n\n    ielts: {\n      name: 'IELTS General Training',\n      lang: 'en',\n\n      R: [\n        ['8.0 \u2013 9.0', 10],\n        ['7.0 \u2013 7.5', 9],\n        ['6.5', 8],\n        ['6.0', 7],\n        ['5.0 \u2013 5.5', 6],\n        ['4.0 \u2013 4.5', 5],\n        ['3.5', 4],\n        ['3.0 or below', 0]\n      ],\n\n      W: [\n        ['7.5 \u2013 9.0', 10],\n        ['7.0', 9],\n        ['6.5', 8],\n        ['6.0', 7],\n        ['5.5', 6],\n        ['5.0', 5],\n        ['4.0 \u2013 4.5', 4],\n        ['3.5 or below', 0]\n      ],\n\n      L: [\n        ['8.5 \u2013 9.0', 10],\n        ['8.0', 9],\n        ['7.5', 8],\n        ['6.0 \u2013 7.0', 7],\n        ['5.5', 6],\n        ['5.0', 5],\n        ['4.5', 4],\n        ['4.0 or below', 0]\n      ],\n\n      S: [\n        ['7.5 \u2013 9.0', 10],\n        ['7.0', 9],\n        ['6.5', 8],\n        ['6.0', 7],\n        ['5.5', 6],\n        ['5.0', 5],\n        ['4.0 \u2013 4.5', 4],\n        ['3.5 or below', 0]\n      ]\n    },\n\n    pte: {\n      name: 'PTE Core',\n      lang: 'en',\n\n      R: [\n        ['88 \u2013 90', 10],\n        ['78 \u2013 87', 9],\n        ['69 \u2013 77', 8],\n        ['60 \u2013 68', 7],\n        ['51 \u2013 59', 6],\n        ['42 \u2013 50', 5],\n        ['33 \u2013 41', 4],\n        ['32 or below', 0]\n      ],\n\n      W: [\n        ['90', 10],\n        ['88 \u2013 89', 9],\n        ['79 \u2013 87', 8],\n        ['69 \u2013 78', 7],\n        ['60 \u2013 68', 6],\n        ['51 \u2013 59', 5],\n        ['41 \u2013 50', 4],\n        ['40 or below', 0]\n      ],\n\n      L: [\n        ['89 \u2013 90', 10],\n        ['82 \u2013 88', 9],\n        ['71 \u2013 81', 8],\n        ['60 \u2013 70', 7],\n        ['50 \u2013 59', 6],\n        ['39 \u2013 49', 5],\n        ['28 \u2013 38', 4],\n        ['27 or below', 0]\n      ],\n\n      S: [\n        ['89 \u2013 90', 10],\n        ['84 \u2013 88', 9],\n        ['76 \u2013 83', 8],\n        ['68 \u2013 75', 7],\n        ['59 \u2013 67', 6],\n        ['51 \u2013 58', 5],\n        ['42 \u2013 50', 4],\n        ['41 or below', 0]\n      ]\n    },\n\n    tef: {\n      name: 'TEF Canada',\n      lang: 'fr',\n\n      R: [\n        ['546 \u2013 699', 10],\n        ['503 \u2013 545', 9],\n        ['462 \u2013 502', 8],\n        ['434 \u2013 461', 7],\n        ['393 \u2013 433', 6],\n        ['352 \u2013 392', 5],\n        ['306 \u2013 351', 4],\n        ['305 or below', 0]\n      ],\n\n      W: [\n        ['558 \u2013 699', 10],\n        ['512 \u2013 557', 9],\n        ['472 \u2013 511', 8],\n        ['428 \u2013 471', 7],\n        ['379 \u2013 427', 6],\n        ['330 \u2013 378', 5],\n        ['268 \u2013 329', 4],\n        ['267 or below', 0]\n      ],\n\n      L: [\n        ['546 \u2013 699', 10],\n        ['503 \u2013 545', 9],\n        ['462 \u2013 502', 8],\n        ['434 \u2013 461', 7],\n        ['393 \u2013 433', 6],\n        ['352 \u2013 392', 5],\n        ['306 \u2013 351', 4],\n        ['305 or below', 0]\n      ],\n\n      S: [\n        ['556 \u2013 699', 10],\n        ['518 \u2013 555', 9],\n        ['494 \u2013 517', 8],\n        ['456 \u2013 493', 7],\n        ['422 \u2013 455', 6],\n        ['387 \u2013 421', 5],\n        ['328 \u2013 386', 4],\n        ['327 or below', 0]\n      ]\n    },\n\n    tcf: {\n      name: 'TCF Canada',\n      lang: 'fr',\n\n      R: [\n        ['549 \u2013 699', 10],\n        ['524 \u2013 548', 9],\n        ['499 \u2013 523', 8],\n        ['453 \u2013 498', 7],\n        ['406 \u2013 452', 6],\n        ['375 \u2013 405', 5],\n        ['342 \u2013 374', 4],\n        ['341 or below', 0]\n      ],\n\n      W: [\n        ['16 \u2013 20', 10],\n        ['14 \u2013 15', 9],\n        ['12 \u2013 13', 8],\n        ['10 \u2013 11', 7],\n        ['7 \u2013 9', 6],\n        ['6', 5],\n        ['4 \u2013 5', 4],\n        ['3 or below', 0]\n      ],\n\n      L: [\n        ['549 \u2013 699', 10],\n        ['523 \u2013 548', 9],\n        ['503 \u2013 522', 8],\n        ['458 \u2013 502', 7],\n        ['398 \u2013 457', 6],\n        ['369 \u2013 397', 5],\n        ['331 \u2013 368', 4],\n        ['330 or below', 0]\n      ],\n\n      S: [\n        ['16 \u2013 20', 10],\n        ['14 \u2013 15', 9],\n        ['12 \u2013 13', 8],\n        ['10 \u2013 11', 7],\n        ['7 \u2013 9', 6],\n        ['6', 5],\n        ['4 \u2013 5', 4],\n        ['3 or below', 0]\n      ]\n    }\n  };\n\n  \/* ------------------------------------------------------------------\n     2. OINP fields\n  ------------------------------------------------------------------ *\/\n\n  var FIELDS = {\n    teer: {\n      box: 'emp',\n      max: 9,\n\n      q: 'NOC TEER category of your job',\n\n      hint:\n        'From the National Occupational Classification code of the offered position.',\n\n      opts: [\n        [9, 'TEER 0 or 1'],\n        [6, 'TEER 2 or 3'],\n        [0, 'TEER 4'],\n        [0, 'TEER 5']\n      ]\n    },\n\n    boc: {\n      box: 'emp',\n      max: 10,\n\n      q: 'NOC broad occupational category',\n\n      hint:\n        'The first digit of your 5-digit NOC code.',\n\n      opts: [\n        [10, '3 \u2014 Health occupations'],\n\n        [\n          8,\n          '7 \u2014 Trades, transport and equipment operators'\n        ],\n\n        [\n          6,\n          '2 \u2014 Natural and applied sciences'\n        ],\n\n        [\n          4,\n          '0 \u2014 Legislative and senior management'\n        ],\n\n        [\n          4,\n          '1 \u2014 Business, finance and administration'\n        ],\n\n        [\n          4,\n          '4 \u2014 Education, law, social, community and government services'\n        ],\n\n        [\n          4,\n          '8 \u2014 Natural resources, agriculture and related production'\n        ],\n\n        [\n          4,\n          '9 \u2014 Manufacturing and utilities'\n        ],\n\n        [\n          2,\n          '5 \u2014 Art, culture, recreation and sport'\n        ],\n\n        [\n          2,\n          '6 \u2014 Sales and service'\n        ]\n      ]\n    },\n\n    wage: {\n      box: 'emp',\n      max: 15,\n      offerOnly: true,\n\n      q: 'Hourly wage of the job offer',\n\n      hint:\n        'Job offer applicants only. Physicians are not scored on wage.',\n\n      opts: [\n        [15, '$40.00\/hour or more'],\n        [12, '$35.00 \u2013 $39.99\/hour'],\n        [10, '$30.00 \u2013 $34.99\/hour'],\n        [8, '$25.00 \u2013 $29.99\/hour'],\n        [5, '$20.00 \u2013 $24.99\/hour'],\n        [0, 'Less than $20.00\/hour']\n      ]\n    },\n\n    onExp: {\n      box: 'emp',\n      max: 18,\n\n      q:\n        'Ontario work experience in the job position',\n\n      qPhys:\n        'Cumulative practice experience in Ontario',\n\n      hint:\n        'Full-time, or the part-time equivalent, in the offered position.',\n\n      hintPhys:\n        'As a licensed physician holding an active OHIP billing number.',\n\n      opts: [\n        [18, 'More than 24 months'],\n        [15, '13 \u2013 24 months'],\n        [12, '6 \u2013 12 months'],\n\n        [\n          -1,\n          'Less than 6 months \/ not working in the position'\n        ]\n      ]\n    },\n\n    onExpAlt: {\n      box: 'emp',\n      max: 0,\n      dependent: true,\n\n      q:\n        'Total work experience in Ontario (any occupation)',\n\n      hint:\n        'Used because you have less than 6 months in the offered position.',\n\n      opts: [\n        [12, 'More than 24 months'],\n        [9, '13 \u2013 24 months'],\n        [6, '6 \u2013 12 months'],\n        [0, 'Less than 6 months \/ not working']\n      ]\n    },\n\n    earnings: {\n      box: 'emp',\n      max: 8,\n\n      q: 'Canadian earnings history',\n\n      hint:\n        'Highest annual income on a CRA Notice of Assessment in the last 5 years.',\n\n      opts: [\n        [8, '$70,000 or more'],\n        [6, '$50,000 \u2013 $69,999'],\n        [4, '$30,000 \u2013 $49,999'],\n\n        [\n          0,\n          'Less than $30,000 \/ no Canadian earnings'\n        ]\n      ]\n    },\n\n    status: {\n      box: 'emp',\n      max: 10,\n\n      q: 'Legal status in Canada',\n\n      opts: [\n        [10, 'Valid work permit'],\n        [5, 'Valid study permit'],\n        [0, 'No valid permit \/ outside Canada']\n      ]\n    },\n\n    edu: {\n      box: 'edu',\n      max: 10,\n\n      q: 'Highest level of education',\n\n      hint:\n        'A Canadian credential, or a foreign credential with an Educational Credential Assessment (ECA).',\n\n      opts: [\n        [\n          10,\n          'Doctorate, or degree in medicine, dentistry, veterinary medicine or optometry'\n        ],\n\n        [8, \"Master's degree\"],\n\n        [\n          6,\n          \"Bachelor's degree or equivalent\"\n        ],\n\n        [\n          6,\n          \"University certificate or diploma above bachelor's level\"\n        ],\n\n        [\n          5,\n          'Ontario College Graduate Certificate'\n        ],\n\n        [\n          5,\n          \"University certificate or diploma below bachelor's level\"\n        ],\n\n        [\n          5,\n          'College, CEGEP or other non-university certificate or diploma'\n        ],\n\n        [\n          5,\n          'Apprenticeship or trades certificate'\n        ],\n\n        [\n          0,\n          'Less than a college or trades credential'\n        ]\n      ]\n    },\n\n    eduCad: {\n      box: 'edu',\n      max: 10,\n\n      q:\n        'Number of Canadian education credentials',\n\n      hint:\n        'Post-secondary credentials of at least one year of full-time study.',\n\n      opts: [\n        [10, 'More than one'],\n        [5, 'One'],\n        [0, 'None']\n      ]\n    },\n\n    region: {\n      box: 'reg',\n      max: 15,\n\n      q: 'Work location in Ontario',\n\n      hint:\n        \"The location of the job offer, or the address tied to a physician's OHIP billing number.\",\n\n      opts: [\n        [15, 'Northern Ontario'],\n        [10, 'Eastern Ontario'],\n\n        [\n          10,\n          'Central Ontario (outside the GTA)'\n        ],\n\n        [10, 'Southwestern Ontario'],\n\n        [\n          5,\n          'Inside the GTA (excluding the City of Toronto)'\n        ],\n\n        [0, 'City of Toronto']\n      ]\n    }\n  };\n\n  var ORDER = [\n    'teer',\n    'boc',\n    'wage',\n    'onExp',\n    'onExpAlt',\n    'earnings',\n    'status',\n    'edu',\n    'eduCad',\n    'region'\n  ];\n\n  \/* ------------------------------------------------------------------\n     3. Static strings\n  ------------------------------------------------------------------ *\/\n\n  var T = {\n    title:\n      'OINP Ontario Workforce Priority Stream \u2014 Score Calculator',\n\n    sub:\n      'Estimate the points on your Expression of Interest (EOI). Maximum score: <strong>130 points<\/strong>.',\n\n    type:\n      'Applicant type',\n\n    offer:\n      'Applicant with a job offer',\n\n    physician:\n      'Self-employed physician',\n\n    emp:\n      'Employment &amp; labour market',\n\n    edu:\n      'Education',\n\n    lang:\n      'Language',\n\n    reg:\n      'Regionalization',\n\n    brk:\n      'Your score breakdown',\n\n    maxOf:\n      'Maximum $1 points',\n\n    maxEmp:\n      'Maximum 70 points (55 for physicians)',\n\n    maxEdu:\n      'Maximum 20 points',\n\n    maxLang:\n      'Maximum 25 points',\n\n    maxReg:\n      'Maximum 15 points',\n\n    t1:\n      'Your language test',\n\n    t1h:\n      'Accepted tests only. The test date must be within 2 years of your application.',\n\n    t2:\n      'Second official language test (optional)',\n\n    t2h:\n      'Add a test in the other official language to score the bilingual points.',\n\n    noTest:\n      '\u2014 I have not taken a test \u2014',\n\n    R:\n      'Reading',\n\n    W:\n      'Writing',\n\n    L:\n      'Listening',\n\n    S:\n      'Speaking',\n\n    pick:\n      'Select\u2026',\n\n    yourClb:\n      'Your level:',\n\n    clbIs:\n      'CLB $1',\n\n    nclcIs:\n      'NCLC $1',\n\n    lowest:\n      'Your level is the <strong>lowest<\/strong> of your four abilities \u2014 every skill must reach the level for it to count.',\n\n    perSkill:\n      'Per skill:',\n\n    incomplete:\n      'Fill in all four abilities to see your level.',\n\n    belowFour:\n      'Below CLB 4 \u2014 this does not meet the minimum for any TEER category.',\n\n    bAbility:\n      'Official language ability',\n\n    bKnow:\n      'Knowledge of official languages',\n\n    bTeer:\n      'NOC TEER category',\n\n    bBoc:\n      'NOC broad occupational category',\n\n    bWage:\n      'Hourly wage',\n\n    bExp:\n      'Ontario work experience',\n\n    bEarn:\n      'Canadian earnings history',\n\n    bStat:\n      'Legal status in Canada',\n\n    bEdu:\n      'Highest level of education',\n\n    bEduC:\n      'Canadian education credentials',\n\n    bReg:\n      'Regional immigration (work location)',\n\n    score:\n      'Estimated EOI score',\n\n    print:\n      'Print \/ save as PDF',\n\n    reset:\n      'Reset',\n\n    disc:\n      '<strong>Important:<\/strong> This is an unofficial estimate for guidance only. The OINP does not publish a fixed pass mark \u2014 invitations are issued in selection rounds, and the cut-off changes with each round and targeted occupation. You must also meet every eligibility requirement (work experience, licensing, education, language, legal status, and the employer and job offer criteria) in addition to scoring well. Always confirm against ontario.ca, and speak with a licensed representative before applying.'\n  };\n\n  \/* ------------------------------------------------------------------\n     4. State and helpers\n  ------------------------------------------------------------------ *\/\n\n  var isPhysician = false;\n  var vals = {};\n\n  var picks = {\n    t1: 'none',\n    t2: 'none'\n  };\n\n  var skillVals = {\n    t1: {},\n    t2: {}\n  };\n\n  var ROOT = document.getElementById('svc-oinp');\n\n  if (!ROOT) {\n    return;\n  }\n\n  var $ = function(id){\n    return document.getElementById('svc_' + id);\n  };\n\n  var t = function(key, value){\n    var text = T[key];\n\n    return value === undefined\n      ? text\n      : text.replace('$1', value);\n  };\n\n  function num(number){\n    return String(number);\n  }\n\n  \/* ------------------------------------------------------------------\n     5. Render scoring fields\n  ------------------------------------------------------------------ *\/\n\n  function renderFields(){\n    var boxes = {\n      emp: '',\n      edu: '',\n      reg: ''\n    };\n\n    ORDER.forEach(function(key){\n      var field = FIELDS[key];\n\n      if (field.offerOnly && isPhysician) {\n        return;\n      }\n\n      if (\n        key === 'onExpAlt' &&\n        !(vals.onExp === -1 && !isPhysician)\n      ) {\n        return;\n      }\n\n      var question =\n        isPhysician && field.qPhys\n          ? field.qPhys\n          : field.q;\n\n      var hint =\n        isPhysician && field.hintPhys\n          ? field.hintPhys\n          : field.hint\n            ? field.hint\n            : '';\n\n      var html =\n        '<div class=\"row\">' +\n          '<label class=\"q\" for=\"svc_f_' + key + '\">' +\n            question +\n            (\n              hint\n                ? '<span class=\"hint\">' + hint + '<\/span>'\n                : ''\n            ) +\n          '<\/label>' +\n\n          '<select' +\n            ' id=\"svc_f_' + key + '\"' +\n            ' data-key=\"' + key + '\"' +\n          '>';\n\n      field.opts.forEach(function(option, index){\n        var selected =\n          vals[key] === option[0] &&\n          vals['_i_' + key] === index\n            ? ' selected'\n            : '';\n\n        html +=\n          '<option' +\n            ' value=\"' + option[0] + '\"' +\n            ' data-i=\"' + index + '\"' +\n            selected +\n          '>' +\n            option[1] +\n          '<\/option>';\n      });\n\n      html += '<\/select><\/div>';\n\n      boxes[field.box] += html;\n    });\n\n    $('empFields').innerHTML = boxes.emp;\n    $('eduFields').innerHTML = boxes.edu;\n    $('regFields').innerHTML = boxes.reg;\n\n    ORDER.forEach(function(key){\n      var element = $('f_' + key);\n\n      if (!element) {\n        return;\n      }\n\n      element.addEventListener('change', function(){\n        vals[key] = parseInt(this.value, 10);\n\n        vals['_i_' + key] = parseInt(\n          this.options[this.selectedIndex].getAttribute('data-i'),\n          10\n        );\n\n        if (key === 'onExp') {\n          renderFields();\n        }\n\n        calculate();\n      });\n    });\n  }\n\n  \/* ------------------------------------------------------------------\n     6. Language test section\n  ------------------------------------------------------------------ *\/\n\n  function testOptions(slot){\n    var other =\n      slot === 't2'\n        ? TESTS[picks.t1]\n        : null;\n\n    var html =\n      '<option value=\"none\">' +\n        t('noTest') +\n      '<\/option>';\n\n    Object.keys(TESTS).forEach(function(key){\n      if (key === 'none') {\n        return;\n      }\n\n      if (\n        other &&\n        TESTS[key].lang === other.lang\n      ) {\n        return;\n      }\n\n      html +=\n        '<option' +\n          ' value=\"' + key + '\"' +\n          (\n            picks[slot] === key\n              ? ' selected'\n              : ''\n          ) +\n        '>' +\n          TESTS[key].name +\n        '<\/option>';\n    });\n\n    return html;\n  }\n\n  function renderLangSection(){\n    $('l1-lab').innerHTML =\n      t('t1') +\n      '<span class=\"hint\">' +\n        t('t1h') +\n      '<\/span>';\n\n    $('l2-lab').innerHTML =\n      t('t2') +\n      '<span class=\"hint\">' +\n        t('t2h') +\n      '<\/span>';\n\n    $('test1').innerHTML = testOptions('t1');\n    $('test2').innerHTML = testOptions('t2');\n\n    if (\n      picks.t2 !== 'none' &&\n      !$('test2').querySelector(\n        'option[value=\"' + picks.t2 + '\"]'\n      )\n    ) {\n      picks.t2 = 'none';\n      skillVals.t2 = {};\n    }\n\n    $('test2').value = picks.t2;\n\n    renderSkills('t1');\n    renderSkills('t2');\n  }\n\n  function renderSkills(slot){\n    var number = slot.charAt(1);\n    var wrap = $('skills' + number);\n    var test = TESTS[picks[slot]];\n\n    if (!test) {\n      wrap.innerHTML = '';\n      $('clb' + number).style.display = 'none';\n      return;\n    }\n\n    var html = '';\n\n    ['R', 'W', 'L', 'S'].forEach(function(skill){\n      html +=\n        '<div>' +\n          '<label' +\n            ' class=\"q\"' +\n            ' for=\"svc_' + slot + '_' + skill + '\"' +\n          '>' +\n            t(skill) +\n          '<\/label>' +\n\n          '<select' +\n            ' id=\"svc_' + slot + '_' + skill + '\"' +\n            ' data-slot=\"' + slot + '\"' +\n            ' data-skill=\"' + skill + '\"' +\n          '>' +\n\n            '<option value=\"\">' +\n              t('pick') +\n            '<\/option>';\n\n      test[skill].forEach(function(row, index){\n        var selected =\n          skillVals[slot]['_i_' + skill] === index\n            ? ' selected'\n            : '';\n\n        html +=\n          '<option' +\n            ' value=\"' + row[1] + '\"' +\n            ' data-i=\"' + index + '\"' +\n            selected +\n          '>' +\n            row[0] +\n          '<\/option>';\n      });\n\n      html += '<\/select><\/div>';\n    });\n\n    wrap.innerHTML = html;\n\n    ['R', 'W', 'L', 'S'].forEach(function(skill){\n      var element = $(slot + '_' + skill);\n\n      if (!element) {\n        return;\n      }\n\n      element.addEventListener('change', function(){\n        skillVals[slot][skill] =\n          this.value === ''\n            ? null\n            : parseInt(this.value, 10);\n\n        skillVals[slot]['_i_' + skill] =\n          this.value === ''\n            ? null\n            : parseInt(\n                this.options[this.selectedIndex]\n                  .getAttribute('data-i'),\n                10\n              );\n\n        showClb(slot);\n        calculate();\n      });\n    });\n\n    showClb(slot);\n  }\n\n  function clbOf(slot){\n    var test = TESTS[picks[slot]];\n\n    if (!test) {\n      return null;\n    }\n\n    var lowest = 99;\n\n    var complete = ['R', 'W', 'L', 'S'].every(function(skill){\n      var value = skillVals[slot][skill];\n\n      if (\n        value === null ||\n        value === undefined\n      ) {\n        return false;\n      }\n\n      if (value < lowest) {\n        lowest = value;\n      }\n\n      return true;\n    });\n\n    return complete ? lowest : null;\n  }\n\n  function showClb(slot){\n    var number = slot.charAt(1);\n    var box = $('clb' + number);\n    var test = TESTS[picks[slot]];\n\n    if (!test) {\n      box.style.display = 'none';\n      return;\n    }\n\n    box.style.display = '';\n\n    var lowest = clbOf(slot);\n\n    if (lowest === null) {\n      box.innerHTML = t('incomplete');\n      return;\n    }\n\n    var scale =\n      test.lang === 'fr'\n        ? 'nclcIs'\n        : 'clbIs';\n\n    var perSkill = ['R', 'W', 'L', 'S']\n      .map(function(skill){\n        return (\n          t(skill) +\n          ' ' +\n          (\n            test.lang === 'fr'\n              ? 'NCLC '\n              : 'CLB '\n          ) +\n          num(skillVals[slot][skill])\n        );\n      })\n      .join(' \u00b7 ');\n\n    box.innerHTML =\n      (\n        lowest < 4\n          ? '<span class=\"fail\">' +\n              t('belowFour') +\n            '<\/span>'\n          : t('yourClb') +\n            ' <b>' +\n              t(scale, num(lowest)) +\n              (lowest === 10 ? '+' : '') +\n            '<\/b>'\n      ) +\n\n      '<div class=\"perskill\">' +\n        t('perSkill') +\n        ' ' +\n        perSkill +\n      '<\/div>' +\n\n      '<div class=\"perskill\">' +\n        t('lowest') +\n      '<\/div>';\n  }\n\n  function languagePoints(){\n    var first = clbOf('t1');\n    var second = clbOf('t2');\n\n    var best = Math.max(\n      first === null ? -1 : first,\n      second === null ? -1 : second\n    );\n\n    var ability =\n      best >= 9\n        ? 15\n        : best === 8\n          ? 12\n          : best === 7\n            ? 8\n            : best === 6\n              ? 4\n              : 0;\n\n    var count = 0;\n\n    if (\n      first !== null &&\n      first >= 6\n    ) {\n      count++;\n    }\n\n    if (\n      second !== null &&\n      second >= 6\n    ) {\n      count++;\n    }\n\n    return {\n      ability: ability,\n\n      know:\n        count >= 2\n          ? 10\n          : count === 1\n            ? 5\n            : 0\n    };\n  }\n\n  \/* ------------------------------------------------------------------\n     7. Score calculation\n  ------------------------------------------------------------------ *\/\n\n  function calculate(){\n    var languageScore = languagePoints();\n\n    var experiencePoints =\n      vals.onExp === -1\n        ? (\n            isPhysician\n              ? 0\n              : vals.onExpAlt || 0\n          )\n        : vals.onExp;\n\n    var rows = [\n      ['bTeer', vals.teer, 9],\n      ['bBoc', vals.boc, 10],\n      ['bWage', vals.wage, 15, true],\n      ['bExp', experiencePoints, 18],\n      ['bEarn', vals.earnings, 8],\n      ['bStat', vals.status, 10],\n      ['bEdu', vals.edu, 10],\n      ['bEduC', vals.eduCad, 10],\n      ['bAbility', languageScore.ability, 15],\n      ['bKnow', languageScore.know, 10],\n      ['bReg', vals.region, 15]\n    ];\n\n    var total = 0;\n    var max = 0;\n    var html = '';\n\n    rows.forEach(function(row){\n      if (\n        row[3] &&\n        isPhysician\n      ) {\n        return;\n      }\n\n      var points = row[1] || 0;\n\n      total += points;\n      max += row[2];\n\n      html +=\n        '<tr class=\"' +\n          (points === 0 ? 'zero' : '') +\n        '\">' +\n          '<td>' +\n            t(row[0]) +\n          '<\/td>' +\n\n          '<td>' +\n            num(points) +\n          '<\/td>' +\n        '<\/tr>';\n    });\n\n    $('breakdown').innerHTML = html;\n    $('total').textContent = num(total);\n    $('maxTotal').textContent = num(max);\n\n    $('barFill').style.width =\n      max > 0\n        ? Math.round(total \/ max * 100) + '%'\n        : '0%';\n  }\n\n  \/* ------------------------------------------------------------------\n     8. Apply English interface text\n  ------------------------------------------------------------------ *\/\n\n  function applyLanguage(){\n    ROOT.setAttribute('lang', 'en');\n    ROOT.setAttribute('dir', 'ltr');\n\n    $('h-title').innerHTML = t('title');\n    $('h-sub').innerHTML = t('sub');\n    $('t-type').innerHTML = t('type');\n\n    $('t-emp').innerHTML =\n      t('emp') +\n      '<span class=\"sub\">' +\n        t('maxEmp') +\n      '<\/span>';\n\n    $('t-edu').innerHTML =\n      t('edu') +\n      '<span class=\"sub\">' +\n        t('maxEdu') +\n      '<\/span>';\n\n    $('t-lang').innerHTML =\n      t('lang') +\n      '<span class=\"sub\">' +\n        t('maxLang') +\n      '<\/span>';\n\n    $('t-reg').innerHTML =\n      t('reg') +\n      '<span class=\"sub\">' +\n        t('maxReg') +\n      '<\/span>';\n\n    $('t-break').innerHTML = t('brk');\n    $('disclaimer').innerHTML = t('disc');\n    $('printBtn').textContent = t('print');\n    $('resetBtn').textContent = t('reset');\n    $('r-lab').textContent = t('score');\n\n    var toggleButtons = $('typeToggle')\n      .querySelectorAll('button[data-type]');\n\n    if (toggleButtons[0]) {\n      toggleButtons[0].textContent = t('offer');\n    }\n\n    if (toggleButtons[1]) {\n      toggleButtons[1].textContent = t('physician');\n    }\n\n    renderFields();\n    renderLangSection();\n    calculate();\n  }\n\n  function resetAll(){\n    vals = {};\n\n    picks = {\n      t1: 'none',\n      t2: 'none'\n    };\n\n    skillVals = {\n      t1: {},\n      t2: {}\n    };\n\n    ORDER.forEach(function(key){\n      var options = FIELDS[key].opts;\n      var lastIndex = options.length - 1;\n\n      vals[key] = options[lastIndex][0];\n      vals['_i_' + key] = lastIndex;\n    });\n\n    vals.onExpAlt = 0;\n\n    applyLanguage();\n  }\n\n  \/* ------------------------------------------------------------------\n     9. Scoped event listeners\n  ------------------------------------------------------------------ *\/\n\n  var typeToggle = $('typeToggle');\n\n  if (typeToggle) {\n    typeToggle.addEventListener('click', function(event){\n      var button = event.target.closest(\n        'button[data-type]'\n      );\n\n      if (\n        !button ||\n        !typeToggle.contains(button)\n      ) {\n        return;\n      }\n\n      isPhysician =\n        button.getAttribute('data-type') ===\n        'physician';\n\n      typeToggle\n        .querySelectorAll('button[data-type]')\n        .forEach(function(item){\n          item.setAttribute(\n            'aria-pressed',\n            String(item === button)\n          );\n        });\n\n      renderFields();\n      calculate();\n    });\n  }\n\n  var test1 = $('test1');\n\n  if (test1) {\n    test1.addEventListener('change', function(){\n      picks.t1 = this.value;\n      skillVals.t1 = {};\n\n      renderLangSection();\n      calculate();\n    });\n  }\n\n  var test2 = $('test2');\n\n  if (test2) {\n    test2.addEventListener('change', function(){\n      picks.t2 = this.value;\n      skillVals.t2 = {};\n\n      renderSkills('t2');\n      calculate();\n    });\n  }\n\n  var printButton = $('printBtn');\n\n  if (printButton) {\n    printButton.addEventListener('click', function(){\n      window.print();\n    });\n  }\n\n  var resetButton = $('resetBtn');\n\n  if (resetButton) {\n    resetButton.addEventListener(\n      'click',\n      resetAll\n    );\n  }\n\n  \/* ------------------------------------------------------------------\n     10. Widget\/iframe automatic height\n  ------------------------------------------------------------------ *\/\n\n  (function(){\n    function postHeight(){\n      if (\n        !window.parent ||\n        window.parent === window\n      ) {\n        return;\n      }\n\n      window.parent.postMessage(\n        {\n          type: 'sugimoto-tool-height',\n          height: ROOT.scrollHeight\n        },\n        '*'\n      );\n    }\n\n    try {\n      new ResizeObserver(postHeight)\n        .observe(ROOT);\n    } catch (error) {}\n\n    window.addEventListener(\n      'load',\n      postHeight\n    );\n\n    setInterval(\n      postHeight,\n      1200\n    );\n  })();\n\n  resetAll();\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>OINP Points Calculator for the Ontario Workforce Priority Stream Use this calculator to estimate your Expression of Interest score for Ontario\u2019s Workforce Priority Stream. The stream replaced the previous OINP streams in June 2026, and Ontario published its scoring rules on July 20, 2026. Job-offer applicants can score up to 130 points, while eligible self-employed [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":4746,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-4870","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v28.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Ontario Immigrant Nominee (OINP) Points Calculator | Sugimoto Visa<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ontario Immigrant Nominee (OINP) Points Calculator\" \/>\n<meta property=\"og:description\" content=\"OINP Points Calculator for the Ontario Workforce Priority Stream Use this calculator to estimate your Expression of Interest score for Ontario\u2019s Workforce Priority Stream. The stream replaced the previous OINP streams in June 2026, and Ontario published its scoring rules on July 20, 2026. Job-offer applicants can score up to 130 points, while eligible self-employed [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Sugimoto Visa\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/sugimotovisa\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-30T16:20:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sugimotovisa.com\/en\/wp-content\/uploads\/2025\/01\/sugimotovisa-video-cover-en.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"582\" \/>\n\t<meta property=\"og:image:height\" content=\"873\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@HamedSugimoto\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/immigration-tools\\\/oinp-points-calculator\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/immigration-tools\\\/oinp-points-calculator\\\/\"},\"author\":{\"name\":\"sugimotovisa\",\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/#\\\/schema\\\/person\\\/2823f69a63c2a02316b23d4d16c47cd7\"},\"headline\":\"Ontario Immigrant Nominee (OINP) Points Calculator\",\"datePublished\":\"2026-07-30T15:55:58+00:00\",\"dateModified\":\"2026-07-30T16:20:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/immigration-tools\\\/oinp-points-calculator\\\/\"},\"wordCount\":109,\"publisher\":{\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/immigration-tools\\\/oinp-points-calculator\\\/\",\"url\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/immigration-tools\\\/oinp-points-calculator\\\/\",\"name\":\"Ontario Immigrant Nominee (OINP) Points Calculator | Sugimoto Visa\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/#website\"},\"datePublished\":\"2026-07-30T15:55:58+00:00\",\"dateModified\":\"2026-07-30T16:20:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/immigration-tools\\\/oinp-points-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/immigration-tools\\\/oinp-points-calculator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/immigration-tools\\\/oinp-points-calculator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Free Immigration Tools\",\"item\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/immigration-tools\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ontario Immigrant Nominee (OINP) Points Calculator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/\",\"name\":\"Sugimoto Visa\",\"description\":\"Your Immigration Solution\",\"publisher\":{\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/#organization\"},\"alternateName\":\"Sugimoto Visa\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/#organization\",\"name\":\"Sugimoto Visa\",\"alternateName\":\"Sugimoto Visa\",\"url\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/Sugimoto-logo-en.webp\",\"contentUrl\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/Sugimoto-logo-en.webp\",\"width\":400,\"height\":68,\"caption\":\"Sugimoto Visa\"},\"image\":{\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/sugimotovisa\\\/\",\"https:\\\/\\\/x.com\\\/HamedSugimoto\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/sugimoto-immigration\\\/\",\"https:\\\/\\\/www.instagram.com\\\/sugimotovisa\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@Sugimotovisa\"],\"description\":\"Sugimoto Visa: Your Immigration Solution. Providing expert guidance and support for your immigration journey.\",\"email\":\"info@sugimotovisa.com\",\"telephone\":\"00989105555487\",\"legalName\":\"Sugimoto Visa Inc\",\"foundingDate\":\"2021-04-16\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"51\",\"maxValue\":\"200\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/#\\\/schema\\\/person\\\/2823f69a63c2a02316b23d4d16c47cd7\",\"name\":\"sugimotovisa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f5e5a09db2ae67e63724fee712b81e961c902bc7bb4a421a63af4a74f9199731?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f5e5a09db2ae67e63724fee712b81e961c902bc7bb4a421a63af4a74f9199731?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f5e5a09db2ae67e63724fee712b81e961c902bc7bb4a421a63af4a74f9199731?s=96&d=mm&r=g\",\"caption\":\"sugimotovisa\"},\"sameAs\":[\"https:\\\/\\\/sugimotovisa.com\\\/en\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ontario Immigrant Nominee (OINP) Points Calculator | Sugimoto Visa","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/","og_locale":"en_US","og_type":"article","og_title":"Ontario Immigrant Nominee (OINP) Points Calculator","og_description":"OINP Points Calculator for the Ontario Workforce Priority Stream Use this calculator to estimate your Expression of Interest score for Ontario\u2019s Workforce Priority Stream. The stream replaced the previous OINP streams in June 2026, and Ontario published its scoring rules on July 20, 2026. Job-offer applicants can score up to 130 points, while eligible self-employed [&hellip;]","og_url":"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/","og_site_name":"Sugimoto Visa","article_publisher":"https:\/\/www.facebook.com\/sugimotovisa\/","article_modified_time":"2026-07-30T16:20:51+00:00","og_image":[{"width":582,"height":873,"url":"https:\/\/sugimotovisa.com\/en\/wp-content\/uploads\/2025\/01\/sugimotovisa-video-cover-en.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_site":"@HamedSugimoto","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/#article","isPartOf":{"@id":"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/"},"author":{"name":"sugimotovisa","@id":"https:\/\/sugimotovisa.com\/en\/#\/schema\/person\/2823f69a63c2a02316b23d4d16c47cd7"},"headline":"Ontario Immigrant Nominee (OINP) Points Calculator","datePublished":"2026-07-30T15:55:58+00:00","dateModified":"2026-07-30T16:20:51+00:00","mainEntityOfPage":{"@id":"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/"},"wordCount":109,"publisher":{"@id":"https:\/\/sugimotovisa.com\/en\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/","url":"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/","name":"Ontario Immigrant Nominee (OINP) Points Calculator | Sugimoto Visa","isPartOf":{"@id":"https:\/\/sugimotovisa.com\/en\/#website"},"datePublished":"2026-07-30T15:55:58+00:00","dateModified":"2026-07-30T16:20:51+00:00","breadcrumb":{"@id":"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sugimotovisa.com\/en\/immigration-tools\/oinp-points-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sugimotovisa.com\/en\/"},{"@type":"ListItem","position":2,"name":"Free Immigration Tools","item":"https:\/\/sugimotovisa.com\/en\/immigration-tools\/"},{"@type":"ListItem","position":3,"name":"Ontario Immigrant Nominee (OINP) Points Calculator"}]},{"@type":"WebSite","@id":"https:\/\/sugimotovisa.com\/en\/#website","url":"https:\/\/sugimotovisa.com\/en\/","name":"Sugimoto Visa","description":"Your Immigration Solution","publisher":{"@id":"https:\/\/sugimotovisa.com\/en\/#organization"},"alternateName":"Sugimoto Visa","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sugimotovisa.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/sugimotovisa.com\/en\/#organization","name":"Sugimoto Visa","alternateName":"Sugimoto Visa","url":"https:\/\/sugimotovisa.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sugimotovisa.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/sugimotovisa.com\/en\/wp-content\/uploads\/2025\/01\/Sugimoto-logo-en.webp","contentUrl":"https:\/\/sugimotovisa.com\/en\/wp-content\/uploads\/2025\/01\/Sugimoto-logo-en.webp","width":400,"height":68,"caption":"Sugimoto Visa"},"image":{"@id":"https:\/\/sugimotovisa.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/sugimotovisa\/","https:\/\/x.com\/HamedSugimoto","https:\/\/www.linkedin.com\/company\/sugimoto-immigration\/","https:\/\/www.instagram.com\/sugimotovisa\/","https:\/\/www.youtube.com\/@Sugimotovisa"],"description":"Sugimoto Visa: Your Immigration Solution. Providing expert guidance and support for your immigration journey.","email":"info@sugimotovisa.com","telephone":"00989105555487","legalName":"Sugimoto Visa Inc","foundingDate":"2021-04-16","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"51","maxValue":"200"}},{"@type":"Person","@id":"https:\/\/sugimotovisa.com\/en\/#\/schema\/person\/2823f69a63c2a02316b23d4d16c47cd7","name":"sugimotovisa","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f5e5a09db2ae67e63724fee712b81e961c902bc7bb4a421a63af4a74f9199731?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f5e5a09db2ae67e63724fee712b81e961c902bc7bb4a421a63af4a74f9199731?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f5e5a09db2ae67e63724fee712b81e961c902bc7bb4a421a63af4a74f9199731?s=96&d=mm&r=g","caption":"sugimotovisa"},"sameAs":["https:\/\/sugimotovisa.com\/en\/"]}]}},"_links":{"self":[{"href":"https:\/\/sugimotovisa.com\/en\/wp-json\/wp\/v2\/pages\/4870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sugimotovisa.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sugimotovisa.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sugimotovisa.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sugimotovisa.com\/en\/wp-json\/wp\/v2\/comments?post=4870"}],"version-history":[{"count":35,"href":"https:\/\/sugimotovisa.com\/en\/wp-json\/wp\/v2\/pages\/4870\/revisions"}],"predecessor-version":[{"id":4912,"href":"https:\/\/sugimotovisa.com\/en\/wp-json\/wp\/v2\/pages\/4870\/revisions\/4912"}],"up":[{"embeddable":true,"href":"https:\/\/sugimotovisa.com\/en\/wp-json\/wp\/v2\/pages\/4746"}],"wp:attachment":[{"href":"https:\/\/sugimotovisa.com\/en\/wp-json\/wp\/v2\/media?parent=4870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}