Skip to main content

Hunter.io ExecModule

Overview

HunterModule connects ValkyrAI workflows to the fixed Hunter API v2 host through the native map I/O ExecModule ABI. It performs bounded domain search, email finding and verification, email counts, person, company, and combined enrichment, and account-usage inspection without exposing the Hunter API key to workflow data.

The connector follows the core domain-search, email-finder, and email-verifier operations in n8n's Hunter integration. ValkyrAI also exposes Hunter's current read-only enrichment and usage endpoints, while adding the generated IntegrationAccount boundary, fixed-host routing, bounded retry and response handling, identity checks, and credential redaction.

Hunter results may contain personal data. Use the module only for approved business purposes, apply consent and outreach rules downstream, and honor Hunter's HTTP 451 privacy response as a permanent stop for that person or address.

Usage

  1. Create a least-privilege Hunter API key for the intended team and plan.
  2. Store the key only in the encrypted IntegrationAccount.apiKey SecureField.
  3. Mark the IntegrationAccount READY after its connection test succeeds.
  4. Select one operation and provide only its required domain, company, email, or name fields.
  5. Review enriched data under the caller's approved sales or customer workflow before outreach.

Inputs

InputTypeRequiredDefaultDescription
operationstringYesNoneOne of the eight operations listed below.
domainstringBy operationNoneValid DNS company domain; URLs and paths are rejected.
companystringAlternativeNoneCompany name when a domain is unavailable.
emailstringBy operationNoneProfessional address for verification or enrichment.
firstNamestringFinder optionNoneFirst name paired with lastName.
lastNamestringFinder optionNoneLast name paired with firstName.
fullNamestringFinder optionNoneAlternative to separate first and last names.
typestringNoNonepersonal or generic for domain search or email count.
departmentstringNoNoneBounded Hunter department filter for domain search.
senioritystringNoNoneBounded Hunter seniority filter for domain search.
jobTitlesstringNoNoneComma-delimited job-title filter, up to 500 characters.
decisionMakerbooleanNofalseRestrict domain search to decision makers.
maxDurationintegerNo10Hunter email-finder time budget from 3 through 20 seconds.
limitintegerNo10Domain-search page size from 1 through 100.
offsetintegerNo0Domain-search result offset from 0 through 10,000.

domain_search, email_count, and email_finder accept domain or company. When both are supplied, the validated domain is used and company is omitted from the provider request. email_finder additionally requires either fullName or both firstName and lastName; the two name shapes cannot be mixed.

Outputs

OutputTypeWhen presentDescription
statusstringAlwayssuccess or error.
operationstringAlwaysNormalized Hunter operation.
dataobject/arraySuccessSanitized provider data with credential-shaped fields removed.
itemsarrayDomain searchBounded email-address results from the current provider page.
countintegerDomain searchNumber of returned items.
totalintegerDomain searchProvider-reported matching result count.
hasMorebooleanDomain searchWhether the next offset may return more results.
nextOffsetintegerMore resultsOffset for the next workflow execution.
pendingbooleanHTTP 202 verifierVerification is still processing and may be polled later.
httpStatusintegerProvider responseHunter HTTP status.
attemptsintegerAlwaysProvider attempts consumed.
errorobjectFailureRedacted code, message, and retryable fields.

IntegrationAccount Requirements

FieldRequirement
ProviderHunter API v2
StatusREADY
apiKeyEncrypted SecureField containing the Hunter API key
accountIdOptional operator label; not sent to Hunter

Hunter's REST v2 contract requires the API key as the api_key query parameter. The module adds it only inside the fixed-host HTTP request, never accepts it from workflow input, never includes it in output, and never logs request URLs. Rotate the key through the IntegrationAccount lifecycle if it may have appeared in external proxy or provider logs.

Use separate keys or IntegrationAccounts when teams require distinct Hunter plans, credit pools, or access boundaries. A Hunter team is not a substitute for ValkyrAI RBAC or approval policy.

Configuration

{
"authConfig": {
"authStrategy": 1,
"integrationAccount": "integration-account:hunter-sales-research"
},
"parameters": "{\"operation\":\"domain_search\",\"department\":\"it\",\"decisionMaker\":true,\"limit\":25}"
}

Credentials stay in authConfig.integrationAccount. Do not place an API key in parameters, workflow input, a domain, company name, email, logs, or examples.

Operations

OperationHunter behaviorRequired inputsSide effect
domain_searchReturns one offset page of professional addresses and company context.domain or companyRead-only; may consume search credits.
email_finderFinds the most likely professional address and its verification context.domain or company; one valid name shapeRead-only; may consume search credits.
email_verifierChecks deliverability and provider evidence.emailRead-only; may consume verification credits.
email_countReturns available personal/generic counts for a company.domain or companyRead-only.
person_enrichmentReturns Hunter's current person enrichment for an address.emailRead-only; may consume enrichment credits.
company_enrichmentReturns company context for a domain.domainRead-only; may consume enrichment credits.
combined_enrichmentReturns person and company context together.emailRead-only; may consume enrichment credits.
account_infoReturns plan and current request usage.NoneRead-only and free under Hunter's current contract.

Every operation uses GET. Transient HTTP and network failures use at most three bounded attempts. A verifier HTTP 202 is returned as successful pending work. Hunter's nonstandard HTTP 222 verifier outcome becomes HUNTER_VERIFICATION_UNAVAILABLE rather than false success.

Errors and Failure Modes

ErrorRetryableRecovery
VALIDATION_ERRORNoCorrect the named domain, company, email, name shape, filter, bound, or credential.
INTEGRATION_ACCOUNT_REQUIREDNoBind a Hunter IntegrationAccount.
INTEGRATION_ACCOUNT_NOT_READYNoRepair and mark the account READY.
HUNTER_HTTP_400NoCorrect missing or invalid provider parameters.
HUNTER_HTTP_401NoRotate the Hunter API key.
HUNTER_HTTP_403NoWait for rate-limit recovery or use a plan with the required endpoint.
HUNTER_HTTP_404NoTreat the requested enrichment resource as unavailable.
HUNTER_HTTP_429YesWait for plan usage to reset or upgrade the relevant credit allowance.
HUNTER_HTTP_451NoStop processing the person or address; do not work around the privacy request.
HUNTER_HTTP_5xxYesRetry after Hunter recovers.
HUNTER_VERIFICATION_UNAVAILABLEYesRetry later; the remote mail server prevented verification.
RESPONSE_TOO_LARGENoNarrow the page or filters; responses are capped at 5 MiB.
INVALID_PROVIDER_RESPONSE / EXECUTION_ERRORNoInspect provider compatibility without treating the run as successful.
NETWORK_ERRORYesRestore DNS, TLS, or Hunter connectivity and retry.

Error bodies are capped and sanitized. Credential-shaped provider fields are removed, exact API-key occurrences are replaced, and secret-like text is passed through the shared sensitive-data policy before output.

Example

Find approved technical decision-makers for one target account:

{
"operation": "domain_search",
"domain": "example.com",
"department": "it",
"seniority": "executive",
"decisionMaker": true,
"limit": 25,
"offset": 0
}

Expected normalized result:

{
"status": "success",
"operation": "domain_search",
"data": {
"domain": "example.com",
"organization": "Example"
},
"items": [
{
"value": "ada@example.com",
"type": "personal",
"confidence": 97,
"position": "CTO"
}
],
"count": 1,
"total": 1,
"hasMore": false,
"httpStatus": 200,
"attempts": 1
}

Downstream workflows should review confidence, verification status, legal basis, suppression rules, and outreach consent before sending any message.

Notes

  • Pagination: domain_search exposes exactly one Hunter offset page per execution. Continue only with the returned nextOffset; the connector does not hide multiple credit-consuming requests inside one run.
  • Rate limits: Hunter currently documents 15 requests per second and 500 per minute for Domain Search and Email Finder, and 10 per second and 300 per minute for Email Verifier. Plan credits and endpoint access are separate limits.
  • API limits: domain pages are capped at 100 results and provider sources are currently capped at 20 per email. ValkyrAI additionally caps the response body at 5 MiB and local offset at 10,000.
  • Idempotency: all operations are read-only, but many can consume provider credits. Repeating identical calls can still have billing or quota effects.
  • Destructive behavior: none. The module does not create leads, campaigns, sequences, tags, webhooks, or send email.
  • Privacy: HTTP 451 is a durable stop signal. Do not retry it, substitute another provider to evade it, or retain disallowed personal data.
  • Output handling: enrichment is classified restricted; do not place results in public logs, public ContentData, or unprotected workflow state.
  • External verification: deterministic local tests cover request paths, credential placement/redaction, validation, pagination, retry behavior, verifier 202/222, response bounds, identity checks, and metadata discovery. Live Hunter roles, plan access, credits, data accuracy, SMTP behavior, and billing require separately authorized credentials and are not exercised in repository tests.
  • Functional references: n8n Hunter integration and Hunter API v2.