# Icypeas — Orthogonal API

> Pay-per-use API on Orthogonal. Each call is billed to your Orthogonal balance.
> Base API: `https://api.orthogonal.com/v1/run` · [llms.txt](https://orthogonal.com/llms.txt) · [browse all APIs](https://orthogonal.com/discover)

Email finder, verifier, LinkedIn scraper, and lead database API. Discover professional email addresses, verify deliverability, scrape LinkedIn profiles and companies, and search a massive lead database with advanced filters.

**Verified:** yes

## Access

**Run API:** `POST https://api.orthogonal.com/v1/run`
**Auth:** `Authorization: Bearer $ORTHOGONAL_API_KEY`
Get an API key at https://orthogonal.com/dashboard/settings/api-keys

Every call goes through the unified Run API: send the API `slug`, the endpoint `path`, and the `query`/`body` parameters. The response is `{ "success": true, "price": "<usd>", "data": { ... } }`.

## Endpoints

### Find LinkedIn Company URL

Find a company's LinkedIn page URL by company name or domain. Synchronous response with status FOUND or NOT_FOUND.

`POST /api/url-search/company`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `companyOrDomain` | string | Yes | Company name or domain to search for |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/url-search/company","body":{"companyOrDomain":"<string>"}}'
```

### Reverse Email Lookup

Look up a professional email address to get the associated LinkedIn profile and person details. Returns results synchronously with status FOUND or NOT_FOUND.

`POST /api/reverse-email-lookup`

**Estimated cost:** $0.1

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | Yes | A professional email address to look up |
| `custom` | object | No | Optional object with webhookUrl and/or externalId for tracking |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/reverse-email-lookup","body":{"email":"<string>","custom":"<object>"}}'
```

### Email Verification

Verify a single email address for deliverability. Returns a search ID to poll for results via the Fetch Search Result endpoint.

`POST /api/email-verification`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | Yes | The email address to verify |
| `custom` | object | No | Optional object with webhookUrl and/or externalId for tracking |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/email-verification","body":{"email":"<string>","custom":"<object>"}}'
```

### Bulk Search

Create a bulk search with up to 5000 rows. Supports email-search, email-verification, and domain-search tasks. Returns a file ID to track progress.

`POST /api/bulk-search`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Name for this bulk search |
| `task` | string | Yes | Task type: email-search, email-verification, or domain-search |
| `data` | array | Yes | Array of row arrays. email-search: [[firstname, lastname, domain]]. email-verification: [[email]]. domain-search: [[domain]]. |
| `custom` | object | No | Optional webhookUrl and/or externalId |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/bulk-search","body":{"name":"<string>","task":"<string>","data":"<array>","custom":"<object>"}}'
```

### Bulk Reverse Email Lookup

Look up multiple professional email addresses in bulk (up to 50 per call) to get associated LinkedIn profiles.

`POST /api/reverse-email-lookups`

**Estimated cost:** $0.1

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `data` | array | Yes | Array of objects, each with an email field and optional custom object |
| `custom` | object | No | Optional object with webhookUrl and/or externalId for tracking |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/reverse-email-lookups","body":{"data":"<array>","custom":"<object>"}}'
```

### Count Companies

Count companies matching a query in the lead database. Free. Filters: name, industry, location, headcount (range), revenue (range), website, companyType, keyword, headcountGrowth.

`POST /api/find-companies/count`

**Estimated cost:** $0

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | object | Yes | Query with include/exclude filters or range operators |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/find-companies/count","body":{"query":"<object>"}}'
```

### Find Companies

Search the lead database for companies matching filters. Returns paginated results. Filters: name, lid, urn, companyId, companyType, industry, location, headcount (range), headcountGrowth, revenue (range), keyword, website.

`POST /api/find-companies`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | object | Yes | Query with include/exclude filters or range operators |
| `pagination` | object | No | Pagination with size and token |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/find-companies","body":{"query":"<object>","pagination":"<object>"}}'
```

### List Bulk Search Files

List bulk search files with progress info or get a specific bulk search by file ID. Shows found, done, in-progress, total counts.

`POST /api/search-files/read`

**Estimated cost:** $0

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `file` | string | No | File ID to retrieve. Omit to list all. |
| `next` | boolean | No | true for next page, false for previous page |
| `sorts` | array | No | Pagination array from previous response |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/search-files/read","body":{"file":"<string>","next":"<boolean>","sorts":"<array>"}}'
```

### Find People

Search the lead database for people matching filters. Returns paginated results with profile, job, and company data. Filters: firstname, lastname, currentJobTitle, pastJobTitle, currentCompanyName, pastCompanyName, currentCompanyUrn, currentCompanyWebsite, currentCompanyId, school, languages, skills, location, keyword, headcount.

`POST /api/find-people`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | object | Yes | Query with include/exclude filters or range operators |
| `pagination` | object | No | Pagination with size (results per page) and token (from previous response) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/find-people","body":{"query":"<object>","pagination":"<object>"}}'
```

### Domain Scan

Scan a domain to discover all associated email addresses. Returns a search ID to poll for results via the Fetch Search Result endpoint.

`POST /api/domain-search`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domainOrCompany` | string | Yes | The domain or company name to scan |
| `custom` | object | No | Optional object with webhookUrl and/or externalId for tracking |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/domain-search","body":{"domainOrCompany":"<string>","custom":"<object>"}}'
```

### Find LinkedIn Profile URL

Find a person's LinkedIn profile URL by name and optionally company/domain and job title. Synchronous response with status FOUND or NOT_FOUND.

`POST /api/url-search/profile`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `firstname` | string | Yes | First name of the person |
| `lastname` | string | Yes | Last name of the person |
| `companyOrDomain` | string | No | Company name or domain of the person |
| `jobTitle` | string | No | Job title of the person |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/url-search/profile","body":{"firstname":"<string>","lastname":"<string>","companyOrDomain":"<string>","jobTitle":"<string>"}}'
```

### Scrape LinkedIn Profile

Scrape a LinkedIn user profile by URL. Returns detailed profile data including work experience, education, skills, languages, and contact info.

`GET /api/scrape/profile`

**Estimated cost:** $0.02

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | Full LinkedIn profile URL (e.g. https://www.linkedin.com/in/username) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/scrape/profile","method":"GET","query":{"url":"<string>"}}'
```

### Email Discovery

Find a professional email address by providing a first name, last name, and domain or company name. Returns a search ID to poll for results via the Fetch Search Result endpoint. Async: status progresses NONE → SCHEDULED → IN_PROGRESS → DEBITED (found) or NOT_DEBITED (not found).

`POST /api/email-search`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `firstname` | string | Yes | First name of the person |
| `lastname` | string | Yes | Last name of the person |
| `domainOrCompany` | string | Yes | Domain name or company name of the person |
| `custom` | object | No | Optional object with webhookUrl and/or externalId for tracking |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/email-search","body":{"firstname":"<string>","lastname":"<string>","domainOrCompany":"<string>","custom":"<object>"}}'
```

### Count People

Count people matching a query in the lead database. Free. Filters: currentJobTitle, pastJobTitle, currentCompanyName, pastCompanyName, location, skills, languages, keyword, headcount, school, etc.

`POST /api/find-people/count`

**Estimated cost:** $0

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | object | Yes | Query with include/exclude filters, e.g. {"currentJobTitle": {"include": ["CTO"]}, "location": {"include": ["US"]}} |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/find-people/count","body":{"query":"<object>"}}'
```

### Fetch Search Result

Retrieve results for a search by ID. Use to poll async results from email-search, email-verification, domain-search, scrape, url-search. Supports pagination.

`POST /api/bulk-single-searchs/read`

**Estimated cost:** $0

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `id` | string | Yes | The search ID from a previous search request |
| `next` | boolean | No | true for next page, false for previous page |
| `sorts` | array | No | Pagination array from previous response |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/bulk-single-searchs/read","body":{"id":"<string>","next":"<boolean>","sorts":"<array>"}}'
```

### Scrape LinkedIn Company

Scrape a LinkedIn company page by URL. Returns company details including description, industry, employee count, specialties, revenue estimates, and address.

`GET /api/scrape/company`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | Full LinkedIn company URL (e.g. https://www.linkedin.com/company/company-name) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"icypeas","path":"/api/scrape/company","method":"GET","query":{"url":"<string>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/icypeas
