Find and verify business email addresses from your own code. One REST API, one key, JSON everywhere. Every call is metered in credits, and account reads are always free.
Base paths differ by service. Finding, account and list endpoints are on /api/v2; verification has moved to /v3. Every endpoint below is tagged with the version it lives on.
# Find an address from a name + domain
curl "https://api.skrapp.io/api/v2/find?firstName=John&lastName=Doe&domain=skrapp.io" \
-H "X-Access-Key: YOUR_API_KEY"Every request carries your key in the X-Access-Key header. There are no OAuth flows and no tokens to refresh. Keys are tied to your plan — a key on a free plan can call the API but returns no credits.
Keep the key server-side — it carries your full credit balance. If it leaks, rotate it from your dashboard and the old key stops working immediately.
curl "https://api.skrapp.io/api/v2/account" \
-H "X-Access-Key: YOUR_API_KEY" \
-H "Content-Type: application/json"/api/v2/findv21 credit per address returned — a miss costs nothing.
Resolve a person's business email from their name and their company. Give either a domain or a company name; the domain is more precise when you have it.
Provide either firstName and lastName together, or fullName.
Provide at least one of company or domain.
| Parameter | Type | Description |
|---|---|---|
firstName required | string | The person's first name.Send with lastName, or use fullName instead. |
lastName required | string | The person's last name. |
domain optional | string | The company domain used for its email addresses, e.g. notion.so.Preferred over company when you have it. |
company optional | string | The company name to search within. Use when you do not know the domain. |
curl "https://api.skrapp.io/api/v2/find?firstName=John&lastName=Doe&domain=skrapp.io" \
-H "X-Access-Key: YOUR_API_KEY"{
"email": "john.doe@skrapp.io",
"accuracy": 96,
"firstName": "John",
"lastName": "Doe",
"companyName": "Skrapp",
"quality": {
"status": "valid",
"result": "deliverable"
}
}/api/v2/find_bulkv21 credit per address returned. Up to 100 people per request.
Submit a batch of people and get a job back. Poll the same path with the returned id to collect results as they finish.
Include a maximum of 100 names and companies in the payload.
Per person: provide either firstName and lastName together, or name.
Per person: provide at least one of company or domain.
| Parameter | Type | Description |
|---|---|---|
tId optional | string | A unique id you set per row, echoed back so you can match results to your own records. |
firstName optional | string | The first name attribute. |
lastName optional | string | The last name attribute. |
name optional | string | The full name attribute. |
company optional | string | The company name attribute. |
domain optional | string | The company domain attribute. |
country optional | string | Country code for a localized search. |
curl -X POST "https://api.skrapp.io/api/v2/find_bulk" \
-H "X-Access-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"people": [
{ "tId": "row-1", "firstName": "John",
"lastName": "Doe", "domain": "skrapp.io" }
]
}'{
"id": 84213,
"status": "processing",
"total": 1
}/v3/verifyv31 credit per verification, including invalid results.
Check whether an address is deliverable before you send to it. Pass enrich=true to get the person and company behind the address in the same call.
| Parameter | Type | Description |
|---|---|---|
email required | string | The email address to verify. |
enrich optional | boolean | Also return person and company data.Defaults to false. |
curl "https://api.skrapp.io/v3/verify?email=john.doe@skrapp.io&enrich=true" \
-H "X-Access-Key: YOUR_API_KEY"{
"email": "john.doe@skrapp.io",
"email_status": "valid",
"result": "deliverable",
"firstName": "John",
"lastName": "Doe",
"companyName": "Skrapp",
"title": "Head of Growth"
}validThe mailbox exists and accepts mail. Safe to send.catch-allThe domain accepts everything, so deliverability can't be confirmed.invalidThe mailbox does not exist. Do not send.unknownThe mail server didn't answer in time. Retry later./v3/verify_bulkv31 credit per address. Up to 50 addresses per request.
Verify several addresses in one call by repeating the email parameter. Results come back in the order submitted, with the same statuses as the single verifier.
| Parameter | Type | Description |
|---|---|---|
email required | array | The addresses to verify. Repeat the parameter once per address.Maximum 50 per request. |
curl "https://api.skrapp.io/v3/verify_bulk?email=john.doe@skrapp.io&email=magnus@skrapp.io" \
-H "X-Access-Key: YOUR_API_KEY"/api/v2/accountv2Free — this call never consumes credits.
Read your plan, your remaining credits and your lists. Check this before a large bulk job to confirm you have the balance to finish it.
curl "https://api.skrapp.io/api/v2/account" \
-H "X-Access-Key: YOUR_API_KEY" \
-H "Content-Type: application/json"{
"email": "you@company.com",
"plan": "Professional",
"expiry": "2026-11-01",
"credits": {
"remaining": 7420,
"total": 10000
}
}/api/v2/listv2Free — no credits consumed.
Return every list on your account with its id, name and lead count. Add a list id to the path to fetch one list.
curl "https://api.skrapp.io/api/v2/list" \
-H "X-Access-Key: YOUR_API_KEY"[
{ "id": 1420, "name": "Q3 outbound", "leads": 318 }
]/api/v2/list/:listId/leadsv2Free — no credits consumed.
Page through the leads saved in one list, optionally filtering by keyword.
| Parameter | Type | Description |
|---|---|---|
listId required | number | The id of the list, given in the path. |
start optional | number | Offset to page from.Defaults to 0. |
size optional | number | Leads per page.Defaults to 25, maximum 100. |
kw optional | string | Filter by name, company or email address. |
curl "https://api.skrapp.io/api/v2/list/1420/leads?start=0&size=100&kw=John" \
-H "X-Access-Key: YOUR_API_KEY"Errors use standard HTTP status codes with a JSON body explaining what went wrong. Anything in the 5xx range is safe to retry with backoff; 4xx responses will not succeed on retry without a change to the request.
400A required parameter is missing or malformed.401The key is missing, revoked, or sent in the wrong header.402Out of credits. Check Account Data for your balance.404No address found for that person. This costs no credit.429Rate limited. Back off and retry after the given interval.{
"error": "insufficient_credits",
"message": "You have 0 credits left.",
"remaining": 0
}