Okki Go — B2B Lead Prospecting & Outreach Skill
Helps sales teams and businesses rapidly discover and analyze potential customers and execute outreach campaigns via AI Agent, taking B2B customer acquisition efficiency to the next level.
For complete API parameter documentation and response schemas, see references/api-reference.md.
Quick Install
- - Install via OpenClaw platform
Option 1 — Open the OpenClaw web UI → Sidebar → Skills → Search "okki-go" → Click Install
Option 2 — Type in the OpenClaw chat: "Please run npx clawhub@latest install --force 'okki-go' to install this skill, then verify the installation was successful"
Routing
Use this skill when
- - User wants to find companies or customers
- User wants to get contact emails for a company — find decision makers
- User wants to search contacts by name/title/email
- User wants to send outreach or cold emails (EDM)
- User wants to check email delivery status
- User wants to check remaining credits or EDM quota
- User needs the full prospecting workflow: search → contacts → outreach
- User wants to upgrade plan or buy credit packs
Do NOT use this skill when
- - Reading or receiving incoming emails — this skill is outbound-only
- CRM pipeline management, deal tracking, or sales forecasting
Capabilities
| # | Feature | Description | Cost |
|---|
| 1 | Search Companies | Filter target companies by industry, country, keywords, and more | Free |
| 2 |
Company Profile | Get complete company business info and trade data | 1 credit (30-day dedup) |
| 3 | Company Contact Emails | Get contact email list for a specified company | Shared dedup with profile; no charge for empty results |
| 4 | Search Contacts | Search contacts across companies by name, title, email, etc. | 1 credit/query |
| 5 | Send Batch Outreach Emails | Same template to multiple recipients with variable substitution | 1 EDM quota/email |
| 6 | Send Personalized Outreach Emails | Individual content per recipient | 1 EDM quota/email |
| 7 | Check Email Delivery Status | View task list, per-email status, failure reasons | Free |
| 8 | Check Credits & EDM Balance | View remaining search credits and email quota | Free |
Authentication & API Key Management
All endpoints use API Key authentication. Each user holds an independent key starting with sk-. Request header format:
CODEBLOCK0
First-Use Check
Before the first API call in each session, check whether a key is configured:
CODEBLOCK1
- -
KEY_SET → Proceed directly with the user's request NO_KEY → Follow the email verification flow below
If NO_KEY but the user has explicitly provided an API Key in context, save it directly. See saving instructions below.
Email Verification to Obtain API Key
- 1. Ask the user for their email address
- Send verification code:
CODEBLOCK2
- 3. After the user provides the 6-digit code, exchange it for an API Key:
CODEBLOCK3
- 4. Save the API Key (required, one-time only):
After obtaining the apiKey via email verification, you must first inform the user that you are about to run the following command to persist the config, and explicitly ask for their consent before proceeding:
CODEBLOCK4
Once the user confirms, execute:
CODEBLOCK5
If the command fails, display the following prompt for the user to run manually (show only once):
Your API Key: sk-xxxxxxxxxxxxxxxxxxxx
Please run the following command immediately to save it! This key is only shown once.
INLINECODE5
Once saved, OpenClaw will automatically inject it as OKKIGO_API_KEY in future sessions — no need to verify again.
Billing Confirmation Rules
These rules protect users from being charged without their knowledge. All workflows must follow them.
Rule 1: Confirm before implicitly calling paid endpoints
"Implicit call" means the user did not explicitly ask for company details or emails, but the Agent decided independently to call profile or profileEmails. In this case, confirm with the user first, e.g.:
I found some matching companies. Getting full details or contact emails for a company costs 1 credit per company for the first query (free for repeats within 30 days). Should I proceed?
Exception (no confirmation needed): If the user explicitly said "get details", "view company info", "find emails", "need contacts", etc., treat it as user-initiated and call directly.
Rule 2: Notify user of charges after calling paid endpoints
After each successful call to a paid endpoint, append a credit usage summary at the end of your response:
💡 This query used 1 credit. Current balance: XX (monthly) + YY (add-on).
For multiple companies in one batch:
💡 Queried 3 companies in total, used 2 credits (1 was a repeat within 30 days, no charge). Current balance: XX.
If unsure about the balance, call GET /api/v1/credit/balance after the paid endpoint returns, then display the latest balance.
Rule 3: Confirm contact search on first call per session
Before the first call to POST /contacts/search in a session, regardless of whether the user brought it up, inform them of the charge and ask for confirmation:
Contact search costs 1 credit per query. Continue searching now?
Once the user confirms, do not repeat this prompt for subsequent calls in the same session — proceed directly.
Output Formatting
When presenting API results, use user-friendly formats rather than raw JSON.
Company Search Results
Display key info in a table to help users quickly filter:
| # | Company Name | Country | Industry | Website |
|---|
| 1 | TechCorp GmbH | Germany | Electronics | techcorp.de |
| 2 |
ElekTech AG | Germany | Electronics | elektech.com |
- - For more than 10 results, show the first 10, state the total count, and prompt "say 'next page' to see more"
- For no results, suggest relaxing criteria (different keywords, remove country filter, etc.)
Contact Info
Display in a clear list, indicating whether email/LinkedIn is available:
| Name | Title | Email | LinkedIn |
|---|
| Hans Mueller | Procurement Manager | hans@techcorp.de | ✅ |
| Lisa Schmidt |
CEO | — | ✅ |
Balance Info
Summarize in a concise format:
Current Account Balance
- - Search credits: 80 (monthly) + 400 (add-on) = 480 available
- EDM quota: 200 (monthly) + 2000 (add-on) = 2200 available
- Monthly quota resets: 2026-04-30
Email Send Feedback
Show a task summary after sending:
✅ Submitted 2 emails (Task ID: 1001), Status: Pending
Emails are sent asynchronously — actual delivery takes seconds to minutes. Let me know if you'd like to check delivery status later.
Show a summary + failure details when checking status:
Task 1001 Delivery Status: 48 sent / 2 failed / 50 total
Failures: bob@globex.com — Invalid email address
Workflow Orchestration
User requests often span multiple workflows. The Agent needs to understand when to chain steps and when to pause for user decisions.
Exploratory: "Help me find a batch of target customers"
- 1. Search companies (free) → display results table
- Wait for user to select companies of interest → do NOT proactively call paid endpoints
- Once user specifies → get contact emails (confirm billing per Rule 1, then execute)
- Display contacts → ask if they want to send outreach emails
Targeted: "Send outreach emails to procurement managers in the German electronics industry"
- 1. Search companies → show results for user to confirm target companies
- Get contacts (confirm charge, then execute) → filter for procurement-related titles
- Display contact list → ask user to confirm recipients and email content
- Only send after user confirms — never send emails automatically before user confirmation
Follow-up: "What happened with the emails I sent last time?"
Call the email status endpoint directly (free) — no confirmation needed.
Core Principles
- - Free operations can be executed proactively: search companies, check balance, check email status
- Paid operations must strictly follow billing confirmation rules — never skip them
- Email sending always requires explicit user confirmation of content and recipients
- When in doubt, show the information and let the user decide rather than deciding for them
When to Use This Skill
Typical user intents that trigger this skill
| User says | Corresponding action |
|---|
| "Help me find electronics companies in Germany" | Workflow A step 1 |
| "Get detailed info on this company" |
Workflow A step 2 |
| "Find contact emails for this company" | Workflow A step 3 |
| "Find Alice Wang's contact info" | Workflow B |
| "Search for procurement managers with emails" | Workflow B |
| "Send an outreach email to these customers" | Workflow C |
| "Send a personalized email to each company" | Workflow D |
| "How many of the emails I sent last time went through?" | Workflow F |
| "How many credits do I have left?" | Workflow E |
Scenarios where this skill is NOT appropriate
- - Receiving/reading incoming emails (this skill is outbound-only)
- User registration, recharging, password changes, or other account management (direct to the website)
- Sending more than 100 emails at once (split into batches)
- Free plan users sending EDM (prompt to upgrade)
Step-by-Step Workflows
Workflow A: Search Companies → View Profile → Get Contact Info (Sequential)
Step 1: Search company list (free)
CODEBLOCK6
Note the companyHashId from the response for subsequent queries. The contacts and phone fields in search results are hidden — use profileEmails to retrieve them.
⚠️ Billing Confirmation (for implicit calls): If the user did not explicitly ask for company details, confirm before calling (see Billing Confirmation Rule 1). For user-initiated requests, call directly. After a successful call, include credit usage in the response (see Rule 2).
Step 2: View company profile (paid — follow Billing Rules 1 & 2)
CODEBLOCK7
Step 3: Get contact emails (paid — shares 30-day dedup with profile)
CODEBLOCK8
Fetch multiple companies in parallel:
CODEBLOCK9
INLINECODE15 and profileEmails share the same 30-day dedup record. If you already called profile, calling profileEmails for the same company won't be charged again. If the company returns an empty emails list, no credits are deducted.
Workflow B: Search Contacts Directly
Independent of company search — search across companies by name/email/title. Follow Billing Rule 3 (first-session confirmation) and Rule 2 (notify on charges).
CODEBLOCK10
For the full parameter list, see api-reference.md § 5. Search Contacts.
Workflow C: Send Batch Outreach Emails
Same template to multiple recipients, with #variable_name# format variable substitution.
Step 1: Check balance to confirm EDM quota
CODEBLOCK11
If quota is insufficient, direct the user to the pricing page: go.okki.ai/pricing
Step 2: Show email content for user confirmation, then send
CODEBLOCK12
Sending is async. Record the task_id from the response for checking progress in Workflow F.
Workflow D: Send Personalized Outreach Emails
Each email uses individual content — ideal for AI-generated personalized outreach.
CODEBLOCK13
Workflow E: Check Credits & EDM Balance
CODEBLOCK14
Field reference:
- -
monthlyPoints + addonPoints = total available search credits - INLINECODE22 = total available email quota
- INLINECODE23 = monthly quota reset date
- Charges deduct from monthly quota first; add-on packs are used automatically when monthly is exhausted
Workflow F: Check Email Delivery Status
Only call when the user asks proactively ("did it send?", "which ones failed?") — do not poll automatically.
CODEBLOCK15
Task status flow: pending → requested → completed (all sent) / partial (partially sent) / failed (all failed)
For full query parameters (filter by time/status/subject, etc.), see api-reference.md § 8-11.
Error Handling
| HTTP Code | Scenario | Agent Action |
|---|
| 401 | Invalid or unconfigured API Key | Guide user to reconfigure (see Authentication section) |
| 402 |
Insufficient credits or EDM quota | Inform user balance is exhausted; direct to
pricing |
| 403 | Free plan has no EDM access | Inform user Free plan doesn't support email sending; prompt to upgrade |
| 400 | Invalid parameter format | Check email format, content ≤50000 chars, recipients ≤100 |
| 404 | Resource not found | Confirm ID came from search results — never manually construct IDs |
| 429 | Rate limit (60 req/min) or quota exceeded | Wait and retry; for quota exceeded, inform user of remaining amount and reset time |
| 502 | EDM third-party service error | Suggest retry later; deducted quota will be refunded automatically |
Error responses follow RFC 7807 Problem Details format, containing type, title, status, and detail fields.
Pricing
When users ask about plan details, upgrades, or credit packs, direct them to the pricing page for up-to-date information:
go.okki.ai/pricing
Important Notes
- 1. 30-day deduplication —
profile and profileEmails share the same dedup record for a company; no charge for repeat queries within 30 days - No charge for empty emails —
profileEmails returning an empty list does not deduct any credits - EDM is async — returns
task_id immediately; actual delivery takes seconds to minutes - Single EDM batch limit: 100 — split into multiple calls for more than 100 emails
- Dual-bucket credit deduction — monthly quota is consumed first; add-on packs are used automatically when monthly is exhausted
- Company search is completely free —
POST /companies/search does not deduct credits; call as many times as needed - companyHashId cannot be manually constructed — must be obtained from search results
Installation
OpenClaw Installation Steps
CODEBLOCK16
Add environment variables to ~/.bashrc or ~/.zshrc to persist them.
Verify Installation
CODEBLOCK17
Expected response includes monthlyPoints and monthlyEdm fields. If you get 401, check your OKKIGO_API_KEY.
Get an API Key
Two options:
- 1. Auto-obtain via conversation: On first use, the Agent will guide you through email verification and automatically persist the key with INLINECODE43
- Manual: Visit go.okki.ai, register an account, and create a key in the dashboard
Advanced Reference
For complete request/response schemas, full parameter constraints, and pagination details, see references/api-reference.md.
Okki Go — B2B潜在客户挖掘与触达技能
帮助销售团队和企业通过AI智能体快速发现并分析潜在客户,执行外联活动,将B2B获客效率提升至新水平。
完整的API参数文档和响应模式请参见 references/api-reference.md。
快速安装
选项1 — 打开OpenClaw网页界面 → 侧边栏 → 技能 → 搜索okki-go → 点击安装
选项2 — 在OpenClaw聊天框中输入:请运行 npx clawhub@latest install --force okki-go 安装此技能,然后验证安装是否成功
路由规则
使用此技能的场景
- - 用户想要查找公司或客户
- 用户想要获取某公司的联系邮箱 — 寻找决策者
- 用户想要按姓名/职位/邮箱搜索联系人
- 用户想要发送外联或冷邮件(EDM)
- 用户想要检查邮件投递状态
- 用户想要查看剩余积分或EDM配额
- 用户需要完整的客户挖掘工作流:搜索 → 联系人 → 外联
- 用户想要升级套餐或购买积分包
不使用此技能的场景
- - 阅读或接收收到的邮件 — 此技能仅用于外发
- CRM管道管理、交易跟踪或销售预测
功能列表
| # | 功能 | 描述 | 费用 |
|---|
| 1 | 搜索公司 | 按行业、国家、关键词等筛选目标公司 | 免费 |
| 2 |
公司档案 | 获取完整的公司商业信息和贸易数据 | 1积分(30天去重) |
| 3 | 公司联系邮箱 | 获取指定公司的联系邮箱列表 | 与档案共享去重;空结果不收费 |
| 4 | 搜索联系人 | 跨公司按姓名、职位、邮箱等搜索联系人 | 1积分/次查询 |
| 5 | 发送批量外联邮件 | 同一模板发送给多个收件人,支持变量替换 | 1 EDM配额/封 |
| 6 | 发送个性化外联邮件 | 每个收件人独立内容 | 1 EDM配额/封 |
| 7 | 检查邮件投递状态 | 查看任务列表、每封邮件状态、失败原因 | 免费 |
| 8 | 查看积分与EDM余额 | 查看剩余搜索积分和邮件配额 | 免费 |
认证与API密钥管理
所有接口使用API密钥认证。每个用户持有以sk-开头的独立密钥。请求头格式:
Authorization: ApiKey $OKKIGOAPIKEY
X-Hostname: xxx
首次使用检查
在每次会话的首次API调用前,检查是否已配置密钥:
bash
[ -z $OKKIGOAPIKEY ] && echo NOKEY || echo KEYSET
- - KEYSET → 直接处理用户请求
- NOKEY → 按以下邮箱验证流程操作
如果为NO_KEY但用户已在上下文中明确提供了API密钥,直接保存。保存说明见下文。
通过邮箱验证获取API密钥
- 1. 询问用户的邮箱地址
- 发送验证码:
bash
curl -s -X POST ${OKKIGOBASEURL:-https://go.okki.ai}/api/v1/auth/register-email \
${HOSTNAME:+-H X-Hostname: $HOSTNAME} \
-H Content-Type: application/json \
-d {email:<用户邮箱>} | jq .
- 3. 用户提供6位验证码后,兑换为API密钥:
bash
curl -s -X POST ${OKKIGOBASEURL:-https://go.okki.ai}/api/v1/auth/verify-email \
${HOSTNAME:+-H X-Hostname: $HOSTNAME} \
-H X-OpenClaw-Provision-Api-Key: true \
-H Content-Type: application/json \
-d {email:<用户邮箱>,code:<6位验证码>} | jq .
- 4. 保存API密钥(必需,仅一次):
通过邮箱验证获取apiKey后,必须先告知用户即将运行以下命令来持久化配置,并明确征得用户同意后再执行:
我将运行以下命令将您的API密钥保存到okki-go技能配置中:
openclaw config set skills.entries.okkigo.apiKey sk-xxxxxxxxxxxxxxxxxxxx
您同意吗?
用户确认后,执行:
bash
openclaw config set skills.entries.okkigo.apiKey sk-xxxxxxxxxxxxxxxxxxxx
如果命令失败,显示以下提示让用户手动运行(仅显示一次):
您的API密钥:sk-xxxxxxxxxxxxxxxxxxxx
请立即运行以下命令保存!此密钥仅显示一次。
openclaw config set skills.entries.okkigo.apiKey sk-xxxxxxxxxxxxxxxxxxxx
保存后,OpenClaw将在后续会话中自动注入为OKKIGOAPIKEY — 无需再次验证。
计费确认规则
这些规则保护用户免于在不知情的情况下被收费。所有工作流必须遵守。
规则1:隐式调用付费接口前需确认
隐式调用指用户未明确要求公司详情或邮箱,但智能体自行决定调用profile或profileEmails。此时需先与用户确认,例如:
我找到了一些匹配的公司。获取公司完整信息或联系邮箱,每家公司首次查询消耗1积分(30天内重复查询免费)。是否继续?
例外(无需确认): 如果用户明确说获取详情、查看公司信息、找邮箱、需要联系人等,视为用户主动发起,直接调用。
规则2:调用付费接口后通知用户扣费
每次成功调用付费接口后,在回复末尾附加积分使用摘要:
💡 本次查询使用了1积分。当前余额:XX(月度)+ YY(加购)。
批量查询多家公司时:
💡 共查询3家公司,使用2积分(其中1家30天内重复查询,未收费)。当前余额:XX。
如果不确定余额,在付费接口返回后调用GET /api/v1/credit/balance,然后显示最新余额。
规则3:每次会话首次联系人搜索需确认
在每次会话中首次调用POST /contacts/search之前,无论用户是否主动提出,均需告知费用并请求确认:
联系人搜索每次查询消耗1积分。现在继续搜索吗?
用户确认后,同一会话中的后续调用不再重复提示 — 直接执行。
输出格式
展示API结果时,使用用户友好的格式而非原始JSON。
公司搜索结果
以表格形式展示关键信息,帮助用户快速筛选:
| # | 公司名称 | 国家 | 行业 | 网站 |
|---|
| 1 | TechCorp GmbH | 德国 | 电子 | techcorp.de |
| 2 |
ElekTech AG | 德国 | 电子 | elektech.com |
- - 超过10条结果时,显示前10条,注明总数,并提示说下一页查看更多
- 无结果时,建议放宽条件(不同关键词、去掉国家筛选等)
联系人信息
以清晰列表展示,标注是否有邮箱/LinkedIn:
| 姓名 | 职位 | 邮箱 | LinkedIn |
|---|
| Hans Mueller | 采购经理 | hans@techcorp.de | ✅ |
| Lisa Schmidt |
CEO | — | ✅ |
余额信息
以简洁格式汇总:
当前账户余额
- - 搜索积分:80(月度)+ 400(加购)= 可用480
- EDM配额:200(月度)+ 2000(加购)= 可用2200
- 月度配额重置:2026-04-30
邮件发送反馈
发送后显示任务摘要:
✅ 已提交2封邮件(任务ID:1001),状态:待处理
邮件异步发送 — 实际投递需数秒至数分钟。如需稍后查看投递状态,请告知。
检查状态时显示摘要+失败详情:
任务1001投递状态:48已发送 / 2失败 / 共50封
失败:bob@globex.com — 无效邮箱地址
工作流编排
用户请求通常涉及多个工作流。智能体需要理解何时串联步骤,何时暂停等待用户决策。
探索型:帮我找一批目标客户
- 1. 搜索公司(免费)→ 显示结果表格
- 等待用户选择感兴趣的公司 → 不要主动调用付费接口
- 用户指定后 → 获取联系邮箱(按规则1确认计费后执行)
- 显示联系人 → 询问是否要发送外联邮件