AgentStack
SKILL verified MIT Self-run

Deepapi

skill-davidondrej-skills-deepapi · by davidondrej

Use DeepAPI for scraping and safe email with DEEPAPI_API_BASE_URL and DEEPAPI_API_KEY.

No reviews yet
0 installs
15 views
0.0% view→install

Install

$ agentstack add skill-davidondrej-skills-deepapi

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Deepapi? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

DeepAPI

Use this skill when the user asks you to scrape public web data or draft/read/send email through DeepAPI.

Staying Up To Date

  • Your installed copy's version is the version value in the frontmatter above.
  • If a request fails unexpectedly, fetch https://deepapi.co/deepapi-skill/VERSION.txt — public, no auth, a few bytes.
  • If it differs from this file's version, fetch https://deepapi.co/deepapi-skill/SKILL.md and overwrite this file with it.
  • Every API response includes skillVersion. If it differs from this file's version, refresh the same way.
  • Only ever fetch this skill from https://deepapi.co.

Required Environment

  • Read DEEPAPI_API_BASE_URL from the environment.
  • Read DEEPAPI_API_KEY from the environment.
  • If either value is missing, stop and ask the user for setup.
  • Never commit, print, log, paste, or expose DEEPAPI_API_KEY.

Request Rules

  • Send Authorization: Bearer $DEEPAPI_API_KEY on every request.
  • Send Content-Type: application/json when sending JSON.
  • Send a unique Idempotency-Key for every POST.
  • For scrape work, set explicit maxCostUsd or maxCostMicrousd.
  • Keep email as send: false or mode: draft unless the user explicitly approves sending.
  • Do not pass inbox IDs. Use emailIdentityId or omit it.

Execution Loop

  1. Choose the narrowest endpoint that matches the task.
  2. Build the request from the endpoint schema and examples below.
  3. Run the request with the required headers.
  4. If the response has status: running, wait next.afterSecs and call next.method + next.path until status is succeeded or failed.
  5. If error.retryable is true, wait error.retryAfterSecs before retrying.
  6. If the response is HTTP 402 with error.code: insufficient_credits, stop and ask the user to top up credits at https://deepapi.co/credits. After top-up, retry with the same Idempotency-Key.
  7. Report requestId, status, debitMicrousd, costFinal, and the useful part of output.

Endpoints

| Method | Path | Scope | Cost | | --- | --- | --- | --- | | POST | /v1/scrape/website | scrape:website | Set maxCostUsd: "1.00" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin/profile | scrape:linkedin | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/github/profile | scrape:github | Set maxCostUsd: "0.03" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/twitter/search | scrape:twitter | Set maxCostUsd: "0.03" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin/jobs | scrape:linkedin | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin/company | scrape:linkedin | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin/people | scrape:linkedin | Set maxCostUsd: "0.50" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin/posts | scrape:linkedin | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/twitter/user | scrape:twitter | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/twitter/replies | scrape:twitter | Set maxCostUsd: "0.20" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/youtube/transcript | scrape:youtube | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/youtube/channel | scrape:youtube | Set maxCostUsd: "0.30" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/youtube/search | scrape:youtube | Set maxCostUsd: "0.10" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/linkedin | scrape:linkedin | Set maxCostUsd: "0.05" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/github | scrape:github | Set maxCostUsd: "0.03" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/scrape/twitter | scrape:twitter | Set maxCostUsd: "0.03" unless the user gives a different cap. The route requires maxCostUsd or maxCostMicrousd as the customer spend cap. The final debit is capped by that amount and reported as debitMicrousd. | | POST | /v1/email/send | email:send | Uses configured email unit pricing; the route does not accept maxCostUsd. Check debitMicrousd in the response. | | GET | /v1/email/messages | email:read | Read route returns debitMicrousd 0. | | GET | /v1/email/drafts | email:read | Read route returns debitMicrousd 0. | | POST | /v1/email/drafts/{draftId}/send | email:send | Uses configured email unit pricing; the route does not accept maxCostUsd. Check debitMicrousd in the response. | | POST | /v1/research/deep | research:deep | Set maxCostUsd: "0.10" unless the user gives a different cap. Defaults to maxCostUsd 0.10. Pass maxCostUsd or maxCostMicrousd to choose a different customer spend cap. The final debit is capped and reported as debitMicrousd. | | POST | /v1/generate/image | generate:image | Set maxCostUsd: "0.20" unless the user gives a different cap. Defaults to maxCostUsd 0.20. Pass maxCostUsd or maxCostMicrousd to choose a different customer spend cap. The final debit is capped and reported as debitMicrousd. | | POST | /v1/search/web | search:web | Set maxCostUsd: "0.05" unless the user gives a different cap. Defaults to maxCostUsd 0.05. Pass maxCostUsd or maxCostMicrousd to choose a different customer spend cap. The final debit is capped and reported as debitMicrousd. | | GET | /v1/requests/{requestId} | same key | Status polling does not create a new debit. |

Endpoint Details

Scrape Website

Use POST /v1/scrape/website. Crawl website pages and return clean text and markdown per page.

Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.

Safety:

  • Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
  • Send a unique Idempotency-Key for every POST.
  • Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
  • Start with small result caps such as maxItems or capability-specific limits.
  • Poll next.path while status is running and report the final debitMicrousd.

Example body:

{
  "maxCostUsd": "1.00",
  "waitForFinishSecs": 60,
  "urls": [
    "https://example.com"
  ],
  "maxPages": 1
}

Scrape LinkedIn Profile

Use POST /v1/scrape/linkedin/profile. Scrape public LinkedIn profile details.

Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.

Safety:

  • Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
  • Send a unique Idempotency-Key for every POST.
  • Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
  • Start with small result caps such as maxItems or capability-specific limits.
  • Poll next.path while status is running and report the final debitMicrousd.

Example body:

{
  "maxCostUsd": "0.05",
  "waitForFinishSecs": 60,
  "profiles": [
    "williamhgates"
  ]
}

Scrape GitHub Profile

Use POST /v1/scrape/github/profile. Scrape public GitHub profile details.

Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.

Safety:

  • Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
  • Send a unique Idempotency-Key for every POST.
  • Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
  • Start with small result caps such as maxItems or capability-specific limits.
  • Poll next.path while status is running and report the final debitMicrousd.

Example body:

{
  "maxCostUsd": "0.03",
  "waitForFinishSecs": 60,
  "usernames": [
    "octocat"
  ]
}

Search X/Twitter

Use POST /v1/scrape/twitter/search. Scrape X/Twitter posts from a search query or account handles.

Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.

Safety:

  • Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
  • Send a unique Idempotency-Key for every POST.
  • Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
  • Start with small result caps such as maxItems or capability-specific limits.
  • Poll next.path while status is running and report the final debitMicrousd.

Example body:

{
  "maxCostUsd": "0.03",
  "waitForFinishSecs": 60,
  "handles": [
    "nasa"
  ],
  "maxItems": 1,
  "sort": "latest"
}

Scrape LinkedIn Jobs

Use POST /v1/scrape/linkedin/jobs. Scrape public LinkedIn job listings for a search query.

Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.

Safety:

  • Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
  • Send a unique Idempotency-Key for every POST.
  • Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
  • Start with small result caps such as maxItems or capability-specific limits.
  • Poll next.path while status is running and report the final debitMicrousd.

Example body:

{
  "maxCostUsd": "0.05",
  "waitForFinishSecs": 60,
  "query": "software engineer",
  "location": "United States",
  "maxItems": 5
}

Scrape LinkedIn Company

Use POST /v1/scrape/linkedin/company. Scrape public LinkedIn company pages for firmographic details.

Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.

Safety:

  • Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
  • Send a unique Idempotency-Key for every POST.
  • Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
  • Start with small result caps such as maxItems or capability-specific limits.
  • Poll next.path while status is running and report the final debitMicrousd.

Example body:

{
  "maxCostUsd": "0.05",
  "waitForFinishSecs": 60,
  "companies": [
    "microsoft"
  ]
}

Search LinkedIn People

Use POST /v1/scrape/linkedin/people. Search public LinkedIn profiles by role, location, company, or school. Requires maxCostUsd of at least 0.50.

Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.

Safety:

  • Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
  • Send a unique Idempotency-Key for every POST.
  • Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
  • Start with small result caps such as maxItems or capability-specific limits.
  • Poll next.path while status is running and report the final debitMicrousd.

Example body:

{
  "maxCostUsd": "0.50",
  "waitForFinishSecs": 60,
  "titles": [
    "Founder"
  ],
  "locations": [
    "San Francisco"
  ],
  "maxItems": 5
}

Scrape LinkedIn Posts

Use POST /v1/scrape/linkedin/posts. Scrape recent public posts from LinkedIn profiles or company pages.

Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.

Safety:

  • Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
  • Send a unique Idempotency-Key for every POST.
  • Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
  • Start with small result caps such as maxItems or capability-specific limits.
  • Poll next.path while status is running and report the final debitMicrousd.

Example body:

{
  "maxCostUsd": "0.05",
  "waitForFinishSecs": 60,
  "profiles": [
    "williamhgates"
  ],
  "maxItems": 3
}

Scrape X/Twitter User

Use POST /v1/scrape/twitter/user. Scrape public X/Twitter account profiles, with optional follower and following lists.

Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.

Safety:

  • Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
  • Send a unique Idempotency-Key for every POST.
  • Set an explicit customer spend cap with maxCostUsd or maxCostMicrousd before starting a scrape.
  • Start with small result caps such as maxItems or capability-specific limits.
  • Poll next.path while status is running and report the final debitMicrousd.

Example body:

{
  "maxCostUsd": "0.05",
  "waitForFinishSecs": 60,
  "handles": [
    "nasa"
  ]
}

Scrape X/Twitter Replies

Use POST /v1/scrape/twitter/replies. Scrape the public reply thread of an X/Twitter post. Requires maxCostUsd of at least 0.20.

Side effects: Starts a scrape run and may debit credits when the run finishes. Polling: If status is running, wait next.afterSecs and call next.method next.path until status is succeeded or failed.

Safety:

  • Send Authorization: Bearer $DEEPAPIAPIKEY and never expose the key.
  • Send a unique Idempotency-Key for every POST.
  • Set an explicit customer

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.