> ## Documentation Index
> Fetch the complete documentation index at: https://outcrawl.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# SDKs

> Official Outcrawl SDKs for TypeScript and Python.

export const OutcrawlStyles = () => {
  if (typeof document !== 'undefined' && !document.getElementById('outcrawl-overrides')) {
    const s = document.createElement('style');
    s.id = 'outcrawl-overrides';
    s.textContent = `
      /* Match the product's radius grid (4 / 6 / 8 / 9999), not Mintlify's default. */
      .rounded-sm { border-radius: 0.375rem !important; } /* 6px, --r-ctl */
      .rounded-md { border-radius: 0.375rem !important; } /* 6px, --r-ctl */
      .rounded-lg { border-radius: 0.5rem !important; }   /* 8px, --r-panel */
      .rounded-l-sm { border-top-left-radius: 0.375rem !important; border-bottom-left-radius: 0.375rem !important; }
      .rounded-r-sm { border-top-right-radius: 0.375rem !important; border-bottom-right-radius: 0.375rem !important; }
      .rounded-l-md { border-top-left-radius: 0.375rem !important; border-bottom-left-radius: 0.375rem !important; }
      .rounded-r-md { border-top-right-radius: 0.375rem !important; border-bottom-right-radius: 0.375rem !important; }
      .rounded-l-lg { border-top-left-radius: 0.5rem !important; border-bottom-left-radius: 0.5rem !important; }
      .rounded-r-lg { border-top-right-radius: 0.5rem !important; border-bottom-right-radius: 0.5rem !important; }

      /* Cards: never pure white in light mode, matching the one-big-card surface tone. */
      .card { background-color: #fcfcfc !important; border-radius: 0.5rem !important; }
      html.dark .card { background-color: #141311 !important; }

      /* Docs hero box */
      .oc-hero { background-color: #fcfcfc; border: 1px solid #e5e2dc; }
      html.dark .oc-hero { background-color: #141311; border-color: #26241f; }
      html.dark .oc-hero h1 { color: #edeae4; }

      /* Thin, transparent-track, hide-until-hover scrollbar. */
      ::-webkit-scrollbar { width: 6px; height: 6px; background-color: transparent; }
      ::-webkit-scrollbar-track { background-color: transparent; }
      ::-webkit-scrollbar-thumb { background-color: rgba(155, 155, 155, 0.5); border-radius: 10px; transition: opacity 0.3s ease; opacity: 0; }
      ::-webkit-scrollbar-thumb:hover { background-color: rgba(155, 155, 155, 0.7); }
      *:hover::-webkit-scrollbar-thumb,
      *:focus::-webkit-scrollbar-thumb,
      *:active::-webkit-scrollbar-thumb { opacity: 1; }
      * { scrollbar-width: thin; scrollbar-color: rgba(155, 155, 155, 0.5) transparent; }
    `;
    document.head.appendChild(s);
  }
  return null;
};

<OutcrawlStyles />

Outcrawl provides two official SDKs. There is no third, everything either one does not cover is reachable the same way: plain HTTP.

<CardGroup cols={2}>
  <Card title="TypeScript SDK" icon="brand-typescript" href="/docs/sdks/typescript">
    `npm install @outcrawl/sdk`, zero runtime dependencies, the only client with live browser control.
  </Card>

  <Card title="Python SDK" icon="brand-python" href="/docs/sdks/python">
    `pip install outcrawl`, pure Python, one wheel for every OS, async and context managed.
  </Card>
</CardGroup>

## Which one should I use?

| | TypeScript | Python |
| - | - | - |
| Package | `@outcrawl/sdk` | `outcrawl` |
| Install | `npm install @outcrawl/sdk` | `pip install outcrawl` |
| Registry | npm | PyPI |
| Requirement | Node.js, zero runtime deps | Python 3.10+, one dependency (`httpx`) |
| Async model | Promises | `async`/`await`, context managed |
| Scrape, crawl, search | Yes | Yes |
| Agents (submit, watch, cancel, hand off to a person) | Yes | Yes |
| Live browser control (`oc.browser()`) | Yes | No, TypeScript SDK only |
| Monitors, profiles, secrets, rules, integrations | Yes | Yes |
| Usage and credits | Yes | Yes |

The one real asymmetry: live browser control needs a CDP connection held open in the caller's own process, so it exists only in TypeScript. Python reaches the same underlying page work through `agent` and `scrape`, which run the loop on the platform's own side rather than the caller's, a difference in kind rather than a missing feature.

## Authentication

Both SDKs read the same credential the same way: an API key, `ock_<keyId>.<secret>`, from the `OUTCRAWL_API_KEY` environment variable, or passed directly at construction. Generate one from the console at **[https://outcrawl.ai/console/keys](https://outcrawl.ai/console/keys)**.

```
ock_YOUR_KEY_ID.YOUR_SECRET
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.