cold outreach

lemlist

cold outreach.

gestion de campagnes cold outreach lemlist. liste des campagnes, stats détaillées, gestion des leads, activités de séquence.

ajouter à otoauth : api keyprefix : lemlist_*

setup & usage

⚠ clé api lemlist

crée une clé API dans lemlist (Settings → Integrations → API), puis colle-la dans oto (page compte / connecteurs).

  • chacun voit SES données : ta propre clé est requise
  • ▸ l'API lemlist en entier

    le connecteur reflète les 141 routes documentées, sans exception. par famille :

    campagnes — lemlist_list_campaigns, lemlist_campaign, lemlist_sequence, lemlist_schedule, lemlist_get_campaign_stats

  • « crée une campagne "Q4 outbound", ajoute une étape email à J+3 »
  • « qu'est-ce qui bloque le lancement de cette campagne ? » (sender manquant, DNS, limite journalière)
  • « mets la fenêtre d'envoi sur 8h-12h du lundi au jeudi », « duplique-la pour l'équipe NL »
  • « stats de la campagne X », « compare mes 5 campagnes du trimestre »
  • leads — lemlist_create_lead, lemlist_lead, lemlist_enrich*

  • « ajoute ce lead, trouve son email et vérifie-le »
  • un lead déjà dans une campagne n'est pas une erreur : lemlist_create_lead rend created: false avec reason (already_in_other_campaign / already_in_campaign) — le contact est déjà pris, compte-le comme tel
  • un lead créé ne dit pas s'il part : lemlist_create_lead rend review_state: "unknown" (lemlist ne le dit pas, et isPaused est écarté car il ne distingue pas la revue du départ). Pour le savoir, lemlist_campaign(op="reports") : si reviewedCount ou inSequenceLeadCount montent avec l'ajout, le lead part
  • « mets ce lead en pause sur toutes les campagnes », « marque-le intéressé »
  • « importe les leads du filtre HubSpot X dans cette campagne »
  • CRM lemlist — lemlist_contact, lemlist_company, lemlist_team(op="fields")

  • ⚠️ un contact n'est pas un lead : le lead est l'exemplaire d'une personne DANS une campagne, le contact est la personne elle-même. c'est la confusion la plus coûteuse ici.
  • inbox — lemlist_inbox (conversations, brouillons, libellés) et lemlist_inbox_send

    désinscriptions — lemlist_unsubscribe : ⚠️ trois listes distinctes (emails/domaines v1, variables v2, drapeau do-not-contact d'un contact) ; écrire dans l'une n'écrit pas dans les autres

    signaux — lemlist_watchlist : boîtes qui recrutent, levées, changements de poste…

    le reste — lemlist_task, lemlist_database (base partagée + personas), lemlist_team, lemlist_mailbox (connexion SMTP/IMAP + lemwarm), lemlist_deliverability, lemlist_webhook, lemlist_get_activities

    · ce qui envoie, et ce qui est masqué par défaut

    quatre tools envoient ou arment l'envoi. tous les quatre sont masqués par défaut — ils restent appelables, il faut juste les activer (oto_enable_tool <nom>) :

  • lemlist_campaign_start — démarrer la campagne déroule la séquence pour tous ses leads lancés
  • lemlist_launch_lead — sortir un lead de la revue manuelle
  • lemlist_inbox_send — email / LinkedIn / WhatsApp directs : ni campagne, ni séquence, ni revue devant eux, le message part
  • lemlist_campaign_auto_review — n'envoie rien lui-même, mais fait partir tout lead ajouté ensuite : avec lui, lemlist_create_lead devient un envoi
  • tout le reste travaille sur de la donnée ou sur une campagne qui n'a encore rien à envoyer.

    ⚠️ une campagne créée par l'API naît `state=running`, contrairement à ce que son status (« draft ») laisse croire — vérifié en live le 31/08. elle n'envoie rien tant qu'aucun lead n'est lancé, mais lemlist_campaign(op="start") répond « already running » et c'est op="pause" qui est le vrai interrupteur. pour construire tranquillement : créer puis mettre en pause. (une campagne dupliquée, elle, naît bien en pause.)

    pause ≠ rappel : mettre en pause arrête la progression, pas ce qui est déjà programmé.

    deux surfaces envoient indirectement, et restent visibles en le disant : une watch list réglée sur push_to_campaign alimente une campagne toute seule, et lemlist_mailbox(op="lemwarm_start") envoie — mais dans le réseau de chauffe, jamais vers un prospect.

    · pièges de l'API lemlist
  • supprimer un lead ≠ le désinscrire, et lemlist sert les deux par la même route, le défaut étant le doux. ici les deux ops sont nommées à part (op="delete" vs op="unsubscribe").
  • `lemlist_lead(op="pause")` sans `campaign_id` met le lead en pause sur TOUTES les campagnes, pas sur une.
  • `lemlist_contact(op="list_manage")` AJOUTE par défaut ; action="remove" retire.
  • supprimer une étape est refusé tant que la campagne tourne — mets-la en pause d'abord.
  • les enrichissements dépensent des crédits (lemlist_team(op="credits") les compte).
  • · écarts doc↔API relevés en live (31/08/2026)

    le connecteur les absorbe déjà ; c'est ici pour comprendre un message d'erreur, pas pour agir.

  • lemlist_task(op="create") exige record_id (le contact ou le lead), que la doc lemlist dit optionnel.
  • lemlist_watchlist(op="create") : lis op="filters" avant — chaque type a ses filtres obligatoires, les valeurs doivent venir de op="filter_values", et les nombres voyagent en chaînes.
  • lemlist_campaign(op="export_leads") filtre sur state="all" par défaut : le défaut de lemlist rend une liste vide qui se lit « pas de leads ».
  • ce que ce compte ne permet pas (limite de plan, pas un bug) : les étapes LinkedIn (Upgrade your plan), les endpoints CRM (crm_filters, crm_users, import_crm → « Endpoint not available » sans intégration CRM), et l'historique d'une watch list (bêta non activée).
  • ⚙ plusieurs comptes

    ce connecteur accepte plusieurs comptes : chaque credential posé devient un compte nommé (un nom par compte), à ton niveau, à celui de ton équipe ou de ton org.

  • le premier n'a pas besoin de nom ; à partir du deuxième, chacun porte le sien (le premier prend alors le nom « principal », renommable)
  • sans précision, l'agent prend le seul compte posé, sinon celui marqué par défaut ; sinon l'appel est refusé en nommant les comptes disponibles — jamais un choix au hasard
  • viser un compte pour un appel : _account="<nom>" sur l'outil ; les lister : oto_identity(op='list', connector='lemlist') (scope='org' ou scope='group' pour ceux de l'org ou de l'équipe)
  • fixer le défaut : oto_identity(op='set', connector='lemlist', identity_id='<nom>') ; renommer : op='rename' avec new_name
  • ⚠️ aucun outil ne parcourt les comptes tout seul : un total sur plusieurs comptes s'obtient en appelant chacun (_account) et en additionnant
  • outils

    chargement…

    utilisation

    claude code — installe le plugin oto — claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configurés.
    claude.ai — branche mcp.oto.cx/mcp en connecteur custom (guide)
    cli — pipx install oto-cli puis oto lemlist …