forager.ai
forager.
Search Forager's job-posting events, or just their count.
setup & usage
crée une clé API sur app.forager.ai (gestion des clés — création/suppression — dashboard uniquement, pas depuis oto), puis colle-la dans oto.
account_id existe si ta clé a accès à plusieurs comptes Forager — laisse-le vide sinon, il est résolu automatiquementContrairement à la plupart des connecteurs oto, chaque appel de recherche ou de lookup facture un crédit sur l'abonnement Forager (forager_account(op="me") montre le solde). Seuls forager_account et forager_autocomplete sont gratuits.
op="totals" (job posts, organisations, recherche de rôles) pour connaître un volume avant de payer la page de résultats complèteforager_account(op="balance_log"|"balance_totals") retrace la consommationlocations, industries/industries_exclude, keywords/organization_keywords, web_technologies/organization_web_technologies, person_skills attendent des identifiants entiers, jamais une chaîne. Passer locations=["Paris"] ne matche rien. Résous d'abord via forager_autocomplete :
forager_autocomplete(op="locations", q="Paris") → récupère l'id → forager_job_post(op="search", filters={"locations": [<id>], "is_remote": true})Forager croise offres d'emploi, données d'entreprise et enrichissement contact, en 6 tools :
forager_job_post(op="search", filters={"title": "engineer", "organization_ids": [...]})forager_job_post(op="totals", filters={"is_remote": true})forager_organization(op="search", filters={"industries": [<id SaaS>], "employees_start": 50, "employees_end": 200})forager_organization(op="website", domain="acme.com")forager_person(op="detail", linkedin_public_identifier="janedoe")forager_person(op="work_emails"|"personal_emails"|"phone_numbers", person_id=...) (personal_emails ne renvoie que des adresses grand public — Gmail, Outlook… — jamais un domaine d'entreprise)forager_person(op="reverse_by_email", email="...") / op="reverse_by_phone"forager_person(op="role_search", filters={"role_title": "...", "organization_industries": [...]})forager_feedback(op="work_email", email="...", contact_status="invalid", is_correct_person=false) — chaque appel crée une NOUVELLE ligne de feedback, jamais un upsertGET/POST /api/api_keys/ et GET/DELETE /api/api_keys/{prefix}/ existent côté Forager mais ne sont volontairement pas exposés en tool : créer une clé exposerait un secret dans le contexte agent, et en supprimer une pourrait casser une autre intégration silencieusement. Gestion exclusivement sur app.forager.ai.
forager_person(op="work_emails"|"personal_emails"|"phone_numbers") rend [] quand rien n'est trouvé (pas facturé). op="reverse_by_email"|"reverse_by_phone" lève une erreur dans le même cas (Forager répond 404) — les deux familles de lookup ne signalent pas « rien trouvé » de la même façon, confirmé en live.
Construit à partir du spec OpenAPI officiel de Forager (contrairement à Grain/Fireflies, un vrai spec machine-readable existe), puis testé en live sur une vraie clé Trial (50 crédits, 36 dépensés — un appel par op des 6 tools). Tout fonctionne de bout en bout. Deux découvertes réelles au passage :
forager_autocomplete rend des id en chaîne ("9839"), à caster en entier avant de les repasser dans un filters — cf. note ci-dessus sur les filtres par IDforager_job_post(op="totals") et op="search") ont rendu des total_search_results différents sur le même filtre (500 vs 949) lors du test — pas d'explication trouvée côté client, à garder en tête si un chiffre surprendRestent non confirmés (pas testés pour économiser le solde) : le comportement exact sur un filtre mal typé, et la forme de test_scores sur person_detail_lookup.
outils
utilisation
claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configurés.pipx install oto-cli puis oto forager …