diff --git a/index.js b/index.js
index 72fd9624211571a65002cd8b146a4c1d9d86bdf4..147ba3a9df677d0efbed2cc0b4e2e552d4680a54 100644
--- a/index.js
+++ b/index.js
@@ -39,8 +39,8 @@ const {
   terminateContract,
   getContractStartDate,
 } = __webpack_require__(1595)
-const { getAccount, saveAccountData } = __webpack_require__(1604)
-const { isLocal } = __webpack_require__(1605)
+const { getAccount, saveAccountData } = __webpack_require__(1605)
+const { isLocal } = __webpack_require__(1606)
 
 moment.locale('fr') // set the language
 moment.tz.setDefault('Europe/Paris') // set the timezone
@@ -223530,6 +223530,18 @@ function parseContractStartDate(result) {
     'dateDerniereModificationFormuleTarifaireAcheminement'
   ]
 }
+/**
+ * Return User address
+ * @param {string} result
+ * @returns {Address}
+ */
+function parseUserAddress(result) {
+  log('info', 'Parsing user Address')
+  const json = JSON.stringify(result)
+  return JSON.parse(json)['Envelope']['Body'][
+    'consulterDonneesTechniquesContractuellesResponse'
+  ]['point']['donneesGenerales']['adresseInstallation']
+}
 
 /**
  * Return User contract start date
@@ -223628,6 +223640,24 @@ function parseValue(value, name) {
   return value
 }
 
+/**
+ * Remove SGE useless multiple white spaces
+ * @param {string} str
+ * @returns {string}
+ */
+function removeMultipleSpaces(str) {
+  return str.replace(/  +/g, ' ')
+}
+
+/**
+ * Remove SGE useless multiple white spaces
+ * @param {string} str
+ * @returns {string}
+ */
+function removeAddressnumber(str) {
+  return str.replace(/[0-9]|b |B |T |t /g, '')
+}
+
 module.exports = {
   parseSgeXmlData,
   formateDataForDoctype,
@@ -223637,7 +223667,10 @@ module.exports = {
   parseContracts,
   parseContractStartDate,
   parseServiceId,
+  parseUserAddress,
   checkContractExists,
+  removeMultipleSpaces,
+  removeAddressnumber,
 }
 
 
@@ -223749,7 +223782,11 @@ function consultationMesuresDetailleesMaxPower(
  * @param {string} appLogin
  * @returns {string}
  */
-function consulterDonneesTechniquesContractuelles(pointId, appLogin) {
+function consulterDonneesTechniquesContractuelles(
+  pointId,
+  appLogin,
+  consent = true
+) {
   log('info', `Query consulterDonneesTechniquesContractuelles`)
   return `<?xml version='1.0' encoding='utf-8'?>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
@@ -223760,7 +223797,7 @@ function consulterDonneesTechniquesContractuelles(pointId, appLogin) {
         <v2:consulterDonneesTechniquesContractuelles>
            <pointId>${pointId}</pointId>
            <loginUtilisateur>${appLogin}</loginUtilisateur>
-           <autorisationClient>true</autorisationClient>
+           <autorisationClient>${consent}</autorisationClient>
         </v2:consulterDonneesTechniquesContractuelles>
      </soapenv:Body>
   </soapenv:Envelope>
@@ -223772,14 +223809,45 @@ function consulterDonneesTechniquesContractuelles(pointId, appLogin) {
  * @param {string} name
  * @param {string} postalCode
  * @param {string} inseeCode
- * @param {string} [address]
+ * @param {string} address
+ * @param {string} [escalierEtEtageEtAppartement]
  * @returns {string} PDL
  */
-function rechercherPoint(appLogin, name, postalCode, inseeCode, address) {
+function rechercherPoint(
+  appLogin,
+  name,
+  postalCode,
+  inseeCode,
+  address,
+  escalierEtEtageEtAppartement
+) {
   log(
     'info',
     `Query rechercherPoint - postal code / insee code: ${postalCode} / ${inseeCode}`
   )
+  if (escalierEtEtageEtAppartement) {
+    return `<?xml version='1.0' encoding='utf-8'?>
+    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+       xmlns:v2="http://www.enedis.fr/sge/b2b/services/rechercherpoint/v2.0"
+       xmlns:v1="http://www.enedis.fr/sge/b2b/technique/v1.0">
+       <soapenv:Header/>
+       <soapenv:Body>
+          <v2:rechercherPoint>
+             <criteres>
+                <adresseInstallation>
+                   <escalierEtEtageEtAppartement>${escalierEtEtageEtAppartement}</escalierEtEtageEtAppartement>
+                   <numeroEtNomVoie>${address}</numeroEtNomVoie>
+                   <codePostal>${postalCode}</codePostal>
+                   <codeInseeCommune>${inseeCode}</codeInseeCommune>
+                </adresseInstallation>
+                <nomClientFinalOuDenominationSociale>${name}</nomClientFinalOuDenominationSociale>
+                <rechercheHorsPerimetre>true</rechercheHorsPerimetre>
+             </criteres>
+             <loginUtilisateur>${appLogin}</loginUtilisateur>
+          </v2:rechercherPoint>
+       </soapenv:Body>
+    </soapenv:Envelope>`
+  }
   return `<?xml version='1.0' encoding='utf-8'?>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
      xmlns:v2="http://www.enedis.fr/sge/b2b/services/rechercherpoint/v2.0"
@@ -228001,6 +228069,7 @@ const { terminateContract } = __webpack_require__(1598)
 const { verifyContract } = __webpack_require__(1599)
 const { findUserPdl } = __webpack_require__(1601)
 const { verifyUserIdentity } = __webpack_require__(1602)
+const { findUserAddress } = __webpack_require__(1604)
 
 module.exports = {
   activateContract,
@@ -228009,6 +228078,7 @@ module.exports = {
   verifyContract,
   findUserPdl,
   verifyUserIdentity,
+  findUserAddress,
 }
 
 
@@ -228360,7 +228430,8 @@ async function findUserPdl(
   name,
   address,
   postalCode,
-  inseeCode
+  inseeCode,
+  escalierEtEtageEtAppartement = ''
 ) {
   log('info', 'Fetching user data')
   const sgeHeaders = {
@@ -228371,7 +228442,14 @@ async function findUserPdl(
   const { response } = await soapRequest({
     url: url,
     headers: sgeHeaders,
-    xml: rechercherPoint(appLogin, name, postalCode, inseeCode, address),
+    xml: rechercherPoint(
+      appLogin,
+      name,
+      postalCode,
+      inseeCode,
+      address,
+      escalierEtEtageEtAppartement
+    ),
   }).catch(err => {
     log('error', 'rechercherPointResponse')
     log('error', err)
@@ -228394,7 +228472,7 @@ async function findUserPdl(
         `Enedis issue ${parsedReply.Envelope.Body.Fault.detail.erreur.resultat.$.code}: ${parsedReply.Envelope.Body.Fault.faultstring}`
       )
     }
-    throw errors.LOGIN_FAILED
+    return null
   }
 }
 
@@ -228409,6 +228487,11 @@ module.exports = { findUserPdl }
 const { log, errors } = __webpack_require__(1)
 const { findUserPdl } = __webpack_require__(1601)
 const { getInseeCode } = __webpack_require__(1603)
+const { findUserAddress } = __webpack_require__(1604)
+const {
+  removeMultipleSpaces,
+  removeAddressnumber,
+} = __webpack_require__(1555)
 
 /**
  * Verify user identity
@@ -228433,7 +228516,8 @@ async function verifyUserIdentity(
     inseeCode = await getInseeCode(fields.postalCode, fields.city)
   }
 
-  const pdl = await findUserPdl(
+  // First try with user adresse
+  let pdl = await findUserPdl(
     `${baseUrl}/enedis_SDE_recherche-point/1.0`,
     apiAuthKey,
     loginUtilisateur,
@@ -228443,8 +228527,50 @@ async function verifyUserIdentity(
     inseeCode
   )
 
+  if (!pdl) {
+    log('warn', 'Second chance for sge onboarding')
+    // Backup verification
+    const userAddress = await findUserAddress(
+      baseUrl,
+      apiAuthKey,
+      loginUtilisateur,
+      fields.pointId
+    )
+
+    const escalierEtEtageEtAppartement = userAddress.escalierEtEtageEtAppartement
+      ? removeMultipleSpaces(userAddress.escalierEtEtageEtAppartement)
+      : ''
+
+    pdl = await findUserPdl(
+      `${baseUrl}/enedis_SDE_recherche-point/1.0`,
+      apiAuthKey,
+      loginUtilisateur,
+      fields.lastname,
+      removeMultipleSpaces(userAddress.numeroEtNomVoie),
+      userAddress.codePostal,
+      userAddress.commune.$.code,
+      escalierEtEtageEtAppartement
+    )
+
+    // Third try, remove address number because it's buggy on SGE side
+    if (!pdl) {
+      log('warn', 'Last chance onboarding for sge')
+      pdl = await findUserPdl(
+        `${baseUrl}/enedis_SDE_recherche-point/1.0`,
+        apiAuthKey,
+        loginUtilisateur,
+        fields.lastname,
+        removeMultipleSpaces(removeAddressnumber(userAddress.numeroEtNomVoie)),
+        userAddress.codePostal,
+        userAddress.commune.$.code,
+        escalierEtEtageEtAppartement
+      )
+    }
+  }
+
   if (fields.pointId != pdl) {
     log('error', 'PointId does not match')
+
     if (isAlternateStart) {
       throw errors.TERMS_VERSION_MISMATCH
     } else {
@@ -228514,8 +228640,68 @@ module.exports = {
 /* 1604 */
 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
+// @ts-check
+const { log, errors } = __webpack_require__(1)
+const soapRequest = __webpack_require__(1331)
+const {
+  parseTags,
+  parseValue,
+  parseUserAddress,
+} = __webpack_require__(1555)
+const xml2js = __webpack_require__(1513)
+const { consulterDonneesTechniquesContractuelles } = __webpack_require__(1556)
+
+/**
+ * Get user contract start date
+ * @param {string} url
+ * @param {string} apiAuthKey
+ * @param {string} userLogin
+ * @param {number} pointId
+ * @returns {Promise<Address>}
+ */
+async function findUserAddress(url, apiAuthKey, userLogin, pointId) {
+  log('info', 'Fetching user address')
+  const sgeHeaders = {
+    'Content-Type': 'text/xml;charset=UTF-8',
+    apikey: apiAuthKey,
+  }
+
+  const { response } = await soapRequest({
+    url: `${url}/enedis_SGE_ConsultationDonneesTechniquesContractuelles/1.0`,
+    headers: sgeHeaders,
+    xml: consulterDonneesTechniquesContractuelles(pointId, userLogin, false),
+  }).catch(err => {
+    log('error', 'Error while fetching user : ' + err)
+    throw errors.VENDOR_DOWN
+  })
+
+  const result = await xml2js.parseStringPromise(response.body, {
+    tagNameProcessors: [parseTags],
+    valueProcessors: [parseValue],
+    explicitArray: false,
+  })
+
+  try {
+    return parseUserAddress(result)
+  } catch (error) {
+    log('error', 'Error while processing user address: ' + error)
+    log(
+      'error',
+      `Enedis issue ${result.Envelope.Body.Fault.detail.erreur.resultat.$.code}: ${result.Envelope.Body.Fault.faultstring}`
+    )
+    throw errors.NOT_EXISTING_DIRECTORY
+  }
+}
+
+module.exports = { findUserAddress }
+
+
+/***/ }),
+/* 1605 */
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
 const { log, updateOrCreate } = __webpack_require__(1)
-const { isLocal } = __webpack_require__(1605)
+const { isLocal } = __webpack_require__(1606)
 const cozyClient = __webpack_require__(485)
 
 async function saveAccountData(accountId, accountData) {
@@ -228558,7 +228744,7 @@ module.exports = { getAccount, saveAccountData, getAccountForDelete }
 
 
 /***/ }),
-/* 1605 */
+/* 1606 */
 /***/ ((module) => {
 
 function isLocal() {
diff --git a/onDeleteAccount.js b/onDeleteAccount.js
index ac8ae2862c115bf830d3a697b3efef314b0396bf..0bf2ef373f382d723d9dff38a5e56460c3bad191 100644
--- a/onDeleteAccount.js
+++ b/onDeleteAccount.js
@@ -222861,6 +222861,18 @@ function parseContractStartDate(result) {
     'dateDerniereModificationFormuleTarifaireAcheminement'
   ]
 }
+/**
+ * Return User address
+ * @param {string} result
+ * @returns {Address}
+ */
+function parseUserAddress(result) {
+  log('info', 'Parsing user Address')
+  const json = JSON.stringify(result)
+  return JSON.parse(json)['Envelope']['Body'][
+    'consulterDonneesTechniquesContractuellesResponse'
+  ]['point']['donneesGenerales']['adresseInstallation']
+}
 
 /**
  * Return User contract start date
@@ -222959,6 +222971,24 @@ function parseValue(value, name) {
   return value
 }
 
+/**
+ * Remove SGE useless multiple white spaces
+ * @param {string} str
+ * @returns {string}
+ */
+function removeMultipleSpaces(str) {
+  return str.replace(/  +/g, ' ')
+}
+
+/**
+ * Remove SGE useless multiple white spaces
+ * @param {string} str
+ * @returns {string}
+ */
+function removeAddressnumber(str) {
+  return str.replace(/[0-9]|b |B |T |t /g, '')
+}
+
 module.exports = {
   parseSgeXmlData,
   formateDataForDoctype,
@@ -222968,7 +222998,10 @@ module.exports = {
   parseContracts,
   parseContractStartDate,
   parseServiceId,
+  parseUserAddress,
   checkContractExists,
+  removeMultipleSpaces,
+  removeAddressnumber,
 }
 
 
@@ -223080,7 +223113,11 @@ function consultationMesuresDetailleesMaxPower(
  * @param {string} appLogin
  * @returns {string}
  */
-function consulterDonneesTechniquesContractuelles(pointId, appLogin) {
+function consulterDonneesTechniquesContractuelles(
+  pointId,
+  appLogin,
+  consent = true
+) {
   log('info', `Query consulterDonneesTechniquesContractuelles`)
   return `<?xml version='1.0' encoding='utf-8'?>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
@@ -223091,7 +223128,7 @@ function consulterDonneesTechniquesContractuelles(pointId, appLogin) {
         <v2:consulterDonneesTechniquesContractuelles>
            <pointId>${pointId}</pointId>
            <loginUtilisateur>${appLogin}</loginUtilisateur>
-           <autorisationClient>true</autorisationClient>
+           <autorisationClient>${consent}</autorisationClient>
         </v2:consulterDonneesTechniquesContractuelles>
      </soapenv:Body>
   </soapenv:Envelope>
@@ -223103,14 +223140,45 @@ function consulterDonneesTechniquesContractuelles(pointId, appLogin) {
  * @param {string} name
  * @param {string} postalCode
  * @param {string} inseeCode
- * @param {string} [address]
+ * @param {string} address
+ * @param {string} [escalierEtEtageEtAppartement]
  * @returns {string} PDL
  */
-function rechercherPoint(appLogin, name, postalCode, inseeCode, address) {
+function rechercherPoint(
+  appLogin,
+  name,
+  postalCode,
+  inseeCode,
+  address,
+  escalierEtEtageEtAppartement
+) {
   log(
     'info',
     `Query rechercherPoint - postal code / insee code: ${postalCode} / ${inseeCode}`
   )
+  if (escalierEtEtageEtAppartement) {
+    return `<?xml version='1.0' encoding='utf-8'?>
+    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+       xmlns:v2="http://www.enedis.fr/sge/b2b/services/rechercherpoint/v2.0"
+       xmlns:v1="http://www.enedis.fr/sge/b2b/technique/v1.0">
+       <soapenv:Header/>
+       <soapenv:Body>
+          <v2:rechercherPoint>
+             <criteres>
+                <adresseInstallation>
+                   <escalierEtEtageEtAppartement>${escalierEtEtageEtAppartement}</escalierEtEtageEtAppartement>
+                   <numeroEtNomVoie>${address}</numeroEtNomVoie>
+                   <codePostal>${postalCode}</codePostal>
+                   <codeInseeCommune>${inseeCode}</codeInseeCommune>
+                </adresseInstallation>
+                <nomClientFinalOuDenominationSociale>${name}</nomClientFinalOuDenominationSociale>
+                <rechercheHorsPerimetre>true</rechercheHorsPerimetre>
+             </criteres>
+             <loginUtilisateur>${appLogin}</loginUtilisateur>
+          </v2:rechercherPoint>
+       </soapenv:Body>
+    </soapenv:Envelope>`
+  }
   return `<?xml version='1.0' encoding='utf-8'?>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
      xmlns:v2="http://www.enedis.fr/sge/b2b/services/rechercherpoint/v2.0"
@@ -227404,11 +227472,12 @@ module.exports = { terminateContract }
 /* 1601 */,
 /* 1602 */,
 /* 1603 */,
-/* 1604 */
+/* 1604 */,
+/* 1605 */
 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
 const { log, updateOrCreate } = __webpack_require__(1)
-const { isLocal } = __webpack_require__(1605)
+const { isLocal } = __webpack_require__(1606)
 const cozyClient = __webpack_require__(485)
 
 async function saveAccountData(accountId, accountData) {
@@ -227451,7 +227520,7 @@ module.exports = { getAccount, saveAccountData, getAccountForDelete }
 
 
 /***/ }),
-/* 1605 */
+/* 1606 */
 /***/ ((module) => {
 
 function isLocal() {
@@ -227474,7 +227543,7 @@ module.exports = { isLocal, isAlpha }
 
 
 /***/ }),
-/* 1606 */
+/* 1607 */
 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
 // @ts-check
@@ -227483,15 +227552,15 @@ const {
   getAccountRev,
   getAccountSecret,
   getAccountId,
-} = __webpack_require__(1607)
+} = __webpack_require__(1608)
 const { getBoConsent, deleteBoConsent } = __webpack_require__(1557)
 const { terminateContract } = __webpack_require__(1598)
-const { getAccountForDelete } = __webpack_require__(1604)
+const { getAccountForDelete } = __webpack_require__(1605)
 const moment = __webpack_require__(1373)
 __webpack_require__(1510)
 moment.locale('fr') // set the language
 moment.tz.setDefault('Europe/Paris') // set the timezone
-const { isLocal, isAlpha } = __webpack_require__(1605)
+const { isLocal, isAlpha } = __webpack_require__(1606)
 // const ACCOUNT_ID = isLocal() ? 'default_account_id' : 'enedis-sge-grandlyon'
 
 async function onDeleteAccount() {
@@ -227575,11 +227644,11 @@ module.exports = { onDeleteAccount }
 
 
 /***/ }),
-/* 1607 */
+/* 1608 */
 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
 const { log } = __webpack_require__(1)
-const { isLocal } = __webpack_require__(1605)
+const { isLocal } = __webpack_require__(1606)
 
 function getAccountId() {
   log('info', `getAccountId`)
@@ -227710,7 +227779,7 @@ module.exports = { getAccountId, getAccountRev, getAccountSecret }
 /******/ 	// module cache are used so entry inlining is disabled
 /******/ 	// startup
 /******/ 	// Load entry module and return exports
-/******/ 	var __webpack_exports__ = __webpack_require__(__webpack_require__.s = 1606);
+/******/ 	var __webpack_exports__ = __webpack_require__(__webpack_require__.s = 1607);
 /******/ 	
 /******/ })()
 ;
\ No newline at end of file
diff --git a/package.json b/package.json
index f3d6ad16d5dd0062573b9f8e0a13683c29506860..3bab086b5063e6f6c6aa968c754a585ddae37e81 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,7 @@
     "xml2js": "^0.4.23"
   },
   "devDependencies": {
-    "cozy-jobs-cli": "1.19.2",
+    "cozy-jobs-cli": "1.19.1",
     "cozy-konnector-build": "1.3.4",
     "eslint-config-cozy-app": "1.3.3",
     "eslint-plugin-prettier": "^4.0.0",