{
  "schemaVersion": "1.0",
  "item": {
    "slug": "signalhire-skill",
    "name": "The SignalHire skill integrates the full SignalHire API into OpenClaw, enabling you to search for prospects and enrich their contact details without leaving your workflow. It exposes three core actions: a credits check, a search-by-query for prospecting, and an asynchronous contact enrichment call",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/ms-youssef/signalhire-skill",
    "canonicalUrl": "https://clawhub.ai/ms-youssef/signalhire-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/signalhire-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=signalhire-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "connector/main.py",
      "connector/__init__.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/signalhire-skill"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/signalhire-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/signalhire-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/signalhire-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/signalhire-skill/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "SignalHire skill instructions",
        "body": "This skill exposes three high‑level capabilities to an OpenClaw agent.  Each\ncapability corresponds to one of the REST endpoints documented by SignalHire.\nThe agent should never call these endpoints directly; instead it must invoke\none of the defined skill actions.  The following guidance summarises how the\nAPI works, including rate limits, concurrency limits and the asynchronous\ncallback workflow.  All factual statements below are supported by the official\nSignalHire API documentation."
      },
      {
        "title": "1. Check remaining credits",
        "body": "Use this action to determine how many credits remain on the account.  The\nSignalHire API exposes a dedicated endpoint GET /api/v1/credits which returns\nthe number of available credits as a JSON payload.  A valid API key must be\nincluded in the request headers.  When invoked successfully, the response\ncontains a field called credits with the number of credits remaining【821841938681143†L505-L529】.  If the\naccount is configured for “profiles without contacts”, the same endpoint can\nbe called with a withoutContacts=true query parameter【821841938681143†L559-L566】.  Credits are also\nreturned in the X-Credits-Left response header for every Person API call【821841938681143†L559-L566】.\n\nThe agent must call this action before launching large enrichment jobs to\navoid running out of credits mid‑operation.  If the number of remaining\ncredits is lower than the number of items to be enriched, the job should be\nsplit or aborted gracefully."
      },
      {
        "title": "2. Search for profiles",
        "body": "Use this action to find prospective candidates in the SignalHire database\nwithout consuming contact credits.  The Search API endpoint is\nPOST /api/v1/candidate/searchByQuery【21055727237259†L100-L109】 and returns a list of profile summaries\nalong with a scrollId.  The scrollId can be used to fetch additional pages\nvia the Scroll Search endpoint (not shown here) until all results are\nexhausted.  Access to the Search API is granted only after contacting\nSignalHire support and is subject to a strict concurrency limit of three\nsimultaneous requests【21055727237259†L110-L116】.  The agent must ensure that no more than three\nsearchByQuery calls are inflight at any time.\n\nWhen performing a search, the request body should include fields such as\ncurrentTitle, location, keywords, industry and other filters as\ndescribed in the documentation【21055727237259†L120-L177】.  The size parameter controls how many\nprofiles are returned per page (default 10, maximum 100).  After retrieving the\nfirst page, the agent should immediately follow up with a scroll request\nwithin 15 seconds to avoid expiration of the scrollId.  The response from\nsearch is synchronous and will return immediately; no callback is needed."
      },
      {
        "title": "3. Enrich contacts (Person API)",
        "body": "This action retrieves full contact information (emails, phones and social\nprofiles) for up to 100 items per request.  The endpoint is\nPOST /api/v1/candidate/search【821841938681143†L126-L134】.  Each item may be a LinkedIn profile URL,\nan email address, a phone number or a SignalHire profile UID【821841938681143†L120-L124】.  The\nrequest body must include a callbackUrl parameter; once the data is\nprocessed the API posts the results to this URL【821841938681143†L126-L134】.  A valid server\nlistening on the callbackUrl must return HTTP status 200 to acknowledge\nsuccessful receipt.  SignalHire retries up to three times if the callback\nendpoint cannot be reached or if it does not respond within a ten‑second\ntimeout【821841938681143†L187-L198】.  Processing is complete only when all callback payloads have\nbeen received.\n\nThe callback payload contains an array of objects, each with a status field\nindicating the outcome for that item: success, failed, credits_are_over,\ntimeout_exceeded or duplicate_query【821841938681143†L239-L249】.  When the status is\nsuccess, the payload also includes a candidate object with fields such as\nfullName, emails, phones, location, etc.  These results are\npersisted by the connector service into a CSV file; the agent should wait\nuntil the connector reports that the job is ready before consuming the data.\n\nThe Person API is subject to rate limits: a maximum of 600 elements\nprocessed per minute【821841938681143†L490-L503】.  The agent must implement throttling to ensure that the\ncombined number of items in all Person API calls does not exceed this limit.\nRequests exceeding the limit will be rejected with HTTP status 429\nToo Many Requests【821841938681143†L500-L503】.  To maximise throughput, batch up to 100 items per\nrequest but do not exceed the global per‑minute quota."
      },
      {
        "title": "General guidance for agents",
        "body": "Do not hard‑code the API key or callback URL.  Use the environment\nvariables injected by OpenClaw: SIGNALHIRE_API_KEY for authentication and\nSIGNALHIRE_CALLBACK_URL for the Person API.  These values are supplied at\nruntime and must not be echoed or leaked.\n\n\nAlways check remaining credits before starting a large enrichment job.\nAbort or split the job if credits are insufficient.\n\n\nRespect rate and concurrency limits.  No more than three concurrent\nSearch API requests【21055727237259†L110-L116】.  Do not send more than 600 items through the\nPerson API per minute【821841938681143†L490-L503】.  Implement exponential backoff on HTTP 429\nresponses.\n\n\nAlways include a valid callbackUrl when calling the Person API and\nensure the connector service is reachable and responsive.  The callback\nmust return HTTP 200 within ten seconds or the result may be discarded【821841938681143†L187-L198】.\n\n\nWait for job completion.  After submitting a Person API request, the\nagent should poll the connector’s job endpoint (described in the README)\nuntil it indicates that all results have been received.  Only then should\nthe agent proceed to process the CSV data.\n\n\nHandle all status values from the callback.  For failed, credits_are_over,\ntimeout_exceeded and duplicate_query, no candidate data will be\navailable; log these cases and move on.\n\n\nComply with legal and privacy requirements.  SignalHire ties API usage to\ntheir Terms, Privacy and GDPR pages.  Always respect data‑subject rights\nand opt‑out requests when storing or using contact data【821841938681143†L559-L566】.\n\nBy following the above instructions, the agent can safely integrate SignalHire’s\nprospecting and enrichment capabilities into an OpenClaw workflow."
      }
    ],
    "body": "SignalHire skill instructions\n\nThis skill exposes three high‑level capabilities to an OpenClaw agent. Each capability corresponds to one of the REST endpoints documented by SignalHire. The agent should never call these endpoints directly; instead it must invoke one of the defined skill actions. The following guidance summarises how the API works, including rate limits, concurrency limits and the asynchronous callback workflow. All factual statements below are supported by the official SignalHire API documentation.\n\n1. Check remaining credits\n\nUse this action to determine how many credits remain on the account. The SignalHire API exposes a dedicated endpoint GET /api/v1/credits which returns the number of available credits as a JSON payload. A valid API key must be included in the request headers. When invoked successfully, the response contains a field called credits with the number of credits remaining【821841938681143†L505-L529】. If the account is configured for “profiles without contacts”, the same endpoint can be called with a withoutContacts=true query parameter【821841938681143†L559-L566】. Credits are also returned in the X-Credits-Left response header for every Person API call【821841938681143†L559-L566】.\n\nThe agent must call this action before launching large enrichment jobs to avoid running out of credits mid‑operation. If the number of remaining credits is lower than the number of items to be enriched, the job should be split or aborted gracefully.\n\n2. Search for profiles\n\nUse this action to find prospective candidates in the SignalHire database without consuming contact credits. The Search API endpoint is POST /api/v1/candidate/searchByQuery【21055727237259†L100-L109】 and returns a list of profile summaries along with a scrollId. The scrollId can be used to fetch additional pages via the Scroll Search endpoint (not shown here) until all results are exhausted. Access to the Search API is granted only after contacting SignalHire support and is subject to a strict concurrency limit of three simultaneous requests【21055727237259†L110-L116】. The agent must ensure that no more than three searchByQuery calls are inflight at any time.\n\nWhen performing a search, the request body should include fields such as currentTitle, location, keywords, industry and other filters as described in the documentation【21055727237259†L120-L177】. The size parameter controls how many profiles are returned per page (default 10, maximum 100). After retrieving the first page, the agent should immediately follow up with a scroll request within 15 seconds to avoid expiration of the scrollId. The response from search is synchronous and will return immediately; no callback is needed.\n\n3. Enrich contacts (Person API)\n\nThis action retrieves full contact information (emails, phones and social profiles) for up to 100 items per request. The endpoint is POST /api/v1/candidate/search【821841938681143†L126-L134】. Each item may be a LinkedIn profile URL, an email address, a phone number or a SignalHire profile UID【821841938681143†L120-L124】. The request body must include a callbackUrl parameter; once the data is processed the API posts the results to this URL【821841938681143†L126-L134】. A valid server listening on the callbackUrl must return HTTP status 200 to acknowledge successful receipt. SignalHire retries up to three times if the callback endpoint cannot be reached or if it does not respond within a ten‑second timeout【821841938681143†L187-L198】. Processing is complete only when all callback payloads have been received.\n\nThe callback payload contains an array of objects, each with a status field indicating the outcome for that item: success, failed, credits_are_over, timeout_exceeded or duplicate_query【821841938681143†L239-L249】. When the status is success, the payload also includes a candidate object with fields such as fullName, emails, phones, location, etc. These results are persisted by the connector service into a CSV file; the agent should wait until the connector reports that the job is ready before consuming the data.\n\nThe Person API is subject to rate limits: a maximum of 600 elements processed per minute【821841938681143†L490-L503】. The agent must implement throttling to ensure that the combined number of items in all Person API calls does not exceed this limit. Requests exceeding the limit will be rejected with HTTP status 429 Too Many Requests【821841938681143†L500-L503】. To maximise throughput, batch up to 100 items per request but do not exceed the global per‑minute quota.\n\nGeneral guidance for agents\n\nDo not hard‑code the API key or callback URL. Use the environment variables injected by OpenClaw: SIGNALHIRE_API_KEY for authentication and SIGNALHIRE_CALLBACK_URL for the Person API. These values are supplied at runtime and must not be echoed or leaked.\n\nAlways check remaining credits before starting a large enrichment job. Abort or split the job if credits are insufficient.\n\nRespect rate and concurrency limits. No more than three concurrent Search API requests【21055727237259†L110-L116】. Do not send more than 600 items through the Person API per minute【821841938681143†L490-L503】. Implement exponential backoff on HTTP 429 responses.\n\nAlways include a valid callbackUrl when calling the Person API and ensure the connector service is reachable and responsive. The callback must return HTTP 200 within ten seconds or the result may be discarded【821841938681143†L187-L198】.\n\nWait for job completion. After submitting a Person API request, the agent should poll the connector’s job endpoint (described in the README) until it indicates that all results have been received. Only then should the agent proceed to process the CSV data.\n\nHandle all status values from the callback. For failed, credits_are_over, timeout_exceeded and duplicate_query, no candidate data will be available; log these cases and move on.\n\nComply with legal and privacy requirements. SignalHire ties API usage to their Terms, Privacy and GDPR pages. Always respect data‑subject rights and opt‑out requests when storing or using contact data【821841938681143†L559-L566】.\n\nBy following the above instructions, the agent can safely integrate SignalHire’s prospecting and enrichment capabilities into an OpenClaw workflow."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ms-youssef/signalhire-skill",
    "publisherUrl": "https://clawhub.ai/ms-youssef/signalhire-skill",
    "owner": "ms-youssef",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/signalhire-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/signalhire-skill",
    "agentUrl": "https://openagent3.xyz/skills/signalhire-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/signalhire-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/signalhire-skill/agent.md"
  }
}