Produce a judgment-heavy brief on one account, buyer, or business question. Huntr selects sources, gathers live data, and synthesizes an answer.
When to use it
- Pre-meeting account plan
- Buyer research before outreach
- Competitive or diligence question with clear scope
- Buying-signal investigation with date ranges
When not to use it
- Lists of hundreds of accounts
- Per-row enrichment of a CSV
- “Find every VP Sales and their email”
Use Outbound pipeline or Account penetration instead. Bulk research requests return 422 BULK_ENRICHMENT_REQUIRED — not charged.
Endpoint
| Mode | Endpoint | Cost |
|---|
| Sync | POST /research | Per completed run — tier in GET /pricing |
| Async | POST /research + callback_url | Same; returns 202 immediately |
| Poll | GET /research/{requestId}/status | Free |
Sync request
curl --request POST \
--url "${HUNTR_BASE_URL}/research" \
--header 'content-type: application/json' \
--header "x-api-key: ${HUNTR_API_KEY}" \
--data '{
"prompt": "We sell fraud-prevention APIs to fintech platforms. Research Stripe'\''s enterprise initiatives from June 2025 through June 2026. Summarize partnership angles, likely economic buyers, and deal risks.",
"tier": "standard"
}'
Write prompts that work
Include:
- Your context — what you sell and why you’re researching
- One primary target — company, person, or small team
- The decision the answer should support
- Specific facts you need
- Date ranges for time-sensitive work
Weak: “Tell me about Stripe.”
Strong: “We sell fraud-prevention APIs to fintech platforms. Research Stripe’s enterprise motion from June 2025–June 2026 and identify partnership angles and risks.”
Choose a tier
| Tier | Use when |
|---|
lite | Public-web research — search, news, pages |
standard | Company research + tech, contact, page enrichment |
deep | People and contact research — profiles, email finding, LinkedIn |
Call GET /pricing for current tier prices and model overrides.
Structured output
Pass a flat schema when downstream code needs predictable keys:
{
"prompt": "Account plan for Linear as an engineering productivity vendor...",
"tier": "deep",
"schema": {
"summary": "Concise account summary",
"economic_buyer": "Likely economic buyer title and name if found",
"recommended_angles": "Partnership or outreach angles",
"risks": "Deal risks or blockers"
}
}
- Keys = top-level result fields
- Values = descriptions of what each field should contain
- Not JSON Schema
Responses may include per-field confidence: live, model, or not_found.
curl --request POST \
--url "${HUNTR_BASE_URL}/research" \
--header 'content-type: application/json' \
--header "x-api-key: ${HUNTR_API_KEY}" \
--data '{
"prompt": "Research Notion'\''s enterprise security posture and who owns buying decisions.",
"tier": "deep",
"callback_url": "https://your-server.com/webhooks/huntr"
}'
Returns 202 with request_id and poll_url. Results are stored for 1 hour.
Engineering notes
async function accountBrief(company, userContext) {
const res = await fetch(`${BASE}/research`, {
method: "POST",
headers: { "content-type": "application/json", "x-api-key": KEY },
body: JSON.stringify({
prompt: `${userContext} Research ${company} for an upcoming enterprise meeting. Cover leadership priorities, recent initiatives, and practical conversation angles.`,
tier: "standard",
schema: {
summary: "One paragraph account summary",
angles: "Bullet-style outreach angles",
risks: "Deal risks",
},
}),
});
if (res.status === 422) {
const err = await res.json();
if (err.code === "BULK_ENRICHMENT_REQUIRED") throw new Error("Use outbound pipeline, not research");
}
if (!res.ok) throw new Error(await res.text());
return res.json();
}
Data confidence
Check _data_source on free-text results: live, mixed, or model. Treat model-only fields with lower confidence — especially emails, phones, and URLs.
Failed runs
Failed research returns price: 0. Handle 500 with retry; do not assume a charge.
Hybrid with direct endpoints
For one account you can combine:
company-tech-stack + company-jobs — cheap deterministic signals
/research — synthesis and narrative only on accounts that pass your threshold
Do not call /research per row in a list.
Next step