Crafting Outreach

Generate evidence-backed email and LinkedIn messages personalized for specific contacts.

Generate outreach

The outreach endpoint generates a message grounded in real evidence from the prospect's public filings and earnings calls. Every request consumes 1 credit.

curl -X POST https://dealsurface.com/api/v2/outreach \
  -H "Authorization: Bearer $DEALSURFACE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "product_id": 12,
    "ticker": "TRV",
    "platform": "email"
  }'

Product defaults and template selection

Omit template_key to use the product's effective default. Template listing is free and requires the same read + outreach scopes as template-aware generation. Entries report their type and credit cost: deterministic static messages are free, while generation prompts and static messages with an AI hook cost one credit on success. Creation, editing, product assignment, and default changes are managed under Outreach → Templates in the app, not through API v2.

curl "https://dealsurface.com/api/v2/outreach/templates?product_id=12" \
  -H "Authorization: Bearer $DEALSURFACE_API_KEY"

Use system_default to explicitly select the built-in template. Successful responses includetemplate_used with the exact key, version, type, source, and resolution path.

Platform, voice, and length

Choose the platform for the message. Voice, structure, and length come from the selected template's instructions, so write them there (for example “four short lines, under 50 words, peer to peer”). The retired tone and length fields are ignored; requests that still send them get a deprecation_notice in the response and a Deprecation header. A future release will reject them, so remove them now.

Platform

  • email — includes subject line and body
  • linkedin — concise subject/headline and short-form message

Targeting a specific stakeholder

There are three ways to personalize outreach for a specific contact:

1. Pass the full stakeholder object

If you already have a stakeholder from the /dealmap endpoint, pass it directly:

{
  "product_id": 12,
  "ticker": "TRV",
  "platform": "email",
  "selected_lead": {
    "full_name": "Jane Smith",
    "title": "Chief Information Officer",
    "level": "c_suite",
    "linkedin_url": "https://linkedin.com/in/janesmith"
  }
}

2. Use a lead selector

Let the API resolve the best stakeholder from the cached DealMap:

{
  "product_id": 12,
  "ticker": "TRV",
  "platform": "email",
  "lead_selector": { "level": "c_suite" }
}
{
  "product_id": 12,
  "ticker": "TRV",
  "platform": "email",
  "lead_selector": { "full_name": "Jane Smith", "level": "c_suite" }
}
{
  "product_id": 12,
  "ticker": "TRV",
  "platform": "email",
  "lead_selector": { "stakeholder_role": "Economic Buyer" }
}

Selector resolution

If the selector can't find a matching stakeholder (e.g., no C-suite contacts or no one with the requested role on the DealMap), the outreach is still generated but without personalization. Check the selected_lead_note field in the response for a message about what happened.

3. No lead targeting

Omit both fields to generate generic outreach for the company without personalizing for a specific contact.

Verifying evidence sources

The response includes used_excerpt_ids — the evidence excerpts that grounded the message. Cross-reference with the excerpts endpoint to verify the claims in the generated copy.

Crafting Outreach | DealSurface Docs