> ## Documentation Index
> Fetch the complete documentation index at: https://deepline.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# DiscoLike: Generate Candidate Contacts

> Generate candidate contacts matching your target persona at each company domain by researching the open web. Includes SDK V2 examples, schemas, and cost.

Generate candidate contacts matching your target persona at each company domain by researching the open web.

> [!NOTE]
>
> Tool ID: `discolike_generate_candidate_contacts`

## Run this action

Use the TypeScript SDK for one call. Use `ctx.tools.execute(...)` inside a Play for durable calls, scheduled calls, or CSV processing.

```ts theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
import { Deepline } from 'deepline';

const deepline = await Deepline.connect();
const result = await deepline.tools.execute(
  'discolike_generate_candidate_contacts',
  {
    "icp_text": "example",
    "domains": [
      "example.com"
    ]
  },
);

console.log(result.toolResponse.raw);
```

### CLI

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline tools execute discolike_generate_candidate_contacts --input '{
  "icp_text": "example",
  "domains": [
    "example.com"
  ]
}' --json
```

## Example response

The SDK returns this shape at `result.toolResponse.raw`. The example values illustrate the response.

```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
{
  "data": {
    "status": "in_progress"
  }
}
```

Use `deepline describe discolike_generate_candidate_contacts --json` for the latest machine-readable contract.

## Input reference

Dispatch a BYOK DiscoGen task that discovers contacts at each given company domain. Builds a `test_discogen_prompt.py`-style multi-row query ("Find X. Return A | B | C per line.") from the ICP text. DiscoGen auto-detects the response format and runs the query per-domain with web search enabled. Poll GET /discogen/status/\{task\_id} for results. BYOK: uses the caller's own LLM and search provider keys. DiscoLike does not bill per contact returned. Results may include hallucinated personas - callers must treat `email`, `linkedin_url`, and other identifying fields as candidate data until validated.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `payload.icp_text` | `string` | Yes | — | — |
| `payload.domains` | `array` | Yes | — | — |
| `payload.context_mode` | `"website" \| "profile" \| "domain"` | No | `"website"` | Allowed: `website`, `profile`, `domain`. |
| `payload.integration_id` | `string` | No | — | — |
| `payload.search_provider_id` | `string` | No | — | — |
| `payload.search_context_size` | `"low" \| "medium" \| "high"` | No | `"low"` | Allowed: `low`, `medium`, `high`. |
| `payload.max_contacts_per_domain` | `integer` | No | `10` | — |
| `payload.max_company_records` | `integer` | No | — | — |
| `payload.full_domains` | `array` | No | — | — |
| `payload.partial_domains` | `array` | No | — | — |
| `payload.initial_contact_counts` | `record` | No | — | — |
| `payload.poll_interval_ms` | `integer` | No | `5000` | Polling interval used while waiting for DiscoGen contact generation to finish. Defaults to 5000 ms. Minimum: 1000. Maximum: 30000. |
| `payload.max_wait_ms` | `integer` | No | `120000` | Maximum time to wait for terminal DiscoGen contact generation results. Defaults to 120000 ms. Minimum: 1000. Maximum: 300000. |

<details>
  <summary>Show raw input schema</summary>

  ### Input JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "Dispatch a BYOK DiscoGen task that discovers contacts at each given company domain. Builds a `test_discogen_prompt.py`-style multi-row query (\"Find X. Return A | B | C per line.\") from the ICP text. DiscoGen auto-detects the response format and runs the query per-domain with web search enabled. Poll GET /discogen/status/{task_id} for results. BYOK: uses the caller's own LLM and search provider keys. DiscoLike does not bill per contact returned. Results may include hallucinated personas - callers must treat `email`, `linkedin_url`, and other identifying fields as candidate data until validated.",
    "properties": {
      "icp_text": {
        "type": "string"
      },
      "domains": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "context_mode": {
        "type": "string",
        "default": "website",
        "enum": [
          "website",
          "profile",
          "domain"
        ]
      },
      "integration_id": {
        "type": [
          "string",
          "null"
        ]
      },
      "search_provider_id": {
        "type": [
          "string",
          "null"
        ]
      },
      "search_context_size": {
        "type": "string",
        "default": "low",
        "enum": [
          "low",
          "medium",
          "high"
        ]
      },
      "max_contacts_per_domain": {
        "type": "integer",
        "default": 10
      },
      "max_company_records": {
        "type": [
          "integer",
          "null"
        ]
      },
      "full_domains": {
        "type": [
          "array",
          "null"
        ],
        "items": {
          "type": "string"
        }
      },
      "partial_domains": {
        "type": [
          "array",
          "null"
        ],
        "items": {
          "type": "string"
        }
      },
      "initial_contact_counts": {
        "type": [
          "object",
          "null"
        ],
        "additionalProperties": {
          "type": "integer"
        }
      },
      "poll_interval_ms": {
        "type": "integer",
        "description": "Polling interval used while waiting for DiscoGen contact generation to finish. Defaults to 5000 ms.",
        "default": 5000,
        "minimum": 1000,
        "maximum": 30000
      },
      "max_wait_ms": {
        "type": "integer",
        "description": "Maximum time to wait for terminal DiscoGen contact generation results. Defaults to 120000 ms.",
        "default": 120000,
        "minimum": 1000,
        "maximum": 300000
      }
    },
    "required": [
      "icp_text",
      "domains"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Output reference

Standard tool result payload.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `result.data` | `object` | Yes | — | Final DiscoLike DiscoGen contact-generation task result returned by Deepline after synchronous polling. |
| `result.data.status` | `"in_progress" \| "completed" \| "failed" \| "cancelled"` | Yes | — | Task status. Allowed: `in_progress`, `completed`, `failed`, `cancelled`. |
| `result.data.progress` | `integer` | No | — | Progress percentage. Minimum: 0. Maximum: 100. |
| `result.data.results` | `record` | No | — | Generated candidate contact rows keyed by company domain. |
| `result.data.interim_results` | `record` | No | — | Partial generated candidate contact rows keyed by company domain. |
| `result.data.estimated_cost` | `number` | No | — | Provider-side BYOK model/search cost estimate when returned by DiscoLike. This is not a Deepline-managed per-contact charge. |
| `result.meta` | `object` | No | — | Additional response metadata (status, paging). |

<details>
  <summary>Show raw output schema</summary>

  ### Output JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "Standard tool result payload.",
    "properties": {
      "data": {
        "type": "object",
        "description": "Final DiscoLike DiscoGen contact-generation task result returned by Deepline after synchronous polling.",
        "properties": {
          "status": {
            "type": "string",
            "description": "Task status.",
            "enum": [
              "in_progress",
              "completed",
              "failed",
              "cancelled"
            ]
          },
          "progress": {
            "type": "integer",
            "description": "Progress percentage.",
            "minimum": 0,
            "maximum": 100
          },
          "results": {
            "type": "object",
            "description": "Generated candidate contact rows keyed by company domain.",
            "additionalProperties": true
          },
          "interim_results": {
            "type": "object",
            "description": "Partial generated candidate contact rows keyed by company domain.",
            "additionalProperties": true
          },
          "estimated_cost": {
            "type": "number",
            "description": "Provider-side BYOK model/search cost estimate when returned by DiscoLike. This is not a Deepline-managed per-contact charge."
          }
        },
        "required": [
          "status"
        ],
        "additionalProperties": true
      },
      "meta": {
        "type": "object",
        "description": "Additional response metadata (status, paging).",
        "additionalProperties": true
      }
    },
    "required": [
      "data"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Deepline cost

* Pricing model: `provider_usage` (provider usage).
* Estimated Deepline credits: `0.1` per pricing unit.

## Related documentation

* [DiscoLike provider guide](https://deepline.com/docs/providers/discolike/guide.md)
* [SDK V2 quickstart](https://deepline.com/docs/sdk-v2/quickstart.md)
* [SDK reference](https://deepline.com/docs/sdk-v2/sdk-reference.md)
* [Run tools across a CSV](https://deepline.com/docs/sdk-v2/batch-csv.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.