Skip to main content

Overview

Before outreach, know what a prospect’s company has been doing. Shoal enrichment matches company names against 5,000+ tracked organizations and surfaces recent radar and signal events — filtered to where the org is the primary event owner, not just mentioned as a participant.

How It Works

  1. You provide a list of contacts (name + company)
  2. Each company is matched against Shoal’s tracked organizations
  3. Matched orgs get recent radar and signal events attached
  4. Events are filtered to primary ownership (not just mentioned as participant)

Quick Start (CLI)

Input Format

A JSON array where each object needs at minimum a company field. The name field is optional and passed through to the output.
contacts.json
This is the same file generated by shoal enrich --example.

Full Example Output

Below is a realistic enriched result for 4 of the contacts above. Each contact gets matched, shoal_org, and filtered radar/signal arrays appended.
Notice that:
  • Uniswap has 2 radar events where it is the eventOwner
  • Chainlink has 1 radar + 1 signal event — the signal includes a score and narrative summary
  • Aave has 1 radar event — even though Chainlink and Arbitrum are participants, Aave is the owner so it surfaces here
  • EigenLayer returned matched: false because it isn’t in Shoal’s tracked org database yet

Using with AI Agents (MCP)

You can build the same enrichment workflow through Shoal MCP by resolving each company with organization lookup tools, then fetching briefs or embedded event data for the matched orgs. Typical tool flow:
Works in Claude Code, Cursor, Windsurf — any MCP-compatible agent. Example prompt:
“Enrich these 20 contacts and tell me which companies have the most recent activity. Suggest an outreach angle for the top 3.”
See MCP Server for configuration.

API-Only Approach

For custom pipelines, use two API calls per company: resolve the name, then fetch events.
cURL
Python
JavaScript

Tips

  • The CLI deduplicates by company name automatically — duplicates don’t cost extra credits
  • Use --limit to control event depth vs credit cost (default 5)
  • Pipe to jq for filtering: shoal enrich contacts.json | jq '[.[] | select(.matched)]'
  • Combine with shoal brief org <id> for deeper dives on high-value prospects
  • For large lists (100+ contacts), consider the API-only approach with your own rate limiting