Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

How-to guide

How to Research an Account Before a Call in Gemini CLI

Add one MCP entry to settings.json, ask Gemini CLI about a company domain, and get a one-page call brief for 13 records. Sizing the buying committee costs 0.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

TL;DR

  • You connect LeadOcean to Gemini CLI once, then pull a company profile, its tech stack and its senior people from one domain.
  • It takes about 20 minutes the first time and about 8 after that.
  • A full run spends 13 LeadOcean records: 1 for the company, 10 for the people search, 2 for enriching the contacts you will speak to. Counting is free.

Prerequisites

  • A LeadOcean account. Start free: no card, 1,000 records one-off.
  • Gemini CLI installed and signed in. Its MCP docs, September 2026, say OAuth sign-in for a remote server needs a local browser. It will not work over a plain SSH session or in a container without one.
  • Optional, for the script in Step 6: $LEADOCEAN_API_KEY in your shell and curl.
  • The domain of the account you are about to call. Use the company website domain, not the company name.

You paste no API key into Gemini CLI. The LeadOcean MCP server uses OAuth sign-in.

Step 1: Add LeadOcean to Gemini CLI

Register the server with one command, then sign in. Server details are on the LeadOcean MCP page. The short version:

bash
gemini mcp add --transport http --scope user leadocean https://api.leadocean.io/mcp

With --scope user that writes the entry to ~/.gemini/settings.json. Without it, the default scope is the project, in .gemini/settings.json. You can also edit the file by hand. Gemini CLI reads streamable HTTP servers from the httpUrl field:

json
{
  "mcpServers": {
    "leadocean": {
      "httpUrl": "https://api.leadocean.io/mcp"
    }
  }
}

Start gemini, then run /mcp auth leadocean and approve the sign-in in your browser. Run /mcp to confirm the server is connected. It exposes 13 tools, and seven are free.

Leave trust at its default of false. With trust set to true, Gemini CLI skips the confirmation on every tool call from that server, and confirmation is your guard on record spend.

Step 2: Pull the company profile

Start with the account itself. One domain in, one company record out, for 1 record. A domain we hold nothing for is a miss and costs nothing.

text
Use the leadocean MCP server only. Look up acme.com with
leadocean_get_company. Give me headcount, HQ country, industry, last
funding round and the detected tech stack (pass slim false so the tech
list comes back). If a field is null, say
"not in LeadOcean". Do not guess.

Swap acme.com for your target. The tool takes domain or linkedin_url, and the record comes back as leadocean.company.v1.

Funding and revenue are thin for small private companies. Expect nulls there. The tech stack comes from crawled websites, about 7.8M of them, and every entry has a last detected date. Over MCP the list is dropped by default and only the count stays, so ask for slim: false. Check the dates before you say "I see you use X" on a call.

Step 3: Size the buying committee, then list it

Count first. Counting costs 0 records, so you can tune the filters as often as you like.

text
How many C-Team, VP and Director people work at acme.com? Count only.
Do not pull anyone.

Gemini CLI asks you to confirm, then calls leadocean_count_leads with these arguments:

json
{
  "domain": ["acme.com"],
  "jobLevel": ["C-Team", "VP", "Director"],
  "facets": false
}

When the number looks right, list them. Cap the pull so the cost is known up front:

text
Call leadocean_search_leads for the same filters with limit 10.
Show name, title, job function and whether an email is on file.
Do not enrich anyone yet. Tell me how many records this spent.

The tool call is a flat filter set:

json
{
  "domain": ["acme.com"],
  "jobLevel": ["C-Team", "VP", "Director"],
  "limit": 10
}

This spends up to 10 records, one per person returned. Add jobFunction, for example Sales & Business Development, to narrow to the team you sell to.

Step 4: Enrich the two people you will speak to

Search rows carry a person_id. Enrich only the people on your invite, not the whole list:

text
Enrich the VP of Sales and the Director of Operations from that list
with leadocean_get_lead using their person_id. Show title, level, function
the work email with its email_status, and their past roles from the
career history. Tell me what the call cost.

Each hit costs 1 record, so this step spends 2. Since October 2026 the answer also carries career history in resume_data: past roles with dates, education and certifications when we hold them. A person we hold nothing for costs nothing. Read email_status before you send a follow-up, because bounced emails are not refunded.

Step 5: Turn the output into a call brief

Everything so far is in the terminal scrollback. Ask Gemini CLI to write it to a file in your working directory so you can open it before the call.

text
Write account-brief.md using only the tool results above. Sections:
1. Snapshot: name, domain, headcount, HQ, industry, last funding.
2. Stack: detected technologies with last detected date.
3. Who is on the call: title, level, function.
4. Five discovery questions based on the stack and the org size.
5. Not checked: news, hiring, intent and CRM history.
Write "not in LeadOcean" for any missing field.

The last section matters. LeadOcean holds firmographics, website technology and people. It does not hold news, call transcripts, intent signals or your CRM history. Keep those out of the brief rather than letting the model fill the gap.

Re-run Steps 3 and 4 the day before the call if the invite list changes. The count is free, and the search and enrich calls spend records again, so cap them. Save the brief next to your call notes so the next rep starts from it.

Step 6: Run the same research from a script

Gemini CLI calls the same API you can call yourself. Use this when you want the brief for 30 accounts in a loop instead of one session. Filters are arrays and the body is flat JSON.

bash
curl -s -X POST https://api.leadocean.io/v1/companies/enrich \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain": "acme.com"}'

curl -s -X POST https://api.leadocean.io/v1/people/search \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain": ["acme.com"], "jobLevel": ["C-Team", "VP", "Director"], "limit": 10}'

To read the whole roster instead, use GET /v1/companies/acme.com/people. It bills one record per person returned and stops at 10,000 rows.

What you get

The count in Step 3 is a live result. We ran it on 2026-10-01 through the LeadOcean MCP server, with acme.com as the domain:

json
{
  "total": 15,
  "totalIsExact": true,
  "credits": 0,
  "defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all), which is this tool's default. Pass emailStatus, hasEmail or reachable to choose for yourself.",
  "hasMore": true
}

That is 15 C-Team, VP and Director people with a verified or catch-all email. It cost 0 records. It is not everyone we hold at that domain.

The company record from Step 2 comes back in the response shape from the API reference. These are placeholder values, not a real company:

jsonc
{
  "success": true,
  "data": {
    "company_data": { /* name, domain, industries, headcount, HQ for Acme at acme.com */ },
    "company_detected_technologies": [ /* product, category, last detected date */ ],
    "company_metrics": { /* completion_score, marketability_score */ },
    "meta": { "schema": "leadocean.company.v1" }
  },
  "meta": { "credits": 1 }
}

Search rows show flags such as has_email, not the address. Enrich with reveal_email set to true in the API, or leadocean_get_lead in Gemini CLI, returns the address at no extra record.

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-key header, or the MCP sign-in was not approved.Check $LEADOCEAN_API_KEY, or run /mcp auth leadocean again in Gemini CLI.
402The 1,000 free records are spent.Check leadocean_get_account, or move to Solo at $97 a month.
429Above your plan's rate on one key (5 requests a second on Free, 200 on Agency), or a fair-use window reached.Honour Retry-After and retry. Add a short delay between calls.
Empty people resultsAn enum value is not an exact string, such as VP of Sales for jobLevel.Call leadocean_list_enum_values and copy the value. Use title for free-text job titles.
404 on the companyWe hold no company for that domain. A 404 costs nothing.Check the spelling, or try linkedin_url instead of domain.
Export refusedA bulk pull is past 50,000 rows a request or 500,000 a day.Split the pull into smaller exports across days.

FAQ

How many records does one account cost?

A full run costs 13: 1 company, 10 people, 2 enrichments. Skip the people search and a quick profile costs 1. Counts and filter lookups are free.

Does it include news or recent funding events?

No. The company record carries the last funding round and its date when we hold one, but LeadOcean has no news feed or intent data. Check those separately and mark them in the brief.

Can I research a company from its name?

Not directly. Company lookup takes domain or linkedin_url. With only a name, search companies first, then use the domain that comes back.

Does Gemini CLI ask before it spends records?

By default it asks you to confirm each tool call from an MCP server. Check the arguments before you approve: the domain, the levels and the limit. A wrong limit is the usual way to spend more than you planned. The same recipe runs in Codex, Windsurf and VS Code.

Research your next account in minutes, free

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →