Reliable, cost-efficient bulk enrichment โ a live research API. Enrich leads & companies with live research across LinkedIn and JS-heavy pages, returned as high-quality, validated JSON. REST API + MCP server.
Base URL: https://research-agent.net
๐ช๐บ Built & hosted in Europe ยท GDPR-compliant
All requests require an API key passed via header:
X-Auth-Token: your_api_key_here
Get your API key from the dashboard. For MCP connections, use X-API-Key header instead.
POST /research and POST /agents/{id}/run cost base credits by model ร a depth multiplier. Base: 1 (Gemini 3.1 Flash Lite — default — & Gemini 2.5 Flash Lite), 2 (Gemini 2.5 Flash), 6 (Gemini 3.5 Flash); BYOK/other = 1. Depth multiplier: quick/standard = ร1, deep = ร3 (deep does far more work). E.g. a deep run on Gemini 3.5 Flash = 6 ร 3 = 18 credits; a default standard run = 1 credit.POST /build-list costs the model's credits per returned row โ 0 rows returned = freeX-OpenRouter-API-Key headerControl how deep the agent researches. Available on /research, /agents/{id}/run, and /agents/{id}/bulk-run.
| quick | Fast lookup. 1-3 tool calls, ~45s timeout, 8 iterations max. Best for simple questions, basic company info, quick fact checks. |
| standard | Balanced (default). 3-8 tool calls, ~2min timeout, 25 iterations max. Good for most research tasks. |
| deep | Thorough research. 8-15 tool calls, ~5min timeout, 40 iterations max. Cross-references multiple sources, checks secondary pages. Best for detailed company profiles, competitive analysis. |
You can also set max_iterations (1-50) directly to override the depth preset.
Run a deep research query with web search, news, and scraping. Returns structured or free-text output. Costs 1-6 credits depending on the model.
Parameters (query string or JSON body)
Accepts both query string params and JSON body. Use JSON body for long prompts and schemas (query strings have URL length limits).
| prompt | Required. The research instruction. |
| model | OpenRouter model ID. Included: google/gemini-3.1-flash-lite (default), google/gemini-3.5-flash, google/gemini-2.5-flash-lite, google/gemini-2.5-flash. With BYOK: any OpenRouter model. |
| schema | JSON schema for structured output. Accepts a JSON object or a JSON string. |
| depth | Research depth: quick (fast, 1-3 tools, ~45s), standard (default, balanced), or deep (thorough, 8-15 tools, up to 5min). |
| max_iterations | Override max agent iterations (1-50). Overrides depth preset if both are set. |
| temperature | 0.0-2.0. Default: 0.1 |
Headers
| X-Auth-Token | Required. Your API key. |
| X-OpenRouter-API-Key | Optional. BYOK โ use any model. Scale plan: no credits deducted. |
# Quick lookup โ minimal params curl -X POST "https://research-agent.net/research" \ -H "X-Auth-Token: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "prompt": "What does Stripe do and how many employees do they have?", "depth": "quick" }' # Full example โ all params curl -X POST "https://research-agent.net/research" \ -H "X-Auth-Token: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Research Stripe Inc. Find their ICP, tech stack, total funding, and recent news.", "model": "google/gemini-2.5-flash", "depth": "deep", "max_iterations": 35, "temperature": 0.1, "schema": { "type": "object", "properties": { "company": { "type": "string", "description": "Company name" }, "icp": { "type": "string", "description": "Ideal customer profile" }, "tech_stack": { "type": "array", "items": { "type": "string" } }, "funding_total": { "type": "string", "description": "Total funding raised" }, "recent_news": { "type": "array", "items": { "type": "string" } } } } }'
Response
{
"output": {
"company": "Stripe",
"icp": "Internet businesses needing payment infrastructure...",
"tech_stack": ["Ruby", "Go", "React", "AWS"],
"funding_total": "$8.7B",
"recent_news": ["Stripe launches new billing product..."]
},
"model_used": "google/gemini-2.5-flash",
"execution_time_seconds": 42.1
}
Turn just an ICP into a verified account or lead list. The agent finds real, ICP-matched companies (or companies + a decision-maker), researches each one live across the web and LinkedIn, and returns validated JSON rows. Batches to reach your target count, deduped by domain. Billed per returned row (only successful rows — 0 rows = free).
Parameters (JSON body)
| icp | Required. Free-text description of your ideal customer profile. |
| list_type | accounts (companies, default) or leads (companies + a decision-maker with role & LinkedIn URL). |
| count | Target number of rows, 1–5000. Default 20. Billed per returned row (credits_per_row in the response); if your balance is lower, the list is auto-capped to what you can afford and flagged via capped_to_balance. |
| columns | Optional array of extra research questions filled per row, e.g. ["who they sell to","open sales roles"]. |
| region | Optional region / market constraint, e.g. DACH. |
| model | OpenRouter model ID. Default google/gemini-3.1-flash-lite. Higher-quality lists: google/gemini-2.5-flash. |
| qualify | Default true. Runs a second, conservative ICP-qualification pass that drops off-ICP rows (the response reports how many via qualified_out). Set false to keep every candidate. |
| max_iterations | Optional per-batch agent iteration cap. |
Headers
| X-Auth-Token | Required. Your API key. |
| X-OpenRouter-API-Key | Optional. BYOK — use any model. Scale plan: no credits deducted. |
# Build a 25-lead list from an ICP
curl -X POST "https://research-agent.net/build-list" \
-H "X-Auth-Token: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"icp": "B2B SaaS companies in DACH selling sales or marketing software to mid-market (50-250 employees)",
"list_type": "leads",
"count": 25,
"region": "DACH",
"columns": ["who they sell to", "any open sales roles"]
}'
Response
{
"count": 25,
"requested": 25,
"list_type": "leads",
"model_used": "google/gemini-2.5-flash",
"credits_charged": 50,
"results": [
{
"company": "Dealfront",
"domain": "dealfront.com",
"icp_match": true,
"icp_match_reason": "DACH-based B2B SaaS, ~250 employees, sales/marketing software.",
"description": "B2B sales intelligence and lead-gen platform.",
"person_name": "Mike Dry",
"role": "VP of Customer Success",
"linkedin_url": "https://www.linkedin.com/in/mikedry/",
"who_they_sell_to": "B2B sales and marketing teams",
"any_open_sales_roles": "",
"source_urls": ["https://www.dealfront.com", "https://www.linkedin.com/in/mikedry/"]
}
]
}
List all your agents.
Response
{ "agents": [{ "id": "uuid", "name": "...", "model": "...", "input_variables": [...], "is_active": true, ... }] }
Create a new agent.
Request body (JSON)
{
"name": "Company Enrichment",
"description": "Enrich company data",
"prompt_template": "Research {{company_name}} at {{website}} and find their ICP, tech stack, and funding.",
"input_variables": ["company_name", "website"],
"model": "google/gemini-2.5-flash",
"temperature": 0.1,
"output_schema": null
}
Get agent details by ID.
Update agent configuration. Only provided fields are changed.
Permanently delete an agent.
Execute an agent with input variables. Costs the agent's per-model credits (1-6).
Request body (JSON) โ input variables + optional depth/max_iterations
# Standard depth (default) { "company_name": "Stripe", "website": "https://stripe.com" } # Quick lookup { "company_name": "Stripe", "website": "https://stripe.com", "depth": "quick" } # Deep research { "company_name": "Stripe", "website": "https://stripe.com", "depth": "deep" }
Response
{
"agent_id": "uuid",
"agent_name": "Company Enrichment",
"output": { "icp": "...", "tech_stack": [...] },
"execution_time_seconds": 12.5,
"request_id": "A1B2C3D4"
}
List past runs for an agent.
Query parameters
| limit | Max results (default 50, max 200) |
List available pre-built agent templates. Each template comes in lean (quick) and standard variants.
Pre-built agents for common GTM use cases. Each comes in two variants: Lean (quick depth, minimal output, fast) and Standard (deeper research, richer output). Create from template via POST /agents with template_key.
| Template | Depth | Use Case |
| company_enrichment_lean | quick | Fast firmographics โ industry, HQ, size. Bulk pipelines. |
| company_enrichment | standard | Full profile โ funding, tech stack, executives. CRM enrichment. |
| icp_check_lean | quick | Quick ICP score + one-line reasoning. Filtering large lists. |
| icp_check | standard | Detailed ICP scoring with signals. Account prioritization. |
| buying_signals_lean | quick | Signal strength + top 3 signals. Daily bulk monitoring. |
| buying_signals | standard | Full signal detection with sources and relevance scoring. |
| lead_qualifier_lean | quick | Quick score + next step. High-volume inbound filtering. |
| lead_qualifier | standard | Full qualification โ seniority, title, reasoning. |
| competitor_analysis_lean | quick | Top 3 competitors + positioning. Sales battlecards. |
| competitor_analysis | deep | Full competitive landscape โ strengths, weaknesses, trends. |
| news_monitor_lean | quick | Top headlines + sentiment. Daily account monitoring. |
| news_monitor | standard | Categorized news digest with sources and key takeaway. |
| outbound_personalization_lean | quick | One hook + one pain point. Bulk cold outreach prep. |
| outbound_personalization | standard | Pain points, hooks, competitor context, talking points. |
| pre_call_briefing | deep | Full account briefing โ news, decision makers, talking points. |
Run an agent on hundreds of inputs asynchronously. Items execute concurrently (up to 5 at a time). Poll for progress and retrieve results when done.
Submit a bulk run job. Costs the agent's per-model credits per item. Max 1000 items.
Request body (JSON)
{
"items": [
{ "company_name": "Stripe", "website": "https://stripe.com" },
{ "company_name": "Notion", "website": "https://notion.so" },
{ "company_name": "Linear", "website": "https://linear.app" }
],
"depth": "deep"
}
Response
{
"job_id": "uuid",
"total_items": 3,
"status": "running"
}
List all bulk run jobs for an agent. Returns job_id, status, progress counts, timestamps.
Get bulk job status and progress.
Response
{
"id": "uuid",
"agent_id": "uuid",
"status": "running",
"total_items": 100,
"completed_items": 45,
"failed_items": 2,
"created_at": "2026-03-04T12:00:00Z",
"completed_at": null
}
Get individual item results (paginated).
Query parameters
| offset | Skip N items (default 0) |
| limit | Max items to return (default 50, max 100) |
Response
{
"job_id": "uuid",
"offset": 0,
"items": [
{
"id": "uuid",
"input_variables": { "company_name": "Stripe", "website": "https://stripe.com" },
"status": "completed",
"output": { "icp": "...", "tech_stack": [...] },
"execution_time_seconds": 11.2
}
]
}
Cancel a running bulk job. Completed items are kept.
Get current credit balance and recent transactions.
List available credit packs with prices.
Create a Stripe checkout session to purchase credits.
Get current user identity.
{ "id": "uuid", "email": "user@example.com", "display_name": "John", "created_at": "..." }
Get usage statistics.
| days | Lookback period in days (default 30) |
Regenerate your API key. Old key is deactivated.
Connect via MCP (Model Context Protocol) at https://research-agent.net/mcp
Auth: pass API key as X-API-Key header.
Research & Enrichment
| research | Deep multi-source research query (1-6 credits by model) |
| search_web | Quick web search without full agent loop (1 credit) |
| scrape_page | Scrape and summarize a URL (1 credit) |
| enrich_company | Structured company enrichment โ industry, size, funding, tech stack (2 credits) |
| find_buying_signals | Detect funding rounds, hires, launches, expansions (2 credits) |
| score_icp_fit | Score company against ICP criteria, 1-10 with reasoning (2 credits) |
| enrich_leads_bulk | Batch enrichment โ creates agent, submits bulk run (by model, per lead) |
Agent Management
| list_agents | List all configured agents |
| get_agent | Get agent details by ID |
| create_agent | Create agent with prompt template and optional schema |
| create_agent_from_template | Create from pre-built template (ICP check, enrichment, etc.) |
| update_agent | Update agent configuration |
| delete_agent | Delete an agent |
| run_agent | Execute agent with input variables (by model, 1-6) |
| list_agent_runs | List past runs for an agent |
| list_templates | List available agent templates |
Bulk Runs
| bulk_run_agent | Submit bulk job (per item, by model) |
| get_bulk_run_status | Check bulk job progress |
| get_bulk_run_results | Get results (paginated) |
| cancel_bulk_run | Cancel a running bulk job |
| list_bulk_runs | List all bulk jobs for an agent |
Account & Billing
| check_credits | Check credit balance and transactions |
| get_usage | Usage statistics (requests, costs, daily breakdown) |
| get_me | Current user identity |
| list_models | Available AI models and default |
| get_plans | Pricing plans with BYOK info |