Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,18 @@
{
"extends": ["../../../../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-hunter
This library was generated with [Nx](https://nx.dev).
## Building
Run `nx build pieces-hunter` to build the library.

View File

@@ -0,0 +1,10 @@
{
"name": "@activepieces/piece-hunter",
"version": "0.0.5",
"type": "commonjs",
"main": "./src/index.js",
"types": "./src/index.d.ts",
"dependencies": {
"tslib": "^2.3.0"
}
}

View File

@@ -0,0 +1,65 @@
{
"name": "pieces-hunter",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/hunter/src",
"projectType": "library",
"release": {
"version": {
"manifestRootsToUpdate": [
"dist/{projectRoot}"
],
"currentVersionResolver": "git-tag",
"fallbackCurrentVersionResolver": "disk"
}
},
"tags": [],
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/hunter",
"tsConfig": "packages/pieces/community/hunter/tsconfig.lib.json",
"packageJson": "packages/pieces/community/hunter/package.json",
"main": "packages/pieces/community/hunter/src/index.ts",
"assets": [
"packages/pieces/community/hunter/*.md",
{
"input": "packages/pieces/community/hunter/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
},
"dependsOn": [
"^build",
"prebuild"
]
},
"nx-release-publish": {
"options": {
"packageRoot": "dist/{projectRoot}"
}
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
},
"prebuild": {
"executor": "nx:run-commands",
"options": {
"cwd": "packages/pieces/community/hunter",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
}
}

View File

@@ -0,0 +1,102 @@
{
"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.": "Finden und verwalten Sie professionelle E-Mail-Adressen im Maßstab und automatisieren Sie E-Mail-Entdeckung, Validierung, Lead Tracking und Kampagnen-Outtreach mit Hunter.io.",
"You can obtain your API key from [Account Settings](https://hunter.io/dashboard)": "Du kannst deinen API-Schlüssel unter [Kontoeinstellungen](https://hunter.io/dashboard ) erhalten",
"Add Recipients": "Empfänger hinzufügen",
"Count Emails": "E-Mails zählen",
"Create Lead": "Lead erstellen",
"Delete Lead": "Lead löschen",
"Find Email": "E-Mail finden",
"Get Lead": "Lead holen",
"Search Leads": "Leads suchen",
"Update Lead": "Lead aktualisieren",
"Verify Email": "E-Mail bestätigen",
"Add one or multiple recipients to a campaign.": "Fügen Sie einer Kampagne einen oder mehrere Empfänger hinzu.",
"Returns the number of email addresses found for a domain or company.": "Gibt die Anzahl der gefundenen E-Mail-Adressen für eine Domäne oder ein Unternehmen zurück.",
"Create and store a lead record.": "Erstellen und speichern Sie einen Lead Record.",
"Delete a specific lead record by ID.": "Löschen eines bestimmten Lead Datensatzes per ID.",
"Retrieve/propose the most likely email for a person at a domain.": "Die wahrscheinlichste E-Mail für eine Person bei einer Domain abrufen/vorschlagen.",
"Retrieve details of a specific lead.": "Abrufen von Details zu einer bestimmten Führung.",
"List and filter leads in the account.": "Liste und Filter führt in das Konto.",
"Modify existing lead data.": "Vorhandene Leaddaten ändern.",
"Check email deliverability and validation status.": "Überprüfen Sie die Zustellbarkeit und den Validierungsstatus.",
"Campaign": "Kampagne",
"Emails": "E-Mails",
"Leads": "Leads",
"Domain": "Domäne",
"Company": "Firma",
"Type": "Typ",
"Email": "E-Mail",
"First Name": "Vorname",
"Last Name": "Nachname",
"Position": "Position",
"Company Industry": "Unternehmensindustrie",
"Company Size": "Unternehmensgröße",
"Confidence Score": "Vertrauenswert",
"Website": "Webseite",
"Country Code": "Landesvorwahl",
"LinkedIn URL": "LinkedIn URL",
"Phone Number": "Telefonnummer",
"Twitter Handle": "Twitter-Handle",
"Notes": "Notizen",
"Source": "Quelle",
"Leads List": "Lead-Liste",
"Leads List IDs": "Leads Liste IDs",
"Custom Attributes": "Eigene Attribute",
"Lead to Delete": "Zum Löschen führen",
"Full Name": "Voller Name",
"Max Duration (seconds)": "Maximale Dauer (Sekunden)",
"Lead": "Lead",
"Industry": "Industrie",
"Sync Status": "Sync-Status",
"Sending Status(es)": "Sende Status(e)",
"Verification Status(es)": "Verifizierungsstatus(en)",
"Activity/Contact Date": "Aktivität/Kontaktdatum",
"Custom Attributes Filter": "Eigener Attributfilter",
"Query": "Abfrage",
"Limit": "Limit",
"Offset": "Versatz",
"Email addresses to add as recipients. At least one email or lead ID is required.": "E-Mail-Adressen, die als Empfänger hinzugefügt werden sollen. Mindestens eine E-Mail-Adresse oder Lead-ID ist erforderlich.",
"Select leads from your Hunter account to add as recipients.": "Wählen Sie Leads aus Ihrem Hunter-Konto, die als Empfänger hinzugefügt werden sollen.",
"Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.": "Domainname für die Adressen zählen sollen (z.B. \"stripe.com\"). Mindestens eine Domain oder ein Unternehmen ist erforderlich.",
"Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.": "Firmenname zur Zählung von Adressen (z.B. \"Stripe\"). Mindestens eine Domain oder Firma ist erforderlich.",
"Count only \"personal\" or \"generic\" email addresses. Leave blank for both.": "Zähle nur \"persönliche\" oder \"generische\" E-Mail-Adressen. Leer lassen für beides.",
"The email address of the lead.": "Die E-Mail-Adresse des Leads.",
"Name of the company the lead is working in.": "Name der Firma, in der die Leitung arbeitet.",
"Sector of the company (e.g. Finance, Technology, Education, etc.).": "Sektor der Firma (z.B. Finanzen, Technologie, Bildung, etc.).",
"Size of the company (e.g. 1-10, 201-500 employees).": "Unternehmensgröße (z.B. 1-10, 201-500 Mitarbeiter).",
"Probability the email is correct (0100).": "Wahrscheinlich ist die E-Mail korrekt (0100).",
"Domain name of the company.": "Domänenname des Unternehmens.",
"ISO 3166-1 alpha-2 country code.": "ISO 3166-1 alpha-2 Länderkennzahl.",
"Personal notes about the lead.": "Persönliche Notizen über die Leitung.",
"Origin where the lead was found.": "Ursprung wo der Blei gefunden wurde.",
"Select which list to add the lead to; defaults to your most recent list.": "Wählen Sie die Liste aus, zu der die Lead hinzugefügt werden soll. Standardmäßig ist die aktuelle Liste.",
"Array of list IDs to add the lead to; defaults to your most recent list.": "Array der Listen-IDs, zu denen die Lead hinzugefügt werden soll. Standardmäßig ist Ihre neueste Liste.",
"Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.": "Schlüssel/Wertkarte für beliebige benutzerdefinierte Attribute, z.B. { \"customer_id\": \"cus-1234abcd\" }.",
"Select the lead to delete from your Hunter account.": "Wählen Sie die Lead aus, die aus Ihrem Jäger-Konto gelöscht werden soll.",
"The person's full name (if you can't supply both first and last name).": "Der vollständige Name der Person (wenn Sie den Vor- und Nachnamen nicht angeben können).",
"How long Hunter should spend refining results (3-20, default 10).": "Wie lange soll Hunter Raffinierergebnisse verwenden (3-20, Standard 10).",
"Select a lead from your Hunter account.": "Wählen Sie eine Lead aus Ihrem Jäger-Konto.",
"Filter by email (use \"*\" for any, \"~\" for empty, or substring).": "Nach E-Mail filtern (verwenden Sie \"*\" für jeden, \"~\" für leer oder Substring).",
"Filter by first name.": "Nach Vornamen filtern.",
"Filter by last name.": "Nach Nachnamen filtern.",
"Filter by position.": "Nach Position filtern.",
"Filter by company.": "Nach Unternehmen filtern.",
"Filter by industry.": "Filtern nach Industrie.",
"Filter by website.": "Filtern nach Webseite.",
"Filter by ISO31661 alpha2 country code.": "Filtern nach ISO 3166/2000 1 Alpha-2 Ländercode.",
"Filter by company size.": "Nach Unternehmensgröße filtern.",
"Filter by source.": "Nach Quelle filtern.",
"Filter by Twitter handle.": "Nach Twitter-Handle filtern.",
"Filter by LinkedIn URL.": "Nach LinkedIn-URL filtern.",
"Filter by phone number.": "Nach Telefonnummer filtern.",
"Filter by synchronization status.": "Nach Synchronisationsstatus filtern.",
"Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).": "Filtern durch Senden von Status(en): angeklickt, geöffnet, gesendet, ausstehend, fehlerhaft, abgehängt, beantwortet, oder \"~\" (unset).",
"Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".": "Filtern nach Verifizierungsstatus(en): accept_all, Einweg, ungültig, unbekannt, gültig, Webmail oder \"Ausstehend\".",
"Use \"*\" for any value or \"~\" for unset.": "Benutzen Sie \"*\" für jeden Wert oder \"~\" für das Entfernen des Satzes.",
"JSON object of slug→filterValue (use \"*\", \"~\", or substrings).": "JSON-Objekt von slug→ filterValue (verwenden Sie \"*\", \"~\" oder Substrings).",
"Search first_name, last_name or email containing this substring.": "Suche First_name, last_name oder Email, die diesen Substring enthalten.",
"Max leads to return (1-1000). Defaults to 20.": "Max führt zurück (1-1000). Standard ist 20.",
"Number of leads to skip (0-100000). Defaults to 0.": "Anzahl der zu überspringenden Leads (0-100000). Standard ist 0.",
"New Lead": "Neuer Lead",
"Fires when a new lead is created.": "Feuert ab, wenn ein neuer Lead erstellt wird."
}

View File

@@ -0,0 +1,102 @@
{
"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.": "Busca, verifica y administra direcciones de correo electrónico profesionales a escala. Automatiza el descubrimiento de correo electrónico, la validación, el seguimiento de plomos, y la difusión de campañas con Hunter.io.",
"You can obtain your API key from [Account Settings](https://hunter.io/dashboard)": "Puedes obtener tu clave API de [Configuración de la cuenta](https://hunter.io/dashboard)",
"Add Recipients": "Añadir destinatarios",
"Count Emails": "Contador de correos",
"Create Lead": "Crear plomo",
"Delete Lead": "Eliminar plomo",
"Find Email": "Buscar Email",
"Get Lead": "Llevar plomo",
"Search Leads": "Buscar clientes potenciales",
"Update Lead": "Actualizar plomo",
"Verify Email": "Verificar Email",
"Add one or multiple recipients to a campaign.": "Añadir uno o varios destinatarios a una campaña.",
"Returns the number of email addresses found for a domain or company.": "Devuelve el número de direcciones de correo electrónico encontradas para un dominio o empresa.",
"Create and store a lead record.": "Crear y almacenar un registro de inicio.",
"Delete a specific lead record by ID.": "Elimina un registro específico de prospección por ID.",
"Retrieve/propose the most likely email for a person at a domain.": "Recuperar/proponer el correo electrónico más probable para una persona en un dominio.",
"Retrieve details of a specific lead.": "Recuperar detalles de un cliente potencial.",
"List and filter leads in the account.": "Lista y filtro de clientes potenciales en la cuenta.",
"Modify existing lead data.": "Modificar los datos potenciales existentes.",
"Check email deliverability and validation status.": "Compruebe la entregabilidad de correo electrónico y el estado de validación.",
"Campaign": "Campaña",
"Emails": "Correos",
"Leads": "Prospectos",
"Domain": "Dominio",
"Company": "Empresa",
"Type": "Tipo",
"Email": "E-mail",
"First Name": "Nombre",
"Last Name": "Apellido",
"Position": "Posición",
"Company Industry": "Industria de la empresa",
"Company Size": "Tamaño de la empresa",
"Confidence Score": "Puntaje de confianza",
"Website": "Sitio web",
"Country Code": "Código del país",
"LinkedIn URL": "LinkedIn URL",
"Phone Number": "Número de teléfono",
"Twitter Handle": "Manejo de Twitter",
"Notes": "Notas",
"Source": "Fuente",
"Leads List": "Lista de clientes potenciales",
"Leads List IDs": "IDs de Lista de Prospectos",
"Custom Attributes": "Atributos personalizados",
"Lead to Delete": "Prospectos a eliminar",
"Full Name": "Nombre completo",
"Max Duration (seconds)": "Duración máxima (segundos)",
"Lead": "Plomo",
"Industry": "Industria",
"Sync Status": "Sincronizar estado",
"Sending Status(es)": "Enviando estado(s)",
"Verification Status(es)": "Estado (es) de verificación",
"Activity/Contact Date": "Fecha de actividad/contacto",
"Custom Attributes Filter": "Filtro de atributos personalizados",
"Query": "Consulta",
"Limit": "Límite",
"Offset": "Desplazamiento",
"Email addresses to add as recipients. At least one email or lead ID is required.": "Direcciones de correo electrónico para añadir como destinatarios. Se requiere al menos un correo electrónico o ID de inicio.",
"Select leads from your Hunter account to add as recipients.": "Seleccione clientes potenciales de su cuenta de Cazador para añadir como destinatarios.",
"Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.": "Nombre de dominio para contar direcciones (por ejemplo, \"stripe.com\"). Se requiere al menos una de dominio o compañía.",
"Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.": "Nombre de la empresa para contar direcciones (por ej., \"Stripe\"). Se requiere al menos una de dominio o compañía.",
"Count only \"personal\" or \"generic\" email addresses. Leave blank for both.": "Cuenta sólo direcciones de correo electrónico \"personales\" o \"genéricas\". Dejar en blanco para ambos.",
"The email address of the lead.": "La dirección de correo electrónico del cliente potencial.",
"Name of the company the lead is working in.": "Nombre de la empresa en la que el líder está trabajando.",
"Sector of the company (e.g. Finance, Technology, Education, etc.).": "Sector de la empresa (por ejemplo, finanzas, tecnologías, educación, etc.).",
"Size of the company (e.g. 1-10, 201-500 employees).": "Tamaño de la empresa (por ejemplo, 1-10, 201-500 empleados).",
"Probability the email is correct (0100).": "Probabilidad el correo electrónico es correcto (0100).",
"Domain name of the company.": "Nombre de dominio de la empresa.",
"ISO 3166-1 alpha-2 country code.": "Código de país ISO 3166-1 alpha-2.",
"Personal notes about the lead.": "Notas personales sobre el plomo.",
"Origin where the lead was found.": "Origen donde se encontró el plomo.",
"Select which list to add the lead to; defaults to your most recent list.": "Seleccione la lista a la que agregar el cliente potencial; por defecto en su lista más reciente.",
"Array of list IDs to add the lead to; defaults to your most recent list.": "Array de IDs de lista para agregar el cliente potencial; por defecto a su lista más reciente.",
"Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.": "Mapa Key/value de cualquier atributo personalizado, p. ej. { \"customer_id\": \"cus-1234abcd\" }.",
"Select the lead to delete from your Hunter account.": "Selecciona la iniciativa para eliminar de tu cuenta de Cazador.",
"The person's full name (if you can't supply both first and last name).": "Nombre completo de la persona (si no puede proporcionar tanto el nombre como el apellido).",
"How long Hunter should spend refining results (3-20, default 10).": "Cuánto tiempo debe gastar el Cazador para refinar los resultados (3-20, por defecto 10).",
"Select a lead from your Hunter account.": "Selecciona un cliente potencial de tu cuenta de Cazador.",
"Filter by email (use \"*\" for any, \"~\" for empty, or substring).": "Filtrar por correo electrónico (usar \"*\" para algunos, \"~\" para vacío, o subcadena).",
"Filter by first name.": "Filtrar por nombre.",
"Filter by last name.": "Filtrar por apellido.",
"Filter by position.": "Filtrar por posición.",
"Filter by company.": "Filtrar por empresa.",
"Filter by industry.": "Filtrar por industria.",
"Filter by website.": "Filtrar por sitio web.",
"Filter by ISO31661 alpha2 country code.": "Filtrar por el código de país ISO 3166<36>. 1 alfah<61>.",
"Filter by company size.": "Filtrar por tamaño de empresa.",
"Filter by source.": "Filtrar por origen.",
"Filter by Twitter handle.": "Filtrar por manejador Twitter.",
"Filter by LinkedIn URL.": "Filtrar por URL de LinkedIn.",
"Filter by phone number.": "Filtrar por número de teléfono.",
"Filter by synchronization status.": "Filtrar por estado de sincronización.",
"Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).": "Filtrar enviando estado(s): pulsado, abierto, enviado, pendiente, error, rebotado, desuscrito o respondido, o \"~\" (unset).",
"Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".": "Filtrar por estado(s) de verificación: accept_all, desechable, inválido, desconocido, válido, webmail, o \"pendiente\".",
"Use \"*\" for any value or \"~\" for unset.": "Use \"*\" para cualquier valor o \"~\" para desajustar.",
"JSON object of slug→filterValue (use \"*\", \"~\", or substrings).": "Objeto JSON de slug→ filterValue (use \"*\", \"~\" o subcadenas).",
"Search first_name, last_name or email containing this substring.": "Busque primer_name, last_name o correo electrónico que contenga esta subcadena.",
"Max leads to return (1-1000). Defaults to 20.": "Prospectos máximos a devolver (1-1000). Por defecto es 20.",
"Number of leads to skip (0-100000). Defaults to 0.": "Número de clientes potenciales a saltar (0-100000). Por defecto es 0.",
"New Lead": "Nuevo plomo",
"Fires when a new lead is created.": "Dispara cuando se crea un nuevo plomo."
}

View File

@@ -0,0 +1,102 @@
{
"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.": "Recherchez, vérifiez et gérez les adresses e-mail professionnelles à l'échelle. Automatisez la découverte d'e-mails, la validation, le suivi des prospects et la campagne avec Hunter.io.",
"You can obtain your API key from [Account Settings](https://hunter.io/dashboard)": "Vous pouvez obtenir votre clé API dans [Paramètres du compte](https://hunter.io/dashboard)",
"Add Recipients": "Ajouter des destinataires",
"Count Emails": "Nombre d'E-mails",
"Create Lead": "Créer Prospect",
"Delete Lead": "Supprimer Prospect",
"Find Email": "Trouver un e-mail",
"Get Lead": "Obtenir du plomb",
"Search Leads": "Rechercher des prospects",
"Update Lead": "Mettre à jour le prospect",
"Verify Email": "Vérifier l'e-mail",
"Add one or multiple recipients to a campaign.": "Ajouter un ou plusieurs destinataires à une campagne.",
"Returns the number of email addresses found for a domain or company.": "Renvoie le nombre d'adresses e-mail trouvées pour un domaine ou une entreprise.",
"Create and store a lead record.": "Créer et stocker un enregistrement principal.",
"Delete a specific lead record by ID.": "Supprimer un enregistrement principal spécifique par ID.",
"Retrieve/propose the most likely email for a person at a domain.": "Récupérez/proposez l'email le plus probable pour une personne à un domaine.",
"Retrieve details of a specific lead.": "Récupérer les détails d'un prospect spécifique.",
"List and filter leads in the account.": "Lister et filtrer les prospects dans le compte.",
"Modify existing lead data.": "Modifier les données de prospects existantes.",
"Check email deliverability and validation status.": "Vérifiez l'état de délivrabilité et de validation des courriels.",
"Campaign": "Campagnes",
"Emails": "E-mails",
"Leads": "Prospects",
"Domain": "Domaine",
"Company": "Entreprise",
"Type": "Type de texte",
"Email": "Courriel",
"First Name": "First Name",
"Last Name": "Last Name",
"Position": "Position",
"Company Industry": "Industrie de l'entreprise",
"Company Size": "Taille de la société",
"Confidence Score": "Score de confiance",
"Website": "Site Web",
"Country Code": "Code du pays",
"LinkedIn URL": "LinkedIn URL",
"Phone Number": "Numéro de téléphone",
"Twitter Handle": "Identifiant Twitter",
"Notes": "Notes",
"Source": "Source",
"Leads List": "Liste des Prospects",
"Leads List IDs": "ID de la liste des Prospects",
"Custom Attributes": "Attributs personnalisés",
"Lead to Delete": "Prospect à supprimer",
"Full Name": "Nom complet",
"Max Duration (seconds)": "Durée max (secondes)",
"Lead": "Prospect",
"Industry": "Industrie",
"Sync Status": "État de la synchronisation",
"Sending Status(es)": "Envoi de statut(s)",
"Verification Status(es)": "Statut(s) de vérification",
"Activity/Contact Date": "Date de l'activité/Contact",
"Custom Attributes Filter": "Filtre d'attributs personnalisés",
"Query": "Requête",
"Limit": "Limite",
"Offset": "Décalage",
"Email addresses to add as recipients. At least one email or lead ID is required.": "Adresses e-mail à ajouter en tant que destinataires. Au moins un e-mail ou un ID de prospect est requis.",
"Select leads from your Hunter account to add as recipients.": "Sélectionnez les prospects de votre compte Hunter à ajouter en tant que destinataires.",
"Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.": "Nom de domaine pour lequel compter les adresses (par exemple, \"stripe.com\"). Au moins un domaine ou une entreprise est requis.",
"Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.": "Le nom de la société pour laquelle comptabiliser les adresses (par exemple, \"Stripe\"). Au moins un domaine ou une entreprise est requis.",
"Count only \"personal\" or \"generic\" email addresses. Leave blank for both.": "Ne comptez que les adresses e-mail \"personnelles\" ou \"génériques\". Laissez vide pour les deux.",
"The email address of the lead.": "L'adresse email du plomb.",
"Name of the company the lead is working in.": "Nom de la société dans laquelle le plomb travaille.",
"Sector of the company (e.g. Finance, Technology, Education, etc.).": "Secteur de la société (par exemple Finance, Technologie, Education, etc.).",
"Size of the company (e.g. 1-10, 201-500 employees).": "Taille de l'entreprise (par exemple 1-10, 201-500 employés).",
"Probability the email is correct (0100).": "Probabilité de l'email est correcte (0-100).",
"Domain name of the company.": "Nom de domaine de la société.",
"ISO 3166-1 alpha-2 country code.": "Code pays ISO 3166-1 alpha-2.",
"Personal notes about the lead.": "Notes personnelles sur le plomb.",
"Origin where the lead was found.": "Origine où la piste a été trouvée.",
"Select which list to add the lead to; defaults to your most recent list.": "Sélectionnez la liste à laquelle ajouter le prospect ; par défaut votre liste la plus récente.",
"Array of list IDs to add the lead to; defaults to your most recent list.": "Tableau des identifiants de liste à ajouter au prospect ; par défaut à votre liste la plus récente.",
"Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.": "Carte clé/valeur des attributs personnalisés, par exemple { \"customer_id\": \"cus-1234abcd\" }.",
"Select the lead to delete from your Hunter account.": "Sélectionnez le prospect à supprimer de votre compte Hunter.",
"The person's full name (if you can't supply both first and last name).": "Le nom complet de la personne (si vous ne pouvez pas fournir le prénom et le nom de famille).",
"How long Hunter should spend refining results (3-20, default 10).": "Combien de temps le chasseur doit dépenser pour affiner les résultats (3-20, par défaut 10).",
"Select a lead from your Hunter account.": "Sélectionnez un plomb dans votre compte Hunter.",
"Filter by email (use \"*\" for any, \"~\" for empty, or substring).": "Filtrer par email (utiliser \"*\" pour tout le monde, \"~\" pour vide, ou sous-chaîne).",
"Filter by first name.": "Filtrer par prénom.",
"Filter by last name.": "Filtrer par nom de famille.",
"Filter by position.": "Filtrer par position.",
"Filter by company.": "Filtrer par société.",
"Filter by industry.": "Filtrer par industrie.",
"Filter by website.": "Filtrer par site web.",
"Filter by ISO31661 alpha2 country code.": "Filtrer par code pays ISO 31661 alpha2.",
"Filter by company size.": "Filtrer par taille de l'entreprise.",
"Filter by source.": "Filtrer par source.",
"Filter by Twitter handle.": "Filtrer par identifiant Twitter.",
"Filter by LinkedIn URL.": "Filtrer par URL LinkedIn.",
"Filter by phone number.": "Filtrer par numéro de téléphone.",
"Filter by synchronization status.": "Filtrer par statut de synchronisation.",
"Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).": "Filtrer par statut d'envoi : cliqué, ouvert, envoyé, en attente, erreur, rebond, désabonné, répondu, ou \"~\" (dédéfini).",
"Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".": "Filtrer par statut(s) de vérification(s) : accept_all, jetable, invalide, inconnue, valide, webmail, ou \"en attente\".",
"Use \"*\" for any value or \"~\" for unset.": "Utilisez \"*\" pour n'importe quelle valeur ou \"~\" pour annuler.",
"JSON object of slug→filterValue (use \"*\", \"~\", or substrings).": "Objet JSON de slug→filterValue (utiliser \"*\", \"~\", ou sous-chaînes).",
"Search first_name, last_name or email containing this substring.": "Recherchez le prénom, le nom de famille ou l'email contenant cette sous-chaîne.",
"Max leads to return (1-1000). Defaults to 20.": "Max mène au retour (1-1000). 20 par défaut.",
"Number of leads to skip (0-100000). Defaults to 0.": "Nombre de pistes à sauter (0-100000). 0 par défaut.",
"New Lead": "Nouveau prospect",
"Fires when a new lead is created.": "Tire quand un nouveau prospect est créé."
}

View File

@@ -0,0 +1,102 @@
{
"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.": "大規模なプロのメールアドレスを検索、検証、管理します。Hunter.ioでメールの発見、検証、リードトラッキング、キャンペーンアウトリーチを自動化します。",
"You can obtain your API key from [Account Settings](https://hunter.io/dashboard)": "You can obtain your API key from [Account Settings](https://hunter.io/dashboard)",
"Add Recipients": "Add Recipients",
"Count Emails": "メールをカウント",
"Create Lead": "リードを作成",
"Delete Lead": "リードを削除",
"Find Email": "電子メールを検索",
"Get Lead": "リードを獲得",
"Search Leads": "リードを検索",
"Update Lead": "潜在顧客を更新",
"Verify Email": "メールアドレスを確認する",
"Add one or multiple recipients to a campaign.": "キャンペーンに1つまたは複数の受信者を追加します。",
"Returns the number of email addresses found for a domain or company.": "ドメインまたは会社のメールアドレスの数を返します。",
"Create and store a lead record.": "リードレコードを作成・保存します。",
"Delete a specific lead record by ID.": "ID による特定のリードレコードを削除します。",
"Retrieve/propose the most likely email for a person at a domain.": "ドメインの人に最も可能性の高いメールを取得/提案します。",
"Retrieve details of a specific lead.": "特定のリードの詳細を取得します。",
"List and filter leads in the account.": "口座のリードのリストとフィルタリング。",
"Modify existing lead data.": "既存のリードデータを変更する",
"Check email deliverability and validation status.": "メールのデリバリと検証ステータスを確認します。",
"Campaign": "キャンペーン",
"Emails": "E-mail",
"Leads": "リード",
"Domain": "ドメイン",
"Company": "会社名",
"Type": "タイプ",
"Email": "Eメールアドレス",
"First Name": "名",
"Last Name": "Last Name",
"Position": "位置",
"Company Industry": "企業産業",
"Company Size": "会社のサイズ",
"Confidence Score": "自信度スコア",
"Website": "ウェブサイト",
"Country Code": "国コード",
"LinkedIn URL": "LinkedIn URL",
"Phone Number": "電話番号",
"Twitter Handle": "Twitter Handle",
"Notes": "メモ",
"Source": "ソース",
"Leads List": "リード一覧",
"Leads List IDs": "リードリストID",
"Custom Attributes": "カスタム属性",
"Lead to Delete": "削除にリード",
"Full Name": "フルネーム",
"Max Duration (seconds)": "最大持続時間(秒)",
"Lead": "リード",
"Industry": "産業",
"Sync Status": "同期状態",
"Sending Status(es)": "状態送信中",
"Verification Status(es)": "確認ステータス",
"Activity/Contact Date": "アクティビティ/連絡先日付",
"Custom Attributes Filter": "カスタム属性フィルタ",
"Query": "クエリ",
"Limit": "制限",
"Offset": "オフセット",
"Email addresses to add as recipients. At least one email or lead ID is required.": "受信者として追加する電子メールアドレス。少なくとも1つの電子メールまたはリードIDが必要です。",
"Select leads from your Hunter account to add as recipients.": "ハンターアカウントからリードを選択し、受取人として追加します。",
"Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.": "アドレスをカウントするドメイン名(例:\"stripe.com\"。少なくとも1つのドメインまたは会社が必要です。",
"Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.": "住所をカウントする会社名「Stripe」。ドメインまたは会社の少なくとも1つが必要です。",
"Count only \"personal\" or \"generic\" email addresses. Leave blank for both.": "「個人」または「一般」のメールアドレスのみカウントします。両方の場合は空白のままにします。",
"The email address of the lead.": "リードのメールアドレス",
"Name of the company the lead is working in.": "リードが働いている会社の名前。",
"Sector of the company (e.g. Finance, Technology, Education, etc.).": "会社のセクター(例えば、金融、技術、教育など)。",
"Size of the company (e.g. 1-10, 201-500 employees).": "会社の規模従業員1-10、201-500",
"Probability the email is correct (0100).": "メールの確率は正しい(0-100)。",
"Domain name of the company.": "会社のドメイン名。",
"ISO 3166-1 alpha-2 country code.": "ISO 3166-1 alpha-2 国コード。",
"Personal notes about the lead.": "リードについての個人的なメモ。",
"Origin where the lead was found.": "リードが発見された原点。",
"Select which list to add the lead to; defaults to your most recent list.": "リードを追加するリストを選択します。デフォルトは最新のリストです。",
"Array of list IDs to add the lead to; defaults to your most recent list.": "リードを追加するリストIDの配列。デフォルトは最新のリストです。",
"Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.": "任意のカスタム属性のキー/値マップ。例えば{ \"customer_id\": \"cus-1234abcd\" }。",
"Select the lead to delete from your Hunter account.": "あなたのハンターアカウントから削除するリードを選択します。",
"The person's full name (if you can't supply both first and last name).": "その人のフルネーム(姓と姓の両方を入力できない場合)。",
"How long Hunter should spend refining results (3-20, default 10).": "Hunter が絞り込み結果を使う期間 (3-20, デフォルト 10)",
"Select a lead from your Hunter account.": "ハンターアカウントからリードを選択します。",
"Filter by email (use \"*\" for any, \"~\" for empty, or substring).": "メールでフィルタリングします(空、またはサブストレートの場合は「*」、「~」を使用してください)。",
"Filter by first name.": "名でフィルタします。",
"Filter by last name.": "姓で絞り込みます。",
"Filter by position.": "位置で絞り込みます。",
"Filter by company.": "会社で絞り込みます。",
"Filter by industry.": "業種別フィルター。",
"Filter by website.": "ウェブサイトで絞り込みます。",
"Filter by ISO31661 alpha2 country code.": "ISO 31661の国コードでフィルタリングします。",
"Filter by company size.": "会社サイズで絞り込みます。",
"Filter by source.": "ソースでフィルタします。",
"Filter by Twitter handle.": "Twitterハンドルで絞り込みます。",
"Filter by LinkedIn URL.": "LinkedIn URLで絞り込みます。",
"Filter by phone number.": "電話番号で絞り込みます。",
"Filter by synchronization status.": "同期ステータスで絞り込みます。",
"Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).": "ステータス(es)を送信する:クリック、開いた、送信、保留、エラー、バウンス、購読解除、返信解除、または \"~\" (未設定) でフィルタリングします。",
"Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".": "検証ステータス(es): accept_all, disposable, invalid, unknow, valid, webmail, pending.",
"Use \"*\" for any value or \"~\" for unset.": "設定を解除するには任意の値に「*」、または「~」を使用してください。",
"JSON object of slug→filterValue (use \"*\", \"~\", or substrings).": "スラグの JSON オブジェクト→フィルタ値 (\"*\"、\"~\"、またはサブストリングを使用)",
"Search first_name, last_name or email containing this substring.": "このサブ文字列を含むfirst_name、last_nameまたは電子メールを検索します。",
"Max leads to return (1-1000). Defaults to 20.": "最大リターン数1-1000。デフォルトは20です。",
"Number of leads to skip (0-100000). Defaults to 0.": "スキップするリード数 (0-100000) 。デフォルトは0です。",
"New Lead": "新しいリード",
"Fires when a new lead is created.": "新しいリードが作成されたときに発火します。"
}

View File

@@ -0,0 +1,102 @@
{
"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.": "Zoek en controleer professionele e-mailadressen op schaal. Automatiseer e-mail ontdekking, validatie, lead tracking en campagne outreach met Hunter.io.",
"You can obtain your API key from [Account Settings](https://hunter.io/dashboard)": "U kunt uw API-sleutel verkrijgen via [Accountinstellingen](https://hunter.io/dashboard)",
"Add Recipients": "Ontvangers toevoegen",
"Count Emails": "Aantal e-mails",
"Create Lead": "Maak Lead",
"Delete Lead": "Verwijder Lead",
"Find Email": "Zoek e-mail",
"Get Lead": "Krijg Lead",
"Search Leads": "Zoek leads",
"Update Lead": "Lead bijwerken",
"Verify Email": "Bevestig e-mailadres",
"Add one or multiple recipients to a campaign.": "Een of meerdere ontvangers aan een campagne toevoegen.",
"Returns the number of email addresses found for a domain or company.": "Geeft als resultaat het aantal e-mailadressen gevonden voor een domein of bedrijf.",
"Create and store a lead record.": "Maak en bewaar een lead record.",
"Delete a specific lead record by ID.": "Verwijder een specifieke lead record via ID.",
"Retrieve/propose the most likely email for a person at a domain.": "Geeft op/suggereer de meest waarschijnlijke e-mail voor een persoon op een domein.",
"Retrieve details of a specific lead.": "Ophalen details van een specifieke lead.",
"List and filter leads in the account.": "Lijst en filter leads in de account.",
"Modify existing lead data.": "Bestaande Lead gegevens wijzigen.",
"Check email deliverability and validation status.": "Controleer je bezorgbaarheid en validatiestatus.",
"Campaign": "Campagne",
"Emails": "E-mails",
"Leads": "Leads",
"Domain": "Domein",
"Company": "Bedrijfsnaam",
"Type": "Type",
"Email": "E-mail",
"First Name": "Voornaam",
"Last Name": "Achternaam",
"Position": "Positie",
"Company Industry": "Bedrijfstak",
"Company Size": "Grootte van bedrijf",
"Confidence Score": "Vertrouwde Score",
"Website": "website",
"Country Code": "Land Code",
"LinkedIn URL": "LinkedIn URL",
"Phone Number": "Telefoon nummer",
"Twitter Handle": "Twitter Handle",
"Notes": "Opmerkingen",
"Source": "Bron",
"Leads List": "Leads Lijst",
"Leads List IDs": "Leads List IDs",
"Custom Attributes": "Aangepaste kenmerken",
"Lead to Delete": "Te verwijderen Lead",
"Full Name": "Volledige naam",
"Max Duration (seconds)": "Max duur (seconden)",
"Lead": "Lood",
"Industry": "Bedrijfstak",
"Sync Status": "Synchronisatie status",
"Sending Status(es)": "Verzenden status(sen)",
"Verification Status(es)": "Verificatie status(sen)",
"Activity/Contact Date": "Activiteit/Contactdatum",
"Custom Attributes Filter": "Filter voor aangepaste kenmerken",
"Query": "Zoekopdracht",
"Limit": "Limiet",
"Offset": "Verschuiving",
"Email addresses to add as recipients. At least one email or lead ID is required.": "E-mailadressen om toe te voegen als ontvangers. Ten minste één e-mail of lead ID is vereist.",
"Select leads from your Hunter account to add as recipients.": "Selecteer leads van uw Jagersaccount om toe te voegen als ontvanger.",
"Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.": "Domeinnaam voor het tellen van adressen (bijvoorbeeld \"stripe.com\"). Ten minste één domein of bedrijf is vereist.",
"Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.": "Bedrijfsnaam voor het tellen van adressen (bijvoorbeeld \"Stripe\"). Ten minste één domein of bedrijf is vereist.",
"Count only \"personal\" or \"generic\" email addresses. Leave blank for both.": "Alleen \"persoonlijk\" of \"generiek\" e-mailadressen. Laat leeg voor beide.",
"The email address of the lead.": "Het e-mailadres van de lead.",
"Name of the company the lead is working in.": "Naam van het bedrijf waar de lead in werkt.",
"Sector of the company (e.g. Finance, Technology, Education, etc.).": "Sector van het bedrijf (bijv. Financiën, Technologie, Onderwijs, etc.).",
"Size of the company (e.g. 1-10, 201-500 employees).": "De grootte van het bedrijf (bijv. 1-10, 201-500 werknemers).",
"Probability the email is correct (0100).": "Waarschijnlijkheid van de e-mail is juist (0-100).",
"Domain name of the company.": "Domeinnaam van het bedrijf.",
"ISO 3166-1 alpha-2 country code.": "ISO 3166-1 alpha-2 landcode.",
"Personal notes about the lead.": "Persoonlijke notities over de lead",
"Origin where the lead was found.": "Oorsprong waar de lead werd gevonden.",
"Select which list to add the lead to; defaults to your most recent list.": "Selecteer aan welke lijst u de lead wilt toevoegen; standaard aan uw meest recente lijst.",
"Array of list IDs to add the lead to; defaults to your most recent list.": "Array of list IDs om de lead toe te voegen; standaard aan je meest recente lijst.",
"Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.": "Sleutel/waarde kaart van elke aangepaste attributen, bijvoorbeeld { \"customer_id\": \"cus-1234abcd\" }.",
"Select the lead to delete from your Hunter account.": "Selecteer de lead om deze van jouw Jageraccount te verwijderen.",
"The person's full name (if you can't supply both first and last name).": "De volledige naam van de persoon (als je zowel de voor- als achternaam niet kunt geven).",
"How long Hunter should spend refining results (3-20, default 10).": "Hoe lang Jager raffinage resultaten moet besteden (3-20, standaard 10).",
"Select a lead from your Hunter account.": "Selecteer een voorsprong van uw Jagersaccount.",
"Filter by email (use \"*\" for any, \"~\" for empty, or substring).": "Filter op e-mail (gebruik \"*\" voor een, \"~\" voor leeg of subteken).",
"Filter by first name.": "Filter op voornaam.",
"Filter by last name.": "Filter op achternaam.",
"Filter by position.": "Op positie filteren.",
"Filter by company.": "Filter op bedrijf",
"Filter by industry.": "Filteren op industrie.",
"Filter by website.": "Filteren op website.",
"Filter by ISO31661 alpha2 country code.": "Filter op ISO 3166~1 alfafting 2 landcode.",
"Filter by company size.": "Filter op bedrijfsgrootte.",
"Filter by source.": "Filteren op bron.",
"Filter by Twitter handle.": "Filter op Twitter handle.",
"Filter by LinkedIn URL.": "Filter op LinkedIn URL.",
"Filter by phone number.": "Filter op telefoonnummer.",
"Filter by synchronization status.": "Filter op synchronisatiestatus.",
"Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).": "Filter door het verzenden van status(sen): geklikt, geopend, verzonden, verzend, wachtend, fouten, gebonkt, afgemeld, beantwoord of \"~\" (uitzetten).",
"Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".": "Filter op verificatie status(en): accept_all, besteed, ongeldig, ongeldig, geldig, webmail, of \"in behandeling\".",
"Use \"*\" for any value or \"~\" for unset.": "Gebruik \"*\" voor elke waarde of \"~\" om dit ongedaan te maken.",
"JSON object of slug→filterValue (use \"*\", \"~\", or substrings).": "JSON object van slug→filterWaarde (gebruik \"*\", \"~\", of substrings).",
"Search first_name, last_name or email containing this substring.": "Zoek voor_name, achternaam of e-mail met deze substring.",
"Max leads to return (1-1000). Defaults to 20.": "Max leidt tot terugkeer (1-1000). Standaard ingesteld op 20.",
"Number of leads to skip (0-100000). Defaults to 0.": "Aantal leads om over te slaan (0-100000). Standaard ingesteld op 0.",
"New Lead": "Nieuwe Lead",
"Fires when a new lead is created.": "Vuurt af wanneer een nieuwe lead wordt gemaakt."
}

View File

@@ -0,0 +1,102 @@
{
"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.": "Encontre, verifique e gerencie endereços de e-mail profissionais em escala. Automatize a descoberta, validação, acompanhamento de chumbo e campanha com o Hunter.io.",
"You can obtain your API key from [Account Settings](https://hunter.io/dashboard)": "Você pode obter sua chave de API em [Configurações da Conta](https://hunter.io/dashboard)",
"Add Recipients": "Adicionar Destinatários",
"Count Emails": "Contagem de Emails",
"Create Lead": "Criar Potencial",
"Delete Lead": "Excluir Lead",
"Find Email": "Encontrar E-mail",
"Get Lead": "Obter Potencial",
"Search Leads": "Pesquisar Potenciais",
"Update Lead": "Atualizar Lead",
"Verify Email": "Verificar e-mail",
"Add one or multiple recipients to a campaign.": "Adicionar um ou vários destinatários a uma campanha.",
"Returns the number of email addresses found for a domain or company.": "Retorna o número de endereços de e-mail encontrados para um domínio ou empresa.",
"Create and store a lead record.": "Crie e armazene um registro de leads.",
"Delete a specific lead record by ID.": "Excluir um registro de lead específico por ID.",
"Retrieve/propose the most likely email for a person at a domain.": "Recuperar/propor o e-mail mais provável para uma pessoa em um domínio.",
"Retrieve details of a specific lead.": "Recuperar detalhes de um potencial específico.",
"List and filter leads in the account.": "Lista e filtro leva na conta.",
"Modify existing lead data.": "Modificar dados do lead existente.",
"Check email deliverability and validation status.": "Verificar entrega de e-mail e estado de validação.",
"Campaign": "Campanha",
"Emails": "e-mails",
"Leads": "Conduz",
"Domain": "Domínio",
"Company": "Empresas",
"Type": "tipo",
"Email": "e-mail",
"First Name": "Nome",
"Last Name": "Sobrenome",
"Position": "Posição",
"Company Industry": "Indústria da Empresa",
"Company Size": "Tamanho da empresa",
"Confidence Score": "Pontuação de confiança",
"Website": "site",
"Country Code": "Código do país",
"LinkedIn URL": "LinkedIn URL",
"Phone Number": "Número de telefone",
"Twitter Handle": "Manipulador do Twitter",
"Notes": "Observações",
"Source": "fonte",
"Leads List": "Lista de Leads",
"Leads List IDs": "IDs de Listas de Leads",
"Custom Attributes": "Atributos personalizados",
"Lead to Delete": "Levar a Excluir",
"Full Name": "Nome Completo",
"Max Duration (seconds)": "Duração Máxima (segundos)",
"Lead": "Conduzir",
"Industry": "Indústria",
"Sync Status": "Status da sincronização",
"Sending Status(es)": "Enviando Status(s)",
"Verification Status(es)": "Status de Verificação",
"Activity/Contact Date": "Data de atividade/contato",
"Custom Attributes Filter": "Filtro de Atributos Personalizados",
"Query": "Requisição",
"Limit": "Limitar",
"Offset": "Deslocamento",
"Email addresses to add as recipients. At least one email or lead ID is required.": "Endereços de e-mail para adicionar como destinatários. Pelo menos um e-mail ou ID de lead é necessário.",
"Select leads from your Hunter account to add as recipients.": "Selecione ligações da sua conta do Caçador para adicionar como destinatários.",
"Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.": "Nome de domínio para contar endereços (por exemplo, \"stripe.com\"). Pelo menos um domínio ou empresa é necessário.",
"Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.": "Nome da empresa para contar os endereços (por exemplo, \"Stripe\"). Pelo menos um domínio ou empresa é necessário.",
"Count only \"personal\" or \"generic\" email addresses. Leave blank for both.": "Conte apenas endereços de e-mail \"pessoais\" ou \"genéricos\". Deixe em branco para ambos.",
"The email address of the lead.": "O endereço de e-mail da liderança.",
"Name of the company the lead is working in.": "Nome da empresa em que o potencial está trabalhando.",
"Sector of the company (e.g. Finance, Technology, Education, etc.).": "Setor da empresa (por exemplo, Finanças, Tecnologia, Educação, etc.).",
"Size of the company (e.g. 1-10, 201-500 employees).": "Tamanho da empresa (por exemplo, 1-10, 201-500 empregados).",
"Probability the email is correct (0100).": "Probabilidade do e-mail está correta (0100).",
"Domain name of the company.": "Nome do domínio da empresa.",
"ISO 3166-1 alpha-2 country code.": "Código de país ISO 3166-1 alpha-2.",
"Personal notes about the lead.": "Anotações pessoais sobre a liderança.",
"Origin where the lead was found.": "Origem onde o lead foi encontrado.",
"Select which list to add the lead to; defaults to your most recent list.": "Selecione para qual lista adicionar o lead; o padrão é sua lista mais recente.",
"Array of list IDs to add the lead to; defaults to your most recent list.": "Array de IDs de lista para adicionar o Lead; O padrão é sua lista mais recente.",
"Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.": "Mapa chave/valor de quaisquer atributos personalizados, por exemplo { \"customer_id\": \"cus-1234abcd\" }.",
"Select the lead to delete from your Hunter account.": "Selecione o Lead para excluir da sua conta do Caçador.",
"The person's full name (if you can't supply both first and last name).": "Nome completo da pessoa (se você não puder fornecer primeiro e último nome).",
"How long Hunter should spend refining results (3-20, default 10).": "Quanto tempo o Caçador deve gastar em resultados de refino (3-20, padrão 10).",
"Select a lead from your Hunter account.": "Selecione um lead da sua conta Hunter.",
"Filter by email (use \"*\" for any, \"~\" for empty, or substring).": "Filtrar e-mail (use \"*\" para uma, \"~\" para vazio ou substring).",
"Filter by first name.": "Filtrar pelo primeiro nome.",
"Filter by last name.": "Filtrar por último nome.",
"Filter by position.": "Filtrar por posição.",
"Filter by company.": "Filtrar por empresa.",
"Filter by industry.": "Filtrar por indústria.",
"Filter by website.": "Filtrar por site.",
"Filter by ISO31661 alpha2 country code.": "Filtrar por código de país ISO 3166➲ 1 alfaeval. 2",
"Filter by company size.": "Filtrar por tamanho da empresa.",
"Filter by source.": "Filtrar por fonte.",
"Filter by Twitter handle.": "Filtrar por manipulador do Twitter.",
"Filter by LinkedIn URL.": "Filtrar por URL do LinkedIn",
"Filter by phone number.": "Filtrar por número de telefone.",
"Filter by synchronization status.": "Filtrar por status de sincronização.",
"Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).": "Filtrar enviando status(s): clicado, aberto, enviado, pendente, erro, devolvido, desinscrito, respondido ou \"~\" (indefinido).",
"Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".": "Filtrar por status de verificação: aceitt_all, descartável, inválido, desconhecido, inválido, válido, webmail ou \"pendente\".",
"Use \"*\" for any value or \"~\" for unset.": "Use \"*\" para qualquer valor ou \"~\" para não definido.",
"JSON object of slug→filterValue (use \"*\", \"~\", or substrings).": "Objeto JSON de slug→filterValue (use \"*\", \"~\" ou substrings).",
"Search first_name, last_name or email containing this substring.": "Pesquisar primeiro_nome, sobrenome ou e-mail que contenham esta substring.",
"Max leads to return (1-1000). Defaults to 20.": "Máximo leva a retorno (1-1000). O padrão é 20.",
"Number of leads to skip (0-100000). Defaults to 0.": "Número de leads a ignorar (0-100000). O padrão é 0.",
"New Lead": "Novo Potencial",
"Fires when a new lead is created.": "Atira quando uma nova vantagem é criada."
}

View File

@@ -0,0 +1,103 @@
{
"Hunter": "Охотник",
"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.": "Найдите, верифицируйте и управляйте профессиональными адресами электронной почты в масштабе. Автоматизируйте поиск по электронной почте, валидацию, слежение за ведущими кампаниями и кампанию с помощью Hunter.io.",
"You can obtain your API key from [Account Settings](https://hunter.io/dashboard)": "Вы можете получить ваш API ключ в [Настройках аккаунта](https://hunter.io/dashboard)",
"Add Recipients": "Добавить получателей",
"Count Emails": "Счетчик писем",
"Create Lead": "Создать предв. контакт",
"Delete Lead": "Удалить предв. контакт",
"Find Email": "Найти E-mail",
"Get Lead": "Получить предв. контакт",
"Search Leads": "Поиск предварительных контактов",
"Update Lead": "Обновить предв. контакт",
"Verify Email": "Подтвердить email",
"Add one or multiple recipients to a campaign.": "Добавить одного или нескольких получателей в кампанию.",
"Returns the number of email addresses found for a domain or company.": "Возвращает количество email адресов, найденных для домена или компании.",
"Create and store a lead record.": "Создать и сохранить ведущую запись.",
"Delete a specific lead record by ID.": "Удалить запись Лидера по ID.",
"Retrieve/propose the most likely email for a person at a domain.": "Получать/предложить наиболее вероятный адрес электронной почты для пользователя домена.",
"Retrieve details of a specific lead.": "Получить информацию о конкретном лидере.",
"List and filter leads in the account.": "Список и фильтрация проводов в аккаунте.",
"Modify existing lead data.": "Изменить существующие предварительные данные.",
"Check email deliverability and validation status.": "Проверьте доставку и статус подтверждения.",
"Campaign": "Кампания",
"Emails": "Письма",
"Leads": "Предварительные контакты",
"Domain": "Домен",
"Company": "Компания",
"Type": "Тип",
"Email": "Почта",
"First Name": "First Name",
"Last Name": "Last Name",
"Position": "Позиция",
"Company Industry": "Промышленность компании",
"Company Size": "Размер компании",
"Confidence Score": "Балл доверия",
"Website": "Сайт",
"Country Code": "Код страны",
"LinkedIn URL": "LinkedIn URL",
"Phone Number": "Номер телефона",
"Twitter Handle": "Обработчик Twitter",
"Notes": "Примечания",
"Source": "Источник",
"Leads List": "Список предварительных контактов",
"Leads List IDs": "ID списка предварительных контактов",
"Custom Attributes": "Пользовательские атрибуты",
"Lead to Delete": "Предварительный контакт для удаления",
"Full Name": "Полное имя",
"Max Duration (seconds)": "Максимальная длительность (секунды)",
"Lead": "Предв. контакт",
"Industry": "Промышленность",
"Sync Status": "Состояние синхронизации",
"Sending Status(es)": "Статус (ы) отправки",
"Verification Status(es)": "Статус (ы) верификации",
"Activity/Contact Date": "Активность/Дата Контакта",
"Custom Attributes Filter": "Фильтр пользовательских атрибутов",
"Query": "Запрос",
"Limit": "Лимит",
"Offset": "Смещение",
"Email addresses to add as recipients. At least one email or lead ID is required.": "Адреса электронной почты для добавления в качестве получателей. Требуется по крайней мере один адрес электронной почты или ID клиента.",
"Select leads from your Hunter account to add as recipients.": "Выберите ведущих из вашего аккаунта Hunter для добавления в качестве получателей.",
"Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.": "Имя домена для подсчета адресов (например, \"stripe.com\"). Требуется по крайней мере один из доменов или компании.",
"Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.": "Имя компании для подсчета адресов (например, \"Stripe\"). Требуется по крайней мере один из доменов или компаний.",
"Count only \"personal\" or \"generic\" email addresses. Leave blank for both.": "Подсчитайте только \"персональные\" или \"универсальные\" адреса электронной почты. Оставьте пустым для обоих адресов.",
"The email address of the lead.": "Адрес электронной почты лидера.",
"Name of the company the lead is working in.": "Название компании, в которой работает ведущий директор.",
"Sector of the company (e.g. Finance, Technology, Education, etc.).": "Сектор компании (например, финансы, технологии, образование и т.д.).",
"Size of the company (e.g. 1-10, 201-500 employees).": "Размер компании (например, 1-10, 201-500 сотрудников).",
"Probability the email is correct (0100).": "Вероятность правильной электронной почты (0100).",
"Domain name of the company.": "Доменное имя компании.",
"ISO 3166-1 alpha-2 country code.": "ISO 3166-1 alpha-2 код страны.",
"Personal notes about the lead.": "Личные заметки о свинце.",
"Origin where the lead was found.": "Происхождение, где был найден свинцов.",
"Select which list to add the lead to; defaults to your most recent list.": "Выберите, к какому списку добавить свинца; по умолчанию в ваш самый последний список.",
"Array of list IDs to add the lead to; defaults to your most recent list.": "Массив идентификаторов списка, в который будет добавляться свинца; по умолчанию используется ваш самый последний список.",
"Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.": "Карта ключ/значение любых пользовательских атрибутов, например { \"customer_id\": \"cus-1234abcd\" }.",
"Select the lead to delete from your Hunter account.": "Выберите привезение, чтобы удалить его из вашего аккаунта Hunter.",
"The person's full name (if you can't supply both first and last name).": "Полное имя пользователя (если вы не можете указать имя и фамилию).",
"How long Hunter should spend refining results (3-20, default 10).": "Как долго охотник должен тратить результаты доработки (3-20, по умолчанию 10).",
"Select a lead from your Hunter account.": "Выберите свинца из вашего аккаунта Hunter.",
"Filter by email (use \"*\" for any, \"~\" for empty, or substring).": "Фильтр по электронной почте (используйте \"*\" для любого, \"~\" для пустого или подстроки).",
"Filter by first name.": "Фильтр по имени.",
"Filter by last name.": "Фильтр по фамилии.",
"Filter by position.": "Фильтр по позиции.",
"Filter by company.": "Фильтр по компании.",
"Filter by industry.": "Фильтр по отрасли.",
"Filter by website.": "Фильтр по веб-сайту.",
"Filter by ISO31661 alpha2 country code.": "Фильтровать по ISO 31661 алфавитный код страны 2.",
"Filter by company size.": "Фильтр по размеру компании.",
"Filter by source.": "Фильтр по источникам.",
"Filter by Twitter handle.": "Фильтровать по дескриптору Twitter.",
"Filter by LinkedIn URL.": "Фильтр по адресу LinkedIn",
"Filter by phone number.": "Фильтр по номеру телефона.",
"Filter by synchronization status.": "Фильтр по статусу синхронизации.",
"Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).": "Фильтр по отправке статуса(ов): нажат, открыт, отправлен, отложен, ошибка, отскочил, отписался, ответил или \"~\" (unset).",
"Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".": "Фильтр по статусу проверки: accept_all, одноразовый, недействительный, неизвестный, верный, веб-почта или \"pending\".",
"Use \"*\" for any value or \"~\" for unset.": "Используйте \"*\" для любого значения или \"~\" для снятия.",
"JSON object of slug→filterValue (use \"*\", \"~\", or substrings).": "JSON объект слаг→filterValue (используйте \"*\", \"~\" или подстроки).",
"Search first_name, last_name or email containing this substring.": "Поиск по первому_имени, фамилии или электронной почте, содержащей эту подстроку.",
"Max leads to return (1-1000). Defaults to 20.": "Максимальное количество проводов (1-1000). По умолчанию 20.",
"Number of leads to skip (0-100000). Defaults to 0.": "Количество проводов в пропуск (0-100000). По умолчанию 0.",
"New Lead": "Новый предв. контакт",
"Fires when a new lead is created.": "Стреляет при создании нового свинца."
}

View File

@@ -0,0 +1,102 @@
{
"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.": "Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.",
"You can obtain your API key from [Account Settings](https://hunter.io/dashboard)": "You can obtain your API key from [Account Settings](https://hunter.io/dashboard)",
"Add Recipients": "Add Recipients",
"Count Emails": "Count Emails",
"Create Lead": "Create Lead",
"Delete Lead": "Delete Lead",
"Find Email": "Find Email",
"Get Lead": "Get Lead",
"Search Leads": "Search Leads",
"Update Lead": "Update Lead",
"Verify Email": "Verify Email",
"Add one or multiple recipients to a campaign.": "Add one or multiple recipients to a campaign.",
"Returns the number of email addresses found for a domain or company.": "Returns the number of email addresses found for a domain or company.",
"Create and store a lead record.": "Create and store a lead record.",
"Delete a specific lead record by ID.": "Delete a specific lead record by ID.",
"Retrieve/propose the most likely email for a person at a domain.": "Retrieve/propose the most likely email for a person at a domain.",
"Retrieve details of a specific lead.": "Retrieve details of a specific lead.",
"List and filter leads in the account.": "List and filter leads in the account.",
"Modify existing lead data.": "Modify existing lead data.",
"Check email deliverability and validation status.": "Check email deliverability and validation status.",
"Campaign": "Campaign",
"Emails": "Emails",
"Leads": "Leads",
"Domain": "Domain",
"Company": "Company",
"Type": "Type",
"Email": "Email",
"First Name": "First Name",
"Last Name": "Last Name",
"Position": "Position",
"Company Industry": "Company Industry",
"Company Size": "Company Size",
"Confidence Score": "Confidence Score",
"Website": "Website",
"Country Code": "Country Code",
"LinkedIn URL": "LinkedIn URL",
"Phone Number": "Phone Number",
"Twitter Handle": "Twitter Handle",
"Notes": "Notes",
"Source": "Source",
"Leads List": "Leads List",
"Leads List IDs": "Leads List IDs",
"Custom Attributes": "Custom Attributes",
"Lead to Delete": "Lead to Delete",
"Full Name": "Full Name",
"Max Duration (seconds)": "Max Duration (seconds)",
"Lead": "Lead",
"Industry": "Industry",
"Sync Status": "Sync Status",
"Sending Status(es)": "Sending Status(es)",
"Verification Status(es)": "Verification Status(es)",
"Activity/Contact Date": "Activity/Contact Date",
"Custom Attributes Filter": "Custom Attributes Filter",
"Query": "Query",
"Limit": "Limit",
"Offset": "Offset",
"Email addresses to add as recipients. At least one email or lead ID is required.": "Email addresses to add as recipients. At least one email or lead ID is required.",
"Select leads from your Hunter account to add as recipients.": "Select leads from your Hunter account to add as recipients.",
"Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.": "Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.",
"Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.": "Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.",
"Count only \"personal\" or \"generic\" email addresses. Leave blank for both.": "Count only \"personal\" or \"generic\" email addresses. Leave blank for both.",
"The email address of the lead.": "The email address of the lead.",
"Name of the company the lead is working in.": "Name of the company the lead is working in.",
"Sector of the company (e.g. Finance, Technology, Education, etc.).": "Sector of the company (e.g. Finance, Technology, Education, etc.).",
"Size of the company (e.g. 1-10, 201-500 employees).": "Size of the company (e.g. 1-10, 201-500 employees).",
"Probability the email is correct (0100).": "Probability the email is correct (0100).",
"Domain name of the company.": "Domain name of the company.",
"ISO 3166-1 alpha-2 country code.": "ISO 3166-1 alpha-2 country code.",
"Personal notes about the lead.": "Personal notes about the lead.",
"Origin where the lead was found.": "Origin where the lead was found.",
"Select which list to add the lead to; defaults to your most recent list.": "Select which list to add the lead to; defaults to your most recent list.",
"Array of list IDs to add the lead to; defaults to your most recent list.": "Array of list IDs to add the lead to; defaults to your most recent list.",
"Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.": "Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.",
"Select the lead to delete from your Hunter account.": "Select the lead to delete from your Hunter account.",
"The person's full name (if you can't supply both first and last name).": "The person's full name (if you can't supply both first and last name).",
"How long Hunter should spend refining results (3-20, default 10).": "How long Hunter should spend refining results (3-20, default 10).",
"Select a lead from your Hunter account.": "Select a lead from your Hunter account.",
"Filter by email (use \"*\" for any, \"~\" for empty, or substring).": "Filter by email (use \"*\" for any, \"~\" for empty, or substring).",
"Filter by first name.": "Filter by first name.",
"Filter by last name.": "Filter by last name.",
"Filter by position.": "Filter by position.",
"Filter by company.": "Filter by company.",
"Filter by industry.": "Filter by industry.",
"Filter by website.": "Filter by website.",
"Filter by ISO31661 alpha2 country code.": "Filter by ISO31661 alpha2 country code.",
"Filter by company size.": "Filter by company size.",
"Filter by source.": "Filter by source.",
"Filter by Twitter handle.": "Filter by Twitter handle.",
"Filter by LinkedIn URL.": "Filter by LinkedIn URL.",
"Filter by phone number.": "Filter by phone number.",
"Filter by synchronization status.": "Filter by synchronization status.",
"Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).": "Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).",
"Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".": "Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".",
"Use \"*\" for any value or \"~\" for unset.": "Use \"*\" for any value or \"~\" for unset.",
"JSON object of slug→filterValue (use \"*\", \"~\", or substrings).": "JSON object of slug→filterValue (use \"*\", \"~\", or substrings).",
"Search first_name, last_name or email containing this substring.": "Search first_name, last_name or email containing this substring.",
"Max leads to return (1-1000). Defaults to 20.": "Max leads to return (1-1000). Defaults to 20.",
"Number of leads to skip (0-100000). Defaults to 0.": "Number of leads to skip (0-100000). Defaults to 0.",
"New Lead": "New Lead",
"Fires when a new lead is created.": "Fires when a new lead is created."
}

View File

@@ -0,0 +1,103 @@
{
"Hunter": "Hunter",
"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.": "Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.",
"You can obtain your API key from [Account Settings](https://hunter.io/dashboard)": "You can obtain your API key from [Account Settings](https://hunter.io/dashboard)",
"Add Recipients": "Add Recipients",
"Count Emails": "Count Emails",
"Create Lead": "Create Lead",
"Delete Lead": "Delete Lead",
"Find Email": "Find Email",
"Get Lead": "Get Lead",
"Search Leads": "Search Leads",
"Update Lead": "Update Lead",
"Verify Email": "Verify Email",
"Add one or multiple recipients to a campaign.": "Add one or multiple recipients to a campaign.",
"Returns the number of email addresses found for a domain or company.": "Returns the number of email addresses found for a domain or company.",
"Create and store a lead record.": "Create and store a lead record.",
"Delete a specific lead record by ID.": "Delete a specific lead record by ID.",
"Retrieve/propose the most likely email for a person at a domain.": "Retrieve/propose the most likely email for a person at a domain.",
"Retrieve details of a specific lead.": "Retrieve details of a specific lead.",
"List and filter leads in the account.": "List and filter leads in the account.",
"Modify existing lead data.": "Modify existing lead data.",
"Check email deliverability and validation status.": "Check email deliverability and validation status.",
"Campaign": "Campaign",
"Emails": "Emails",
"Leads": "Leads",
"Domain": "Domain",
"Company": "Company",
"Type": "Type",
"Email": "Email",
"First Name": "First Name",
"Last Name": "Last Name",
"Position": "Position",
"Company Industry": "Company Industry",
"Company Size": "Company Size",
"Confidence Score": "Confidence Score",
"Website": "Website",
"Country Code": "Country Code",
"LinkedIn URL": "LinkedIn URL",
"Phone Number": "Phone Number",
"Twitter Handle": "Twitter Handle",
"Notes": "Notes",
"Source": "Source",
"Leads List": "Leads List",
"Leads List IDs": "Leads List IDs",
"Custom Attributes": "Custom Attributes",
"Lead to Delete": "Lead to Delete",
"Full Name": "Full Name",
"Max Duration (seconds)": "Max Duration (seconds)",
"Lead": "Lead",
"Industry": "Industry",
"Sync Status": "Sync Status",
"Sending Status(es)": "Sending Status(es)",
"Verification Status(es)": "Verification Status(es)",
"Activity/Contact Date": "Activity/Contact Date",
"Custom Attributes Filter": "Custom Attributes Filter",
"Query": "Query",
"Limit": "Limit",
"Offset": "Offset",
"Email addresses to add as recipients. At least one email or lead ID is required.": "Email addresses to add as recipients. At least one email or lead ID is required.",
"Select leads from your Hunter account to add as recipients.": "Select leads from your Hunter account to add as recipients.",
"Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.": "Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.",
"Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.": "Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.",
"Count only \"personal\" or \"generic\" email addresses. Leave blank for both.": "Count only \"personal\" or \"generic\" email addresses. Leave blank for both.",
"The email address of the lead.": "The email address of the lead.",
"Name of the company the lead is working in.": "Name of the company the lead is working in.",
"Sector of the company (e.g. Finance, Technology, Education, etc.).": "Sector of the company (e.g. Finance, Technology, Education, etc.).",
"Size of the company (e.g. 1-10, 201-500 employees).": "Size of the company (e.g. 1-10, 201-500 employees).",
"Probability the email is correct (0100).": "Probability the email is correct (0100).",
"Domain name of the company.": "Domain name of the company.",
"ISO 3166-1 alpha-2 country code.": "ISO 3166-1 alpha-2 country code.",
"Personal notes about the lead.": "Personal notes about the lead.",
"Origin where the lead was found.": "Origin where the lead was found.",
"Select which list to add the lead to; defaults to your most recent list.": "Select which list to add the lead to; defaults to your most recent list.",
"Array of list IDs to add the lead to; defaults to your most recent list.": "Array of list IDs to add the lead to; defaults to your most recent list.",
"Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.": "Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.",
"Select the lead to delete from your Hunter account.": "Select the lead to delete from your Hunter account.",
"The person's full name (if you can't supply both first and last name).": "The person's full name (if you can't supply both first and last name).",
"How long Hunter should spend refining results (3-20, default 10).": "How long Hunter should spend refining results (3-20, default 10).",
"Select a lead from your Hunter account.": "Select a lead from your Hunter account.",
"Filter by email (use \"*\" for any, \"~\" for empty, or substring).": "Filter by email (use \"*\" for any, \"~\" for empty, or substring).",
"Filter by first name.": "Filter by first name.",
"Filter by last name.": "Filter by last name.",
"Filter by position.": "Filter by position.",
"Filter by company.": "Filter by company.",
"Filter by industry.": "Filter by industry.",
"Filter by website.": "Filter by website.",
"Filter by ISO31661 alpha2 country code.": "Filter by ISO31661 alpha2 country code.",
"Filter by company size.": "Filter by company size.",
"Filter by source.": "Filter by source.",
"Filter by Twitter handle.": "Filter by Twitter handle.",
"Filter by LinkedIn URL.": "Filter by LinkedIn URL.",
"Filter by phone number.": "Filter by phone number.",
"Filter by synchronization status.": "Filter by synchronization status.",
"Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).": "Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).",
"Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".": "Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".",
"Use \"*\" for any value or \"~\" for unset.": "Use \"*\" for any value or \"~\" for unset.",
"JSON object of slug→filterValue (use \"*\", \"~\", or substrings).": "JSON object of slug→filterValue (use \"*\", \"~\", or substrings).",
"Search first_name, last_name or email containing this substring.": "Search first_name, last_name or email containing this substring.",
"Max leads to return (1-1000). Defaults to 20.": "Max leads to return (1-1000). Defaults to 20.",
"Number of leads to skip (0-100000). Defaults to 0.": "Number of leads to skip (0-100000). Defaults to 0.",
"New Lead": "New Lead",
"Fires when a new lead is created.": "Fires when a new lead is created."
}

View File

@@ -0,0 +1,102 @@
{
"Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.": "Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.",
"You can obtain your API key from [Account Settings](https://hunter.io/dashboard)": "You can obtain your API key from [Account Settings](https://hunter.io/dashboard)",
"Add Recipients": "Add Recipients",
"Count Emails": "Count Emails",
"Create Lead": "Create Lead",
"Delete Lead": "Delete Lead",
"Find Email": "Find Email",
"Get Lead": "Get Lead",
"Search Leads": "Search Leads",
"Update Lead": "Update Lead",
"Verify Email": "Verify Email",
"Add one or multiple recipients to a campaign.": "Add one or multiple recipients to a campaign.",
"Returns the number of email addresses found for a domain or company.": "Returns the number of email addresses found for a domain or company.",
"Create and store a lead record.": "Create and store a lead record.",
"Delete a specific lead record by ID.": "Delete a specific lead record by ID.",
"Retrieve/propose the most likely email for a person at a domain.": "Retrieve/propose the most likely email for a person at a domain.",
"Retrieve details of a specific lead.": "Retrieve details of a specific lead.",
"List and filter leads in the account.": "List and filter leads in the account.",
"Modify existing lead data.": "Modify existing lead data.",
"Check email deliverability and validation status.": "Check email deliverability and validation status.",
"Campaign": "Campaign",
"Emails": "电子邮件",
"Leads": "Leads",
"Domain": "Domain",
"Company": "Company",
"Type": "类型",
"Email": "电子邮件地址",
"First Name": "First Name",
"Last Name": "名字",
"Position": "Position",
"Company Industry": "Company Industry",
"Company Size": "Company Size",
"Confidence Score": "Confidence Score",
"Website": "Website",
"Country Code": "Country Code",
"LinkedIn URL": "LinkedIn URL",
"Phone Number": "Phone Number",
"Twitter Handle": "Twitter Handle",
"Notes": "Notes",
"Source": "来源",
"Leads List": "Leads List",
"Leads List IDs": "Leads List IDs",
"Custom Attributes": "Custom Attributes",
"Lead to Delete": "Lead to Delete",
"Full Name": "Full Name",
"Max Duration (seconds)": "Max Duration (seconds)",
"Lead": "Lead",
"Industry": "Industry",
"Sync Status": "Sync Status",
"Sending Status(es)": "Sending Status(es)",
"Verification Status(es)": "Verification Status(es)",
"Activity/Contact Date": "Activity/Contact Date",
"Custom Attributes Filter": "Custom Attributes Filter",
"Query": "Query",
"Limit": "Limit",
"Offset": "Offset",
"Email addresses to add as recipients. At least one email or lead ID is required.": "Email addresses to add as recipients. At least one email or lead ID is required.",
"Select leads from your Hunter account to add as recipients.": "Select leads from your Hunter account to add as recipients.",
"Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.": "Domain name to count addresses for (e.g., \"stripe.com\"). At least one of domain or company is required.",
"Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.": "Company name to count addresses for (e.g., \"Stripe\"). At least one of domain or company is required.",
"Count only \"personal\" or \"generic\" email addresses. Leave blank for both.": "Count only \"personal\" or \"generic\" email addresses. Leave blank for both.",
"The email address of the lead.": "The email address of the lead.",
"Name of the company the lead is working in.": "Name of the company the lead is working in.",
"Sector of the company (e.g. Finance, Technology, Education, etc.).": "Sector of the company (e.g. Finance, Technology, Education, etc.).",
"Size of the company (e.g. 1-10, 201-500 employees).": "Size of the company (e.g. 1-10, 201-500 employees).",
"Probability the email is correct (0100).": "Probability the email is correct (0100).",
"Domain name of the company.": "Domain name of the company.",
"ISO 3166-1 alpha-2 country code.": "ISO 3166-1 alpha-2 country code.",
"Personal notes about the lead.": "Personal notes about the lead.",
"Origin where the lead was found.": "Origin where the lead was found.",
"Select which list to add the lead to; defaults to your most recent list.": "Select which list to add the lead to; defaults to your most recent list.",
"Array of list IDs to add the lead to; defaults to your most recent list.": "Array of list IDs to add the lead to; defaults to your most recent list.",
"Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.": "Key/value map of any custom attributes, e.g. { \"customer_id\": \"cus-1234abcd\" }.",
"Select the lead to delete from your Hunter account.": "Select the lead to delete from your Hunter account.",
"The person's full name (if you can't supply both first and last name).": "The person's full name (if you can't supply both first and last name).",
"How long Hunter should spend refining results (3-20, default 10).": "How long Hunter should spend refining results (3-20, default 10).",
"Select a lead from your Hunter account.": "Select a lead from your Hunter account.",
"Filter by email (use \"*\" for any, \"~\" for empty, or substring).": "Filter by email (use \"*\" for any, \"~\" for empty, or substring).",
"Filter by first name.": "Filter by first name.",
"Filter by last name.": "Filter by last name.",
"Filter by position.": "Filter by position.",
"Filter by company.": "Filter by company.",
"Filter by industry.": "Filter by industry.",
"Filter by website.": "Filter by website.",
"Filter by ISO31661 alpha2 country code.": "Filter by ISO31661 alpha2 country code.",
"Filter by company size.": "Filter by company size.",
"Filter by source.": "Filter by source.",
"Filter by Twitter handle.": "Filter by Twitter handle.",
"Filter by LinkedIn URL.": "Filter by LinkedIn URL.",
"Filter by phone number.": "Filter by phone number.",
"Filter by synchronization status.": "Filter by synchronization status.",
"Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).": "Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or \"~\" (unset).",
"Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".": "Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or \"pending\".",
"Use \"*\" for any value or \"~\" for unset.": "Use \"*\" for any value or \"~\" for unset.",
"JSON object of slug→filterValue (use \"*\", \"~\", or substrings).": "JSON object of slug→filterValue (use \"*\", \"~\", or substrings).",
"Search first_name, last_name or email containing this substring.": "Search first_name, last_name or email containing this substring.",
"Max leads to return (1-1000). Defaults to 20.": "Max leads to return (1-1000). Defaults to 20.",
"Number of leads to skip (0-100000). Defaults to 0.": "Number of leads to skip (0-100000). Defaults to 0.",
"New Lead": "New Lead",
"Fires when a new lead is created.": "Fires when a new lead is created."
}

View File

@@ -0,0 +1,40 @@
import { createPiece, PieceAuth } from "@activepieces/pieces-framework";
import { PieceCategory } from '@activepieces/shared';
import { addRecipientsAction } from "./lib/actions/add-recipients";
import { countEmailsAction } from "./lib/actions/count-emails";
import { createLeadAction } from "./lib/actions/create-lead";
import { deleteLeadAction } from "./lib/actions/delete-lead";
import { findEmailAction } from "./lib/actions/find-email";
import { getLeadAction } from "./lib/actions/get-lead";
import { searchLeadsAction } from "./lib/actions/search-leads";
import { updateLeadAction } from "./lib/actions/update-lead";
import { verifyEmailAction } from "./lib/actions/verify-email";
import { newLeadTrigger } from "./lib/triggers/new-lead";
export const hunterAuth = PieceAuth.SecretText({
displayName: 'API Key',
required: true,
description: 'You can obtain your API key from [Account Settings](https://hunter.io/dashboard)',
});
export const hunter = createPiece({
displayName: "Hunter",
description: 'Find, verify and manage professional email addresses at scale. Automate email discovery, validation, lead tracking, and campaign outreach with Hunter.io.',
auth: hunterAuth,
minimumSupportedRelease: '0.36.1',
logoUrl: "https://cdn.activepieces.com/pieces/hunter.png",
authors: ['varshith257'],
categories: [PieceCategory.SALES_AND_CRM],
actions: [
addRecipientsAction,
countEmailsAction,
createLeadAction,
deleteLeadAction,
findEmailAction,
getLeadAction,
searchLeadsAction,
updateLeadAction,
verifyEmailAction,
],
triggers: [newLeadTrigger],
});

View File

@@ -0,0 +1,89 @@
import { createAction } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { hunterApiCall } from '../common';
import { hunterAuth } from '../../index';
import {
campaignIdProp,
emailsProp,
leadIdsDropdownProp,
} from '../common/props';
const MAX_EMAILS = 50;
const MAX_LEAD_IDS = 50;
export const addRecipientsAction = createAction({
auth: hunterAuth,
name: 'add-recipients',
displayName: 'Add Recipients',
description: 'Add one or multiple recipients to a campaign.',
props: {
campaign_id: campaignIdProp,
emails: emailsProp,
lead_ids: leadIdsDropdownProp,
},
async run(context) {
const {
campaign_id,
emails: rawEmails = [],
lead_ids: rawLeadIds = [],
} = context.propsValue as {
campaign_id: number;
emails?: unknown[];
lead_ids?: unknown[];
};
const stringEmails = rawEmails.filter(
(e): e is string => typeof e === 'string'
);
const numberLeadIds = rawLeadIds.filter(
(id): id is number => typeof id === 'number'
);
const filteredEmails = stringEmails
.map((e) => e.trim())
.filter((e) => e.length > 0);
if (filteredEmails.length === 0 && numberLeadIds.length === 0) {
throw new Error(
'You must provide at least one valid email or one lead ID.'
);
}
if (filteredEmails.length > MAX_EMAILS) {
throw new Error(`You can add at most ${MAX_EMAILS} emails at once.`);
}
if (numberLeadIds.length > MAX_LEAD_IDS) {
throw new Error(`You can add at most ${MAX_LEAD_IDS} lead IDs at once.`);
}
const body: { emails?: string[]; lead_ids?: number[] } = {};
if (filteredEmails.length) body.emails = filteredEmails;
if (numberLeadIds.length) body.lead_ids = numberLeadIds;
const resp = await hunterApiCall({
apiKey: context.auth,
endpoint: `/campaigns/${campaign_id}/recipients`,
method: HttpMethod.POST,
body,
}) as {
data: {
recipients_added: number;
skipped_recipients: Array<{
email: string;
reason:
| 'duplicate'
| 'invalid'
| 'removed'
| 'bounced'
| 'unsubscribed'
| 'claimed';
}>;
};
};
return {
recipients_added: resp.data.recipients_added,
skipped_recipients: resp.data.skipped_recipients,
};
},
});

View File

@@ -0,0 +1,73 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpError, HttpMethod, QueryParams } from '@activepieces/pieces-common';
import { hunterApiCall } from '../common';
import { hunterAuth } from '../../index';
import { domainProp, companyProp, emailTypeProp } from '../common/props';
export const countEmailsAction = createAction({
auth: hunterAuth,
name: 'count-emails',
displayName: 'Count Emails',
description: 'Returns the number of email addresses found for a domain or company.',
props: {
domain: domainProp,
company: companyProp,
type: emailTypeProp,
},
async run(context) {
const { domain, company, type } =
context.propsValue as {
domain?: string;
company?: string;
type?: 'personal' | 'generic';
};
if (!domain && !company) {
throw new Error(
'You must provide at least a domain or a company name to count emails.'
);
}
const qparams: QueryParams = {};
if (domain) qparams['domain'] = domain;
if (!domain && company) qparams['company'] = company;
if (type) qparams['type'] = type;
let respBody;
try {
respBody = await hunterApiCall({
apiKey: context.auth,
endpoint: '/email-count',
method: HttpMethod.GET,
qparams,
});
} catch (err) {
const httpErr = err as HttpError;
const status = httpErr.response?.status;
const details =
(httpErr.response?.body as any)?.errors?.[0]?.details || 'Unknown error';
if (status === 400 && details.includes('wrong_params')) {
throw new Error('Missing domain or company parameter.');
}
if (status === 400 && details.includes('invalid_type')) {
throw new Error(
'Invalid type. Must be "personal" or "generic", exactly as shown.'
);
}
if (status === 429) {
throw new Error(
'Rate limit exceeded (15 req/s). Please wait a moment and try again.'
);
}
throw new Error(`Hunter Email Count API error: ${details}`);
}
const data = (respBody as any).data;
return {
total: data.total as number,
personal_emails: data.personal_emails as number,
generic_emails: data.generic_emails as number,
department: data.department as Record<string, number>,
seniority: data.seniority as Record<string, number>,
};
},
});

View File

@@ -0,0 +1,77 @@
import { createAction } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { hunterApiCall } from '../common';
import { hunterAuth } from '../../index';
import {
emailProp,
firstNameProp,
lastNameProp,
positionProp,
companyLeadProp,
companyIndustryProp,
companySizeProp,
confidenceScoreProp,
websiteProp,
countryCodeProp,
linkedinUrlProp,
phoneNumberProp,
twitterProp,
notesProp,
sourceProp,
leadsListDropdownProp,
leadsListIdsProp,
customAttributesProp,
} from '../common/props';
export const createLeadAction = createAction({
auth: hunterAuth,
name: 'create-lead',
displayName: 'Create Lead',
description: 'Create and store a lead record.',
props: {
email: emailProp,
first_name: firstNameProp,
last_name: lastNameProp,
position: positionProp,
company: companyLeadProp,
company_industry: companyIndustryProp,
company_size: companySizeProp,
confidence_score: confidenceScoreProp,
website: websiteProp,
country_code: countryCodeProp,
linkedin_url: linkedinUrlProp,
phone_number: phoneNumberProp,
twitter: twitterProp,
notes: notesProp,
source: sourceProp,
leads_list_id: leadsListDropdownProp,
leads_list_ids: leadsListIdsProp,
custom_attributes: customAttributesProp,
},
async run(context) {
const props = context.propsValue;
const body: Record<string, unknown> = {};
for (const [key, val] of Object.entries(props)) {
if (
val !== undefined &&
val !== null &&
!(
(Array.isArray(val) && val.length === 0) ||
(typeof val === 'string' && val === '')
)
) {
body[key] = val;
}
}
const resp = (await hunterApiCall({
apiKey: context.auth,
endpoint: '/leads',
method: HttpMethod.POST,
body,
})) as { data: any };
return { lead: resp.data };
},
});

View File

@@ -0,0 +1,26 @@
import { createAction } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { hunterApiCall } from '../common';
import { hunterAuth } from '../../index';
import { leadDeleteDropdownProp } from '../common/props';
export const deleteLeadAction = createAction({
auth: hunterAuth,
name: 'delete-lead',
displayName: 'Delete Lead',
description: 'Delete a specific lead record by ID.',
props: {
lead_id: leadDeleteDropdownProp,
},
async run(context) {
const { lead_id } = context.propsValue;
await hunterApiCall({
apiKey: context.auth,
endpoint: `/leads/${lead_id}`,
method: HttpMethod.DELETE,
});
return { success: true };
},
});

View File

@@ -0,0 +1,134 @@
import { createAction } from '@activepieces/pieces-framework';
import { HttpError, HttpMethod, QueryParams } from '@activepieces/pieces-common';
import { hunterApiCall } from '../common';
import { hunterAuth } from '../../index';
import {
domainProp,
companyProp,
firstNameProp,
lastNameProp,
fullNameProp,
maxDurationProp,
} from '../common/props';
export const findEmailAction = createAction({
auth: hunterAuth,
name: 'find-email',
displayName: 'Find Email',
description: 'Retrieve/propose the most likely email for a person at a domain.',
props: {
domain: domainProp,
company: companyProp,
first_name: firstNameProp,
last_name: lastNameProp,
full_name: fullNameProp,
max_duration: maxDurationProp,
},
async run(context) {
const {
domain,
company,
first_name,
last_name,
full_name,
max_duration,
} = context.propsValue as {
domain?: string;
company?: string;
first_name?: string;
last_name?: string;
full_name?: string;
max_duration?: number;
};
if (!domain && !company) {
throw new Error('You must provide at least a domain or a company name.');
}
if (
!((first_name && last_name) || full_name)
) {
throw new Error(
'You must provide both first_name and last_name, or a full_name.'
);
}
if (max_duration !== undefined && (max_duration < 3 || max_duration > 20)) {
throw new Error('max_duration must be between 3 and 20 seconds.');
}
const qparams: QueryParams = {};
if (domain) qparams['domain'] = domain;
else if (company) qparams['company'] = company;
if (first_name) qparams['first_name'] = first_name;
if (last_name) qparams['last_name'] = last_name;
if (full_name) qparams['full_name'] = full_name;
if (max_duration !== undefined) qparams['max_duration'] = String(max_duration);
let responseBody: any;
try {
responseBody = await hunterApiCall({
apiKey: context.auth,
endpoint: '/email-finder',
method: HttpMethod.GET,
qparams,
});
} catch (err) {
const httpErr = err as HttpError;
const status = httpErr.response?.status;
const errId = (httpErr.response?.body as any)?.errors?.[0]?.id;
const details = (httpErr.response?.body as any)?.errors?.[0]?.details ?? '';
if (status === 400) {
switch (errId) {
case 'wrong_params':
throw new Error(
'Missing required parameter—please supply domain or company, and first_name+last_name or full_name.'
);
case 'invalid_first_name':
throw new Error('The supplied first_name is invalid.');
case 'invalid_last_name':
throw new Error('The supplied last_name is invalid.');
case 'invalid_full_name':
throw new Error('The supplied full_name is invalid.');
case 'invalid_domain':
throw new Error(
'The supplied domain is invalid or lacks MX records.'
);
case 'invalid_max_duration':
throw new Error(
'The supplied max_duration is invalid (must be 320 seconds).'
);
}
}
if (status === 429) {
throw new Error(
'Rate limit exceeded (15 requests/sec, 500 req/min). Please retry shortly.'
);
}
if (status === 451 && errId === 'claimed_email') {
throw new Error(
'This email address cannot be processed because its owner requested to stop processing.'
);
}
throw new Error(
`Hunter Email Finder error: ${details} (status ${status}).`
);
}
const d = responseBody.data;
return {
first_name: d.first_name,
last_name: d.last_name,
email: d.email,
score: d.score,
domain: d.domain,
accept_all: d.accept_all,
position: d.position,
twitter: d.twitter,
linkedin_url: d.linkedin_url,
phone_number: d.phone_number,
company: d.company,
sources: d.sources,
verification: d.verification,
};
},
});

View File

@@ -0,0 +1,60 @@
import { createAction } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { hunterApiCall } from '../common';
import { hunterAuth } from '../../index';
import { leadSelectDropdownProp } from '../common/props';
export const getLeadAction = createAction({
auth: hunterAuth,
name: 'get-lead',
displayName: 'Get Lead',
description: 'Retrieve details of a specific lead.',
props: {
lead_id: leadSelectDropdownProp,
},
async run(context) {
const { lead_id } = context.propsValue;
const resp = (await hunterApiCall({
apiKey: context.auth,
endpoint: `/leads/${lead_id}`,
method: HttpMethod.GET,
})) as {
data: {
id: number;
email: string;
first_name: string | null;
last_name: string | null;
position: string | null;
company: string;
company_industry: string | null;
company_size: string | null;
confidence_score: number | null;
website: string;
country_code: string | null;
source: string | null;
linkedin_url: string | null;
phone_number: string | null;
twitter: string | null;
sync_status: string | null;
notes: string | null;
sending_status: string | null;
last_activity_at: string | null;
last_contacted_at: string | null;
verification: {
date: string | null;
status: string | null;
};
leads_list: {
id: number;
name: string;
leads_count: number;
};
created_at: string;
};
meta?: any;
};
return { lead: resp.data };
},
});

View File

@@ -0,0 +1,109 @@
import { createAction } from '@activepieces/pieces-framework';
import { HttpMethod, QueryParams } from '@activepieces/pieces-common';
import { hunterApiCall } from '../common';
import { hunterAuth } from '../../index';
import {
leadsListDropdownProp,
emailFilterProp,
firstNameFilterProp,
lastNameFilterProp,
positionFilterProp,
companyFilterProp,
industryFilterProp,
websiteFilterProp,
countryCodeFilterProp,
companySizeFilterProp,
sourceFilterProp,
twitterFilterProp,
linkedinUrlFilterProp,
phoneNumberFilterProp,
syncStatusProp,
sendingStatusProp,
verificationStatusProp,
dateFilterProp as lastActivityAtProp,
dateFilterProp as lastContactedAtProp,
customAttributesFilterProp,
queryProp,
limitProp,
offsetProp,
} from '../common/props';
export const searchLeadsAction = createAction({
auth: hunterAuth,
name: 'search-leads',
displayName: 'Search Leads',
description: 'List and filter leads in the account.',
props: {
leads_list_id: leadsListDropdownProp,
email: emailFilterProp,
first_name: firstNameFilterProp,
last_name: lastNameFilterProp,
position: positionFilterProp,
company: companyFilterProp,
industry: industryFilterProp,
website: websiteFilterProp,
country_code: countryCodeFilterProp,
company_size: companySizeFilterProp,
source: sourceFilterProp,
twitter: twitterFilterProp,
linkedin_url: linkedinUrlFilterProp,
phone_number: phoneNumberFilterProp,
sync_status: syncStatusProp,
sending_status: sendingStatusProp,
verification_status: verificationStatusProp,
last_activity_at: lastActivityAtProp,
last_contacted_at: lastContactedAtProp,
custom_attributes: customAttributesFilterProp,
query: queryProp,
limit: limitProp,
offset: offsetProp,
},
async run(context) {
const pv = context.propsValue;
const q: QueryParams = {};
if (pv.limit !== undefined) q['limit'] = String(pv.limit);
if (pv.offset !== undefined) q['offset'] = String(pv.offset);
[
'email', 'first_name', 'last_name', 'position', 'company',
'industry', 'website', 'country_code', 'company_size', 'source',
'twitter', 'linkedin_url', 'phone_number', 'sync_status', 'query'
].forEach((key) => {
if ((pv as any)[key]) q[key] = (pv as any)[key] as string;
});
if (pv.sending_status?.length) q['sending_status[]'] = pv.sending_status.join(',');
if (pv.verification_status?.length) q['verification_status[]'] = pv.verification_status.join(',');
if (pv.last_activity_at) q['last_activity_at'] = pv.last_activity_at;
if (pv.last_contacted_at) q['last_contacted_at'] = pv.last_contacted_at;
if (pv.leads_list_id !== undefined) q['leads_list_id'] = String(pv.leads_list_id);
if (pv.custom_attributes) {
const ca = pv.custom_attributes as Record<string, string>;
Object.entries(ca).forEach(([slug, val]) => {
q[`custom_attributes[${slug}]`] = val;
});
}
const resp = (await hunterApiCall({
apiKey: context.auth,
endpoint: '/leads',
method: HttpMethod.GET,
qparams: q,
})) as {
data: { leads: Array<any> };
meta: { count: number; total: number; params: { limit: number; offset: number } };
};
return {
leads: resp.data.leads,
count: resp.meta.count,
total: resp.meta.total,
limit: resp.meta.params.limit,
offset: resp.meta.params.offset,
};
},
});

View File

@@ -0,0 +1,85 @@
import { createAction } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { hunterApiCall } from '../common';
import { hunterAuth } from '../../index';
import {
leadSelectDropdownProp,
emailProp,
firstNameProp,
lastNameProp,
positionProp,
companyLeadProp,
companyIndustryProp,
companySizeProp,
confidenceScoreProp,
websiteProp,
countryCodeProp,
linkedinUrlProp,
phoneNumberProp,
twitterProp,
notesProp,
sourceProp,
leadsListDropdownProp,
leadsListIdsProp,
customAttributesProp,
} from '../common/props';
export const updateLeadAction = createAction({
auth: hunterAuth,
name: 'update-lead',
displayName: 'Update Lead',
description: 'Modify existing lead data.',
props: {
lead_id: leadSelectDropdownProp,
email: emailProp,
first_name: firstNameProp,
last_name: lastNameProp,
position: positionProp,
company: companyLeadProp,
company_industry: companyIndustryProp,
company_size: companySizeProp,
confidence_score: confidenceScoreProp,
website: websiteProp,
country_code: countryCodeProp,
linkedin_url: linkedinUrlProp,
phone_number: phoneNumberProp,
twitter: twitterProp,
notes: notesProp,
source: sourceProp,
leads_list_id: leadsListDropdownProp,
leads_list_ids: leadsListIdsProp,
custom_attributes: customAttributesProp,
},
async run(context) {
const props = context.propsValue;
const leadId = props.lead_id;
const body: Record<string, unknown> = {};
for (const [key, value] of Object.entries(props)) {
if (key === 'lead_id') continue;
if (
value !== undefined &&
value !== null &&
!(
(Array.isArray(value) && value.length === 0) ||
(typeof value === 'string' && value === '')
)
) {
body[key] = value;
}
}
if (Object.keys(body).length === 0) {
throw new Error('You must specify at least one field to update.');
}
await hunterApiCall({
apiKey: context.auth,
endpoint: `/leads/${leadId}`,
method: HttpMethod.PUT,
body,
});
return { success: true };
},
});

View File

@@ -0,0 +1,85 @@
import { createAction } from '@activepieces/pieces-framework';
import { HttpError, HttpMethod, QueryParams } from '@activepieces/pieces-common';
import { hunterApiCall } from '../common';
import { hunterAuth } from '../../index';
import { emailProp } from '../common/props';
export const verifyEmailAction = createAction({
auth: hunterAuth,
name: 'verify-email',
displayName: 'Verify Email',
description: 'Check email deliverability and validation status.',
props: {
email: emailProp,
},
async run(context) {
const { email } = context.propsValue;
const qparams: QueryParams = { email };
let respBody: any;
try {
respBody = await hunterApiCall({
apiKey: context.auth,
endpoint: '/email-verifier',
method: HttpMethod.GET,
qparams,
});
} catch (err) {
const httpErr = err as HttpError;
const status = httpErr.response?.status;
const errId = (httpErr.response?.body as any)?.errors?.[0]?.id;
if (status === 202) {
return { status: 'in_progress' as const };
}
if (status === 222) {
throw new Error(
'Verification failed due to an unexpected SMTP server error. Please try again later.'
);
}
if (status === 400) {
switch (errId) {
case 'wrong_params':
throw new Error('Missing required parameter: email.');
case 'invalid_email':
throw new Error('The supplied email is invalid.');
}
}
if (status === 429) {
throw new Error(
'Rate limit exceeded (10 requests/sec, 300 req/min). Please wait and retry shortly.'
);
}
if (status === 451 && errId === 'claimed_email') {
throw new Error(
'Cannot verify: the email owner requested no processing of their data.'
);
}
const detail = (httpErr.response?.body as any)?.errors?.[0]?.details ?? '';
throw new Error(`Hunter Email Verifier error: ${detail} (status ${status}).`);
}
const data = respBody.data;
if (!data) {
return { status: 'in_progress' as const };
}
return {
status: data.status,
result: data.result,
score: data.score,
email: data.email,
regexp: data.regexp,
gibberish: data.gibberish,
disposable: data.disposable,
webmail: data.webmail,
mx_records: data.mx_records,
smtp_server: data.smtp_server,
smtp_check: data.smtp_check,
accept_all: data.accept_all,
block: data.block,
sources: data.sources,
};
},
});

View File

@@ -0,0 +1,37 @@
import {
HttpMethod,
QueryParams,
httpClient,
HttpRequest,
} from '@activepieces/pieces-common';
import { AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
import { hunterAuth } from '../..';
export async function hunterApiCall({
apiKey,
endpoint,
method,
qparams,
body,
}: {
apiKey: AppConnectionValueForAuthProperty<typeof hunterAuth>;
endpoint: string;
method: HttpMethod;
qparams?: QueryParams;
body?: any;
}) {
const queryParams: QueryParams = {
...(qparams ?? {}),
api_key: apiKey.secret_text,
};
const request: HttpRequest = {
url: `https://api.hunter.io/v2${endpoint}`,
method,
queryParams,
body,
};
const response = await httpClient.sendRequest(request);
return response.body;
}

View File

@@ -0,0 +1,473 @@
import { Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { hunterApiCall } from './index';
import { hunterAuth } from '../..';
export const campaignIdProp = Property.Dropdown({
displayName: 'Campaign',
required: true,
refreshers: [],
auth: hunterAuth,
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Hunter account first.',
options: [],
};
}
const resp = await hunterApiCall({
apiKey: auth,
endpoint: '/campaigns',
method: HttpMethod.GET,
});
const campaigns = (resp as any).data?.campaigns as Array<{
id: number;
name: string;
}>;
return {
disabled: false,
options: campaigns.map((c) => ({
label: c.name,
value: c.id,
})),
};
},
});
export const emailsProp = Property.Array({
displayName: 'Emails',
required: false,
description: 'Email addresses to add as recipients. At least one email or lead ID is required.',
defaultValue: [],
});
export const leadIdsProp = Property.Array({
displayName: 'Lead IDs',
required: false,
description: 'Existing lead IDs from your Hunter account to add as recipients.',
defaultValue: [],
});
export const leadIdsDropdownProp = Property.MultiSelectDropdown({
displayName: 'Leads',
required: false,
auth: hunterAuth,
description: 'Select leads from your Hunter account to add as recipients.',
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Hunter account first.',
options: [],
};
}
const resp = await hunterApiCall({
apiKey: auth,
endpoint: '/leads',
method: HttpMethod.GET,
qparams: { limit: '100' }
});
const leads = (resp as any).data?.leads || [];
return {
disabled: false,
options: leads.map((lead: any) => ({
label: `${lead.first_name || ''} ${lead.last_name || ''} (${lead.email})`.trim(),
value: lead.id
}))
};
}
});
export const domainProp = Property.ShortText({
displayName: 'Domain',
required: false,
description:
'Domain name to count addresses for (e.g., "stripe.com"). At least one of domain or company is required.',
});
export const companyProp = Property.ShortText({
displayName: 'Company',
required: false,
description:
'Company name to count addresses for (e.g., "Stripe"). At least one of domain or company is required.',
});
export const companyLeadProp = Property.ShortText({
displayName: 'Company',
required: false,
description: 'Name of the company the lead is working in.',
});
export const emailTypeProp = Property.Dropdown({
auth: hunterAuth,
displayName: 'Type',
required: false,
description:
'Count only "personal" or "generic" email addresses. Leave blank for both.',
options: async () => ({
disabled: false,
options: [
{ label: 'Personal', value: 'personal' },
{ label: 'Generic', value: 'generic' },
],
}),
refreshers: []
});
export const emailProp = Property.ShortText({
displayName: 'Email',
required: true,
description: 'The email address of the lead.',
});
export const firstNameProp = Property.ShortText({
displayName: 'First Name',
required: false,
});
export const lastNameProp = Property.ShortText({
displayName: 'Last Name',
required: false,
});
export const positionProp = Property.ShortText({
displayName: 'Position',
required: false,
});
export const companyIndustryProp = Property.ShortText({
displayName: 'Company Industry',
required: false,
description:
'Sector of the company (e.g. Finance, Technology, Education, etc.).',
});
export const companySizeProp = Property.ShortText({
displayName: 'Company Size',
required: false,
description: 'Size of the company (e.g. 1-10, 201-500 employees).',
});
export const confidenceScoreProp = Property.Number({
displayName: 'Confidence Score',
required: false,
description:
'Probability the email is correct (0100).',
});
export const websiteProp = Property.ShortText({
displayName: 'Website',
required: false,
description: 'Domain name of the company.',
});
export const countryCodeProp = Property.ShortText({
displayName: 'Country Code',
required: false,
description: 'ISO 3166-1 alpha-2 country code.',
});
export const linkedinUrlProp = Property.ShortText({
displayName: 'LinkedIn URL',
required: false,
});
export const phoneNumberProp = Property.ShortText({
displayName: 'Phone Number',
required: false,
});
export const twitterProp = Property.ShortText({
displayName: 'Twitter Handle',
required: false,
});
export const notesProp = Property.ShortText({
displayName: 'Notes',
required: false,
description: 'Personal notes about the lead.',
});
export const sourceProp = Property.ShortText({
displayName: 'Source',
required: false,
description: 'Origin where the lead was found.',
});
export const leadsListIdProp = Property.Number({
displayName: 'Leads List ID',
required: false,
description:
'ID of the list to add the lead to; defaults to your most recent list.',
});
export const leadsListIdsProp = Property.Array({
displayName: 'Leads List IDs',
required: false,
description:
'Array of list IDs to add the lead to; defaults to your most recent list.',
defaultValue: [],
});
export const leadsListDropdownProp = Property.Dropdown({
auth: hunterAuth,
displayName: 'Leads List',
required: false,
description: 'Select which list to add the lead to; defaults to your most recent list.',
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Hunter account first.',
options: [],
};
}
const resp = await hunterApiCall({
apiKey: auth,
endpoint: '/leads',
method: HttpMethod.GET,
qparams: { limit: '100' }
});
const leads = (resp as any).data?.leads || [];
const uniqueLists = new Map();
leads.forEach((lead: any) => {
if (lead.leads_list) {
uniqueLists.set(lead.leads_list.id, lead.leads_list);
}
});
return {
disabled: false,
options: Array.from(uniqueLists.values()).map((list: any) => ({
label: `${list.name} (${list.leads_count} leads)`,
value: list.id
}))
};
}
});
export const customAttributesProp = Property.Json({
displayName: 'Custom Attributes',
required: false,
description:
'Key/value map of any custom attributes, e.g. { "customer_id": "cus-1234abcd" }.',
});
export const leadIdProp = Property.Number({
displayName: 'Lead ID',
required: true,
description: 'Identifier of the lead to delete.',
});
export const leadSelectDropdownProp = Property.Dropdown({
auth: hunterAuth,
displayName: 'Lead',
required: true,
description: 'Select a lead from your Hunter account.',
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Hunter account first.',
options: [],
};
}
const resp = await hunterApiCall({
apiKey: auth,
endpoint: '/leads',
method: HttpMethod.GET,
qparams: { limit: '100' }
});
const leads = (resp as any).data?.leads || [];
return {
disabled: false,
options: leads.map((lead: any) => ({
label: `${lead.first_name || ''} ${lead.last_name || ''} (${lead.email})`.trim(),
value: lead.id
}))
};
}
});
export const leadDeleteDropdownProp = Property.Dropdown({
auth: hunterAuth,
displayName: 'Lead to Delete',
required: true,
description: 'Select the lead to delete from your Hunter account.',
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Connect your Hunter account first.',
options: [],
};
}
const resp = await hunterApiCall({
apiKey: auth,
endpoint: '/leads',
method: HttpMethod.GET,
qparams: { limit: '100' }
});
const leads = (resp as any).data?.leads || [];
return {
disabled: false,
options: leads.map((lead: any) => ({
label: `${lead.first_name || ''} ${lead.last_name || ''} (${lead.email})`.trim(),
value: lead.id
}))
};
}
});
export const fullNameProp = Property.ShortText({
displayName: 'Full Name',
required: false,
description:
"The person's full name (if you can't supply both first and last name).",
});
export const maxDurationProp = Property.Number({
displayName: 'Max Duration (seconds)',
required: false,
description:
'How long Hunter should spend refining results (3-20, default 10).',
});
export const filterProp = (name: string, description: string) =>
Property.ShortText({ displayName: name, required: false, description });
export const emailFilterProp = filterProp(
'Email',
'Filter by email (use "*" for any, "~" for empty, or substring).'
);
export const firstNameFilterProp = filterProp(
'First Name',
'Filter by first name.'
);
export const lastNameFilterProp = filterProp(
'Last Name',
'Filter by last name.'
);
export const positionFilterProp = filterProp(
'Position',
'Filter by position.'
);
export const companyFilterProp = filterProp(
'Company',
'Filter by company.'
);
export const industryFilterProp = filterProp(
'Industry',
'Filter by industry.'
);
export const websiteFilterProp = filterProp(
'Website',
'Filter by website.'
);
export const countryCodeFilterProp = filterProp(
'Country Code',
'Filter by ISO31661 alpha2 country code.'
);
export const companySizeFilterProp = filterProp(
'Company Size',
'Filter by company size.'
);
export const sourceFilterProp = filterProp(
'Source',
'Filter by source.'
);
export const twitterFilterProp = filterProp(
'Twitter Handle',
'Filter by Twitter handle.'
);
export const linkedinUrlFilterProp = filterProp(
'LinkedIn URL',
'Filter by LinkedIn URL.'
);
export const phoneNumberFilterProp = filterProp(
'Phone Number',
'Filter by phone number.'
);
export const syncStatusProp = Property.Dropdown({
displayName: 'Sync Status',
required: false,
description: 'Filter by synchronization status.',
auth: hunterAuth,
options: async () => ({
disabled: false,
options: [
{ label: 'Pending', value: 'pending' },
{ label: 'Error', value: 'error' },
{ label: 'Success', value: 'success' },
],
}),
refreshers: []
});
export const arrayStringProp = (name: string, description: string) =>
Property.Array({
displayName: name,
required: false,
description,
defaultValue: [],
});
export const sendingStatusProp = arrayStringProp(
'Sending Status(es)',
'Filter by sending status(es): clicked, opened, sent, pending, error, bounced, unsubscribed, replied, or "~" (unset).'
);
export const verificationStatusProp = arrayStringProp(
'Verification Status(es)',
'Filter by verification status(es): accept_all, disposable, invalid, unknown, valid, webmail, or "pending".'
);
export const dateFilterProp = filterProp(
'Activity/Contact Date',
'Use "*" for any value or "~" for unset.'
);
export const customAttributesFilterProp = Property.Json({
displayName: 'Custom Attributes Filter',
required: false,
description:
'JSON object of slug→filterValue (use "*", "~", or substrings).',
});
export const queryProp = Property.ShortText({
displayName: 'Query',
required: false,
description:
'Search first_name, last_name or email containing this substring.',
});
export const limitProp = Property.Number({
displayName: 'Limit',
required: false,
description: 'Max leads to return (1-1000). Defaults to 20.',
});
export const offsetProp = Property.Number({
displayName: 'Offset',
required: false,
description: 'Number of leads to skip (0-100000). Defaults to 0.',
});

View File

@@ -0,0 +1,32 @@
export interface Lead {
id: number;
email: string;
first_name?: string | null;
last_name?: string | null;
position?: string | null;
company?: string | null;
company_industry?: string | null;
company_size?: string | null;
confidence_score?: number | null;
website?: string | null;
country_code?: string | null;
source?: string | null;
linkedin_url?: string | null;
phone_number?: string | null;
twitter?: string | null;
sync_status?: string | null;
notes?: string | null;
sending_status?: string | null;
last_activity_at?: string | null;
last_contacted_at?: string | null;
verification?: {
date: string | null;
status: string | null;
};
leads_list?: {
id: number;
name: string;
leads_count: number;
};
created_at: string;
}

View File

@@ -0,0 +1,60 @@
import { hunterAuth } from '../../index';
import { createTrigger, TriggerStrategy, PiecePropValueSchema, AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
import { DedupeStrategy, HttpMethod, Polling, pollingHelper } from '@activepieces/pieces-common';
import { hunterApiCall } from '../common';
import { Lead } from '../common/types';
export const newLeadTrigger = createTrigger({
auth: hunterAuth,
name: 'new-lead',
displayName: 'New Lead',
description: 'Fires when a new lead is created.',
type: TriggerStrategy.POLLING,
props: {},
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue
});
},
async test(context) {
return await pollingHelper.test(polling, context);
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
sampleData: {
id: 123,
email: 'john.doe@example.com',
first_name: 'John',
last_name: 'Doe',
company: 'Example Inc.',
position: 'CEO',
created_at: '2025-07-24T12:00:00Z'
}
});
const polling: Polling<AppConnectionValueForAuthProperty<typeof hunterAuth>, Record<string, never>> = {
strategy: DedupeStrategy.TIMEBASED,
async items({ auth }) {
const response = await hunterApiCall({
apiKey: auth,
endpoint: '/leads',
method: HttpMethod.GET,
qparams: { limit: '100' }
});
const leads = (response as { data: { leads: Lead[] } }).data?.leads as Lead[];
return leads.map((lead) => ({
epochMilliSeconds: new Date(lead.created_at).valueOf(),
data: lead
}));
}
};

View File

@@ -0,0 +1,20 @@
{
"extends": "../../../../tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"forceConsistentCasingInFileNames": true,
"strict": true,
"importHelpers": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"noPropertyAccessFromIndexSignature": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
}
]
}

View File

@@ -0,0 +1,9 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"include": ["src/**/*.ts"]
}