Osintgram fonctionne-t-il encore en 2026 ?
En partie. Se connecter avec un nom d'utilisateur et un mot de passe Instagram est mort en pratique (les rapports de connexion de 2026 sur le tracker signalent checkpoint_required, block_eu_user_login_in_old_app et bad_password), tandis que le backend HikerAPI ajouté en août 2025 reste la voie prévue pour fonctionner. Le dépôt n'est pas archivé, mais master n'a plus reçu de commit depuis le 25 août 2025.
La réponse courte
En partie, et la ligne de partage est nette. Clonez le dépôt, placez un nom d'utilisateur et un mot de passe Instagram dans config/credentials.ini et, en 2026, vous ne dépasserez très probablement jamais la ligne de connexion. Placez plutôt un token HikerAPI dans ce même fichier et l'outil ne s'authentifie plus du tout auprès d'Instagram : il appelle une API tierce payante, et c'est la voie vers laquelle le projet lui-même oriente désormais ses utilisateurs.
Connexion par mot de passe : morte en pratique. Les échecs de connexion signalés tout au long de 2026 sont checkpoint_required, block_eu_user_login_in_old_app et bad_password. Token HikerAPI : la voie encore prévue pour fonctionner, que les utilisateurs disent opérationnelle ; service tiers, payant au-delà des 100 premières requêtes. Le dépôt : non archivé, 13,896 stars, 828 issues ouvertes, dernier commit le 25 août 2025, dernière release taguée 1.3 en mai 2021.
Tout ce qui suit provient de trois sources : le code du dépôt, l'API GitHub au 8 août 2026 et des rapports de bugs datés sur le tracker du projet. Nous n'avons pas exécuté la CLI contre un compte Instagram réel : chaque chaîne de terminal citée ici est soit lue dans le code source, soit copiée depuis une issue datée, référencée par son numéro.
Ce qui a réellement cassé
Osintgram est une fine surcouche en ligne de commande. Il ne dialogue pas avec Instagram par ses propres moyens : requirements.txt fige instagram-private-api==1.6.0 et délègue tout le problème d'authentification à cette bibliothèque. L'état de santé d'Osintgram est en réalité celui de cette bibliothèque, et elle est à l'arrêt depuis deux ans.
ping/instagram_private_api a reçu son dernier push le 6 mai 2024. Son principe est d'usurper l'identité de l'application mobile Instagram auprès de l'endpoint https://i.instagram.com/api/{version!s}/. Instagram a supprimé cet endpoint. L'issue #791, ouverte le 3 mai 2023, est le moment où la communauté l'a collectivement constaté : "Lately, we all discovered that Osintgram is not working anymore." (« Nous avons tous découvert récemment qu'Osintgram ne fonctionne plus. ») Rien n'a réparé l'ancien chemin de code depuis. Le correctif qui a fini par arriver était un backend différent, pas une réparation.
Trois ans plus tard, la panne a une signature lisible. Voici le copier-coller de l'issue #2627, déposée le 4 mars 2026 :
Attempt to login...
ClientError checkpoint_required (Code: 400, Response:
{"message": "checkpoint_required",
"checkpoint_url": "https://i.instagram.com/web/unsupported_version/",
"lock": false, "flow_render_type": 0, "status": "fail"})Lisez le checkpoint_url. Ce n'est pas un contrôle de sécurité que l'on lève en confirmant un e-mail : il pointe vers /web/unsupported_version/. Instagram rejette la version du client annoncée par la bibliothèque, pas vos identifiants. Le même raisonnement vaut pour bad_password : l'auteur de la PR #2660, ouverte le 12 juin 2026, écrit que cette erreur "is actually a bot detection, not wrong password" (« est en réalité une détection de bot, pas un mot de passe erroné »), et toute la raison d'être de cette PR est d'empêcher les gens de ressaisir un mot de passe qui n'a jamais été faux.
Il existe un effet de second ordre qu'il vaut mieux connaître, car il explique pourquoi l'outil semble tomber en panne du jour au lendemain chez des gens qui n'ont rien changé. L'ancien backend met sa session en cache dans config/settings.json et la réutilise lors des exécutions suivantes : une ancienne connexion peut donc continuer à fonctionner sur des cookies périmés bien après que les nouvelles connexions ont cessé d'aboutir. Quand ces cookies expirent, vous obtenez ClientCookieExpiredError/ClientLoginRequiredError, et le code tente immédiatement une réauthentification complète, droit dans le mur décrit plus haut. Vider le cache avec l'option -C ne répare rien ; cela ne fait qu'avancer l'échec.
Lisez l'URL, pas le message
Les erreurs de connexion d'Instagram sont écrites pour l'application, pas pour vous. checkpoint_required donne l'impression que votre compte doit être vérifié. bad_password ressemble à une faute de frappe. Dans les deux cas, le détail lisible par la machine (l'URL de checkpoint unsupported_version, la lecture que l'auteur de la PR fait lui-même de bad_password) désigne le client, pas vous. Réinitialiser votre mot de passe ou créer un nouveau compte jetable ne change rien au résultat.
L'inventaire des erreurs de 2026
Voici les échecs au stade de la connexion que les utilisateurs signalent réellement, avec des dates tirées des issues elles-mêmes plutôt que de la date de publication d'un blog. Si votre terminal a affiché Attempt to login... puis l'un de ces messages, vous êtes face au versant Instagram du problème.
| Erreur à la connexion | Ce que c'est réellement | Où c'est signalé |
|---|---|---|
checkpoint_required avec une URL /web/unsupported_version/ | Instagram rejette la version du client annoncée par la bibliothèque | #2627, 4 mars 2026 |
ClientError Bad Request: block_eu_user_login_in_old_app | Connexions depuis l'UE refusées aux clients qu'Instagram classe comme application obsolète | #2630, 2 avril 2026 |
bad_password | Détection de bot selon l'auteur de la PR, pas un mot de passe erroné | PR #2660, 12 juin 2026 |
ClientError TimeoutError The read operation timed out | La connexion se bloque ; signalé sur Python 3.13 | #2596, 4 sept. 2025 |
ClientCookieExpiredError/ClientLoginRequiredError: Cookie expired | La session en cache dans config/settings.json a expiré ; la reconnexion automatique se heurte au même mur | issue #2483, 23 févr. 2025 |
challenge_required | Instagram a jugé le compte suspect ; le README vous dit d'ouvrir le lien et de valider le challenge | issue #1638 |
Pour donner l'échelle : une recherche dans le tracker renvoie 66 issues mentionnant challenge_required, 55 mentionnant JSONDecodeError et 7 mentionnant checkpoint_required, contre 98 pour ModuleNotFoundError. Ce dernier chiffre représente l'autre moitié de l'histoire, et c'est un problème totalement différent.
La distinction compte au moment de trier votre propre panne. Si pip a refusé avec error: externally-managed-environment, ou si la traceback se termine par ModuleNotFoundError, l'outil n'a jamais atteint Instagram et vous avez un problème d'installation : voyez comment installer Osintgram, ou la version spécifique à Kali. Si vous êtes allé jusqu'à Attempt to login... puis un ClientError, vous êtes dans le tableau ci-dessus, et une réinstallation ne vous en sortira pas.
Le projet est-il abandonné ?
Pas officiellement. Le dépôt est public, sous licence GPL-3.0 et explicitement non archivé : on peut donc toujours y ouvrir des issues et des pull requests. Mais les signaux de maintenance méritent d'être lus ensemble plutôt qu'un par un.
| Signal | Valeur | Remarque |
|---|---|---|
| Stars | 13,896 | API GitHub, 8 août 2026 |
| Forks | 3,000 | API GitHub, 8 août 2026 |
| Issues ouvertes | 828, plus 55 pull requests ouvertes | Les plus récentes ont pour titre, en grande majorité, un simple nom d'utilisateur Instagram |
| Dernier commit sur master | 25 août 2025 | Près d'un an avant cet article |
| Dernière release taguée | 1.3, 17 mai 2021 | Cinq ans sans nouvelle release |
| Archivé | Non | Accepte toujours les issues et les PR |
| Branches | master, development, v2 | master est la branche par défaut |
| Bannière de version | 1.1 | main.py l'affiche malgré le tag 1.3 |
Replacée sur une frise chronologique, la trajectoire du projet devient plus lisible :
- 7 juin 2019 : le dépôt est créé.
- 17 mai 2021 : la release 1.3 est taguée. C'est toujours la plus récente.
- 3 mai 2023, issue #791 : la communauté constate que l'outil a cessé de fonctionner.
- 6 mai 2024 :
instagram-private-api, la bibliothèque dont dépend le chemin par défaut, reçoit son dernier push. - 29 juillet 2025 : le commit "Integration with HikerAPI" arrive sur master.
- 11 août 2025 : la PR #2586 est mergée, achevant le backend HikerAPI.
- 25 août 2025 : le dernier commit sur master à ce jour.
- De mars à juin 2026 : le tracker se remplit de
checkpoint_required,block_eu_user_login_in_old_appetbad_password.
La lecture honnête : ce n'est pas un projet mort, mais ce n'est pas non plus un projet maintenu. Quelqu'un s'y est suffisamment intéressé mi-2025 pour y greffer un backend fonctionnel, puis la lumière s'est de nouveau éteinte. Personne ne trie les 828 issues ouvertes, personne ne merge les 55 pull requests ouvertes, personne n'a publié de release depuis cinq ans, et la bannière de démarrage annonce toujours "Version 1.1 - Developed by Giuseppe Criscione" alors que le tag le plus récent indique 1.3. Prévoyez en conséquence : si le chemin HikerAPI casse demain, rien n'indique que quelqu'un le réparera rapidement.
Cela vous indique aussi le crédit à accorder aux guides que vous trouverez. Les pages qui se positionnent aujourd'hui sur l'installation d'Osintgram sont datées de 2020 à 2025, et la plupart ont été écrites avant tout cela : avant la fermeture de l'endpoint, avant que Kali ne verrouille pip derrière la PEP 668, avant l'existence du backend HikerAPI. Un tutoriel qui ne mentionne jamais hikerapi_token décrit une version de l'outil qui ne se connecte plus, aussi propres que soient ses commandes.
La voie HikerAPI, et ce qu'elle vous coûte
Fin juillet 2025, le projet s'est doté d'un second backend. main.py prend désormais une seule décision au démarrage, avant tout trafic vers Instagram :
if config.getHikerToken():
api = HikerCLI(args.id, args.file, args.json, args.command,
args.output, args.cookies)
else:
api = Osintgram(args.id, args.file, args.json, args.command,
args.output, args.cookies)src/config.py définit getHikerToken() comme le champ hikerapi_token de config/credentials.ini, avec repli sur la variable d'environnement HIKERAPI_TOKEN. Si l'un des deux est renseigné, main.py construit HikerCLI, qui ne lit jamais de nom d'utilisateur ni de mot de passe : les deux champs vides restent donc vides et aucune connexion Instagram n'est tentée.
[Credentials]
username =
password =
hikerapi_token = <your token>La première ligne de sortie vous dit quel backend vous avez obtenu. L'ancien chemin affiche Attempt to login... ; le chemin HikerAPI affiche Connect to HikerAPI... et retire la mention [FOLLOWING] / [NOT FOLLOWING] de la bannière de cible, faute de compte connecté auquel se comparer. Cette unique ligne est le moyen le plus rapide de vérifier que votre token a bien été pris en compte.
Le README vous renvoie vers hikerapi.com/tokens et indique que les "first 100 requests are free after registration and confirmation of your tg" (« les 100 premières requêtes sont gratuites après inscription et confirmation de votre tg »). Ensuite, c'est une API commerciale facturée à la requête. Trois conséquences en découlent, et aucune ne figure dans les tutoriels qui se positionnent encore sur cette requête.
- Vous payez un tiers, et vous lui dites sur qui vous enquêtez. Chaque nom d'utilisateur cible que vous interrogez transite par l'infrastructure de HikerAPI plutôt que par votre propre session. Pour certaines investigations, c'est en soi un problème de divulgation.
- Le chemin HikerAPI a ses propres pannes. L'issue #2664, ouverte le 21 juin 2026, est intitulée "Handle alternate HikerAPI user response formats" : les formats de réponse attendus par le code ne sont pas les seuls renvoyés.
- Certaines commandes sont mortes sur ce chemin, par conception. Sur le backend HikerAPI,
photodesne fait rien d'autre qu'afficherInstagram has disabled this functionality.C'est ce que dit le code source, mot pour mot.
Pourquoi nous disons « encore prévue pour fonctionner », et non « garantie de fonctionner »
Nous n'avons pas exécuté l'outil contre une cible réelle : l'affirmation repose donc sur des preuves plutôt que sur une démonstration. La PR #2586 a intégré le backend en août 2025, la PR #2660 existe précisément pour y orienter les utilisateurs bloqués, et l'auteur de l'issue #2627 dit clairement que HikerAPI a fonctionné pour lui jusqu'à épuisement de son quota. C'est un signal fort et une garantie faible. L'issue #2664 est la raison de cette prudence.
Votre compte Instagram risque-t-il d'être banni ?
Le projet y répond lui-même. Le README porte un avertissement en rouge : "It is advisable to not use your own/primary account when using this tool." (« Il est conseillé de ne pas utiliser votre compte personnel ou principal avec cet outil. ») Ce n'est pas une formule de style, c'est un aveu sur le comportement de l'ancien chemin.
Mécaniquement, le backend par défaut se connecte avec un vrai compte, puis se comporte comme aucun humain ne le ferait. Les quatre commandes de collecte de contacts effectuent un appel d'API supplémentaire par abonné, et il n'y a ni pause ni backoff nulle part dans ces boucles. Quand Instagram proteste, vous obtenez Error: Instagram blocked the requests. Please wait a few minutes before you try again. sur ces commandes, ou une urllib.error.HTTPError: HTTP Error 429: Too Many Requests non gérée sur followers et followings, qui n'ont tout simplement pas le gestionnaire.
L'échelle à laquelle cela se produit est documentée, en volumes plutôt qu'en minutes. L'issue #366 montre une exécution interrompue après 41,643 enregistrements d'abonnés collectés, et le crash qui a suivi le message de throttling les a tous perdus ; l'issue #342 signale un scan bloqué aux alentours de 35,000. Aucun chronométrage vérifié n'existe pour tout cela : ne faites donc pas confiance à un guide qui vous promet un export d'abonnés en tant de minutes. Le patch communautaire #657 existe précisément parce que les boucles amont ne comportent aucun délai.
challenge_required est la version « au niveau du compte » de la même objection : Instagram estime que la session a l'air automatisée. L'issue #1638 documente le fait que l'outil le déclenche fréquemment, avec pour conséquences signalées des blocages temporaires ou la perte définitive du compte utilisé. La FAQ du README vous dit d'ouvrir le lien du challenge et de le valider, ce qui marche jusqu'au jour où cela ne marche plus.
Si vous utilisez l'ancien chemin, faites-le avec un compte jetable
Utilisez un compte que vous pouvez vous permettre de perdre, jamais un compte lié à une identité réelle ou à une mission client. Le second avertissement du README est tout aussi important : config/credentials.ini contient un mot de passe en clair, donc si vous forkez le dépôt, ne le committez pas. Le chemin HikerAPI évite toute cette catégorie de risques. Aucun compte à vous n'est connecté, il n'y a donc aucun compte à vous à bloquer.
Ce qui fonctionne encore, et par quoi le remplacer
Il existe quatre façons d'exécuter réellement cet outil, plus une façon de s'en passer. Leur statut en 2026 n'est pas le même.
| Voie | Fonctionne en 2026 ? | Nécessite | Coût |
|---|---|---|---|
| Nom d'utilisateur + mot de passe (par défaut) | En pratique non : échec dès la ligne de connexion | Un compte Instagram jetable | Gratuit, plus le risque sur le compte |
| Token HikerAPI | La voie encore prévue pour fonctionner | Un token ; aucun compte Instagram | 100 requêtes gratuites, puis payant |
| Image Docker | Les deux mêmes voies, en conteneur | Des identifiants figés dans l'image au build | Gratuit |
Branche v2 | Non, elle n'a pas de backend HikerAPI | La même connexion morte | Gratuit |
| Recherche hébergée | Oui | Un compte connecté et un nom d'utilisateur public | Des crédits par recherche |
Deux notes de bas de tableau. La voie Docker n'est pas le gain d'isolation qu'elle paraît : le Dockerfile exécute COPY config/ /home/osintgram/config, donc tout ce qui se trouve dans credentials.ini au moment du build est figé dans l'image, une image que vous ne devez donc jamais pousser où que ce soit. Quant à la branche bêta v2, que quelques guides recommandent encore, elle est entièrement antérieure au travail sur HikerAPI : son requirements.txt abandonne hikerapi et fige requests==2.24.0, si bien qu'elle n'offre que le chemin qui ne fonctionne plus.
Même sur un backend qui s'authentifie, « ça marche » se juge commande par commande. Sur l'ancien chemin, photodes appelle l'endpoint https://www.instagram.com/<target>/?__a=1, retiré depuis longtemps, et ne fait rien sur celui de HikerAPI. addrs répond généralement Sorry! No results found :-( parce que les publications géolocalisées sont devenues rares. C'est une requête réussie qui ne renvoie rien, pas un échec. La référence complète des commandes indique lesquelles sont dans quel cas. Et face à un compte privé que votre session connectée ne suit pas, 19 des 21 commandes de données refusent purement et simplement : par conception, seules info et propic ne sont pas verrouillées, ce qui résume en une phrase la question des comptes privés.
Si ce dont vous avez réellement besoin est un rapport sur un profil public plutôt qu'un projet Python à maintenir, une recherche hébergée supprime le composant défaillant : vous ne vous connectez jamais à Instagram, donc checkpoint_required ne peut pas vous arriver, et il n'y a ni venv, ni credentials.ini, ni compte jetable à perdre. Ce n'est pas dire que la CLI est mauvaise ; ce sont les mêmes données publiques, obtenues sans la partie qui a cassé.
Le verdict 2026
Osintgram n'est pas mort, et il ne se porte pas bien pour autant. L'installation par défaut, celle que décrivent tous les tutoriels de 2020 à 2025, est morte en pratique : la bibliothèque qui la porte n'est plus mise à jour depuis mai 2024, l'endpoint dont elle dépend a disparu, et Instagram répond désormais à sa poignée de main de connexion par checkpoint_required et une URL unsupported_version. Aucune modification de configuration sur votre machine n'y changera quoi que ce soit.
Le backend HikerAPI est une voie réelle, actuelle et documentée, qui supprime le problème de connexion en supprimant la connexion. Il devient payant au-delà de 100 requêtes, il fait transiter vos cibles par un tiers, et il traîne son propre bug ouvert sur les formats de réponse. Si vous voulez la CLI en particulier (pour scripter, pour la reproductibilité, pour un dossier de sortie hors ligne), c'est la version à installer, et le guide d'installation la couvre. Si vous vouliez seulement les données, la CLI n'a jamais été le sujet.