# Icypeas — Orthogonal API

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

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://mono.orthogonal.com/v1/run`
**Auth:** `Authorization: Bearer $ORTHOGONAL_API_KEY`
Get an API key at https://mono.orthogonal.com/account/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://mono.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://mono.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://mono.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>"}}'
```

### Count Companies

Free. Count companies in the Icypeas lead database matching a query. Returns {"total": N} only: no company data and no pagination. Use it to size a search before calling find-companies. query filters (any other key is rejected): include/exclude lists {"include":[...],"exclude":[...]} (max 200 values each) for name, lid (LinkedIn vanity id, e.g. "google"), urn (LinkedIn numeric id as string, e.g. "1527"), companyId (domain, website, URN, LinkedIn URL or vanity name), type (Privately Held, Sole Proprietorship, Self-Employed, Partnership, Public Company, Nonprofit, Educational Institution, Government Agency), industry (LinkedIn industry names, e.g. "Software Development"), location (prefer ISO country codes like "US"; "Paris, France" narrows to a city; values are OR'd), keyword (free text across the company profile), domain (bare domain like "acme.com"); ranges for headcount and revenue using only the keys ">", ">=", "<", "<=" with numeric values, e.g. {"headcount":{">=":11,"<=":200}} (gte/lte/min/max/from/to and string numbers are rejected); headcountGrowth {"timespan":"6months"|"12months"|"24months","min":-10,"max":50} (timespan required; min/max are percentages -100 to 10000). Example: {"query":{"industry":{"include":["Software Development"]},"location":{"include":["DE"]},"headcount":{">=":11,"<=":200}}}

`POST /api/find-companies/count`

**Estimated cost:** $0

**Docs:** https://api-doc.icypeas.com/leads-db/find-companies/

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | object | Yes | Filters; any other key is rejected. Include/exclude {"include":[...],"exclude":[...]} for name, lid, urn, companyId, type, industry, location, keyword, domain (bare, e.g. "acme.com"). Ranges for headcount and revenue with only ">", ">=", "<", "<=" and numbers, e.g. {"headcount":{">=":11,"<=":200}}. headcountGrowth: {"timespan":"6months"\|"12months"\|"24months","min":-10,"max":50}. |

```bash
curl -X POST 'https://mono.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>"}}'
```

### 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://mono.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>"}}'
```

### 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://mono.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://mono.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>"}}'
```

### 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://mono.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>"}}'
```

### 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://mono.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>"}}'
```

### 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://mono.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>"}}'
```

### 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://mono.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>"}}'
```

### 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://mono.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>"}}'
```

### 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://mono.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>"}}'
```

### 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://mono.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>"}}'
```

### 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://mono.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>"}}'
```

### Find Companies

Search the Icypeas lead database for companies. Returns {total, leads[], pagination}, paginated (pagination.size 1-200, default 100; pass back pagination.token with the same query for the next page). query filters (any other key is rejected): include/exclude lists {"include":[...],"exclude":[...]} (max 200 values each) for name, lid (LinkedIn vanity id, e.g. "google"), urn (LinkedIn numeric id as string, e.g. "1527"), companyId (domain, website, URN, LinkedIn URL or vanity name), type (Privately Held, Sole Proprietorship, Self-Employed, Partnership, Public Company, Nonprofit, Educational Institution, Government Agency), industry (LinkedIn industry names, e.g. "Software Development"), location (prefer ISO country codes like "US"; "Paris, France" narrows to a city; values are OR'd), keyword (free text across the company profile), domain (bare domain like "acme.com"); ranges for headcount and revenue using only the keys ">", ">=", "<", "<=" with numeric values, e.g. {"headcount":{">=":11,"<=":200}} (gte/lte/min/max/from/to and string numbers are rejected); headcountGrowth {"timespan":"6months"|"12months"|"24months","min":-10,"max":50} (timespan required; min/max are percentages -100 to 10000). Example: {"query":{"industry":{"include":["Software Development"]},"location":{"include":["DE"]},"headcount":{">=":11,"<=":200}},"pagination":{"size":50}}

`POST /api/find-companies`

**Estimated cost:** $0.01

**Docs:** https://api-doc.icypeas.com/leads-db/find-companies/

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | object | Yes | Filters; any other key is rejected. Include/exclude {"include":[...],"exclude":[...]} for name, lid, urn, companyId, type, industry, location, keyword, domain (bare, e.g. "acme.com"). Ranges for headcount and revenue with only ">", ">=", "<", "<=" and numbers, e.g. {"headcount":{">=":11,"<=":200}}. headcountGrowth: {"timespan":"6months"\|"12months"\|"24months","min":-10,"max":50}. |
| `pagination` | object | No | Optional. {"size": 1-200 (default 100), "token": "<pagination.token from the previous response>"}. The query must not change between pages; tokens expire. |

```bash
curl -X POST 'https://mono.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>"}}'
```

---

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