Skip to main content
POST
/
api
/
v2
/
research
/
deep
Deep Research
curl --request POST \
  --url https://api.openfunnel.dev/api/v2/research/deep \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <x-api-key>' \
  --data '
{
  "domain": "usepylon.com",
  "activity_question": "Have they posted more than 5 SDR roles in the last 90 days?",
  "qualifier_question": "Has at least 5 SDRs/BDRs and a Sales Director",
  "timeframe_days": 90,
  "max_jobs_to_check": 25
}
'
{
  "domain": "<string>",
  "latency_ms": 123,
  "company": {
    "domain": "<string>",
    "name": "<string>",
    "linkedin_slug": "<string>",
    "employee_count": 123,
    "stage": "<string>",
    "industry": "<string>",
    "location": "<string>",
    "description": "<string>"
  },
  "activity": {
    "question": "<string>",
    "qualified": true,
    "answer": "<string>",
    "jobs_searched": 123,
    "jobs_matched": 123,
    "elapsed_ms": 123,
    "confidence": "<string>",
    "sources": [
      {
        "title": "<string>",
        "url": "<string>",
        "location": "<string>",
        "created": "<string>",
        "why_relevant": "<string>"
      }
    ],
    "error": "<string>"
  },
  "qualifier": {
    "question": "<string>",
    "qualified": true,
    "answer": "<string>",
    "detailed_reasoning": "<string>",
    "people_evaluated": 123,
    "elapsed_ms": 123,
    "sources": [
      {
        "name": "<string>",
        "title": "<string>",
        "linkedin_url": "<string>",
        "seniority": "<string>",
        "department": "<string>",
        "started_on": "<string>"
      }
    ],
    "error": "<string>"
  },
  "credits_consumed": 0
}

Headers

X-API-Key
string
required

Your OpenFunnel API key. Get one via Agent Auth.

Body

application/json

Inputs for a single Deep Research call.

Provide a domain plus at least one of:

  • activity_question - answered from the company's recent job postings (hiring intent, team expansion, JD-visible tech/vendor signals, count/spike signals, first-time hiring or first-time JD mentions).
  • qualifier_question - answered from LinkedIn people data (team composition, named teams/products, roles already filled, recent joiners, team-size checks, org shape).

Pick the param whose backing data source contains the answer; pass both when the question spans both signals. If the company domain is ambiguous or does not resolve, use POST /api/v1/account/lookup-companies first to find the normalized domain OpenFunnel has indexed.

domain
string
required

Company website domain to research (e.g. 'stripe.com'). Protocol and www. prefixes are stripped automatically. The domain is resolved to a LinkedIn org via the internal companies index before either stage runs. If this does not resolve, use Lookup Companies to find the normalized indexed domain.

Examples:

"stripe.com"

"notion.so"

"databricks.com"

activity_question
string | null

Answered from the company's recent job postings. Natural-language description of the activity signal to look for in open roles. Use this for hiring intent, team expansion, tech-stack or vendor adoption visible in JDs, geographic hiring footprint, count/spike questions, first-time hiring, first-time job-post mentions, or recent-hire intent. Examples: Is this company hiring SDRs based on recent job postings?, Do their job descriptions suggest they are building an AI customer support automation team?, Are they posting roles that mention Snowflake in at least 5 job descriptions in the last 90 days?, Have they posted more than 5 SDR roles in the last 90 days?, Are data engineer postings up 40% week over week?, Is this the first time their job postings mention Kubernetes?. Pass null or omit to skip this stage.

Example:

"Is this company hiring SDRs based on recent job postings?"

qualifier_question
string | null

Answered from LinkedIn people data (current-employee profiles). Natural-language criteria about who already works at the company or how the org is shaped. Use this for team composition, named teams/products, roles already filled, seniority coverage, team-size/count checks, recent joiners or start-date questions, and skill/team specialization. Examples: Which engineers are in the Dropbox Dash team?, New joiners in sales in the last 60 days, Do they have more than 2 customer support people?, Has at least 5 SDRs/BDRs and a Sales Director, Has a dedicated AppSec / product-security team. Pass null or omit to skip this stage.

Example:

"Which engineers are in the Dropbox Dash team?"

timeframe_days
integer
default:90

Lookback window (days) used by the activity stage. Has no effect when activity_question is omitted.

Required range: 1 <= x <= 365
max_jobs_to_check
integer
default:25

Upper bound on the number of recent job postings the activity stage scores with the LLM relevance pass. Higher values raise recall but add latency / token cost (each job is judged by an LLM call). Default 25 is tuned for interactive use; bump it for batch / data-extraction workflows where you want maximum recall. Has no effect when activity_question is omitted.

Required range: 1 <= x <= 200

Response

Research findings with natural-language answers and source evidence.

Top-level Deep Research response. Stage-level activity.sources and qualifier.sources contain cited evidence.

domain
string
required

Echo of the requested domain (normalized).

latency_ms
integer
required

End-to-end request latency in milliseconds.

company
CompanyInfo · object

Resolved firmographic context for the company. Null only if the domain could not be resolved (in which case the endpoint returns 404 instead).

activity
ActivityFinding · object

Findings for the activity question. Null when activity_question was not provided. Matching job source links are returned in activity.sources.

qualifier
QualifierFinding · object

Findings for the qualifier question. Null when qualifier_question was not provided. Matching people source links are returned in qualifier.sources.

credits_consumed
integer
default:0

Credits charged for this call. Charge is recorded in the background after the response is sent. 0 when the call failed before producing any findings.