Email finder (credits)
Bulk Email Finder Job Results
Retrieve results for a bulk email finder job. Paginated; each row mirrors the /v1/email-lookup response shape.
GET
/
v1
/
bulk-lookup
/
{job_id}
/
results
Get Bulk Email Finder Job Results
curl --request GET \
--url https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"job_id": "123e4567-e89b-12d3-a456-426614174000",
"total_rows": 2,
"total_processed": 2,
"limit": 50,
"offset": 0,
"results": [
{
"first_name": "Jane",
"last_name": "Doe",
"domain": "acme.com",
"email_domain": "acme.com",
"linkedin_url": "https://www.linkedin.com/in/jane-doe",
"email": "jane.doe@acme.com",
"status": "safe",
"substatus": "deliverable",
"explanation": "Safe to email. The mailbox exists and is deliverable.",
"confidence": 99,
"full_name": "Jane Doe",
"employer_name": "Acme",
"employer_linkedin_url": "https://www.linkedin.com/company/acme",
"all_emails": [
{
"email": "jane.doe@acme.com",
"job_order": 1,
"company_linkedin_url": "https://www.linkedin.com/company/acme",
"email_domain": "acme.com"
}
],
"email_provider": "Google Workspace",
"mx_record": "aspmx.l.google.com",
"is_domain_catch_all": false,
"is_secure_email_gateway": false,
"is_disposable": false,
"is_role_account": false,
"is_free": false,
"credits_consumed": 1
},
{
"first_name": "John",
"last_name": "Smith",
"domain": "bigcorp.io",
"email_domain": "bigcorp.io",
"linkedin_url": "https://www.linkedin.com/in/john-smith",
"email": null,
"status": "unknown",
"substatus": "no_address_found",
"explanation": "We couldn't find a valid work email for this person.",
"confidence": null,
"full_name": "John Smith",
"employer_name": "Bigcorp",
"employer_linkedin_url": "https://www.linkedin.com/company/bigcorp",
"all_emails": [],
"email_provider": "Unknown",
"mx_record": null,
"is_domain_catch_all": null,
"is_secure_email_gateway": false,
"is_disposable": null,
"is_role_account": null,
"is_free": null,
"credits_consumed": 1
}
]
}
Use this endpoint to retrieve the results of a bulk email finder job. The response contains a
To page through a complete job, increment
For rows without an email, the enrichment fields (
results array, one object per row processed so far, alongside paging metadata (limit, offset, total_rows, total_processed).
You can call this endpoint while the job is still running to retrieve partial results. The total_processed field tells you how many rows have been completed at the time of the call.
This endpoint serves credit-metered jobs. On an unlimited plan, fetch results via GET /v1/unlimited/bulk-lookup/{job_id}/results instead (same contract).
Pagination
Results are paginated withlimit and offset query parameters:
| Parameter | Default | Maximum | Notes |
|---|---|---|---|
limit | 50 | 500 | Number of rows to return in this page. |
offset | 0 | None | Index into the ordered result set. |
offset by limit until the returned results array is empty (or offset >= total_rows).
Per-row shape
Each entry inresults is identical in shape to the POST /v1/email-lookup response: same status, substatus, email, enrichment fields, and first_name, last_name, domain. Rows submitted as a LinkedIn URL also carry linkedin_url, full_name, employer_name, employer_linkedin_url, and all_emails.
| Outcome | status | substatus | email | confidence | credits_consumed |
|---|---|---|---|---|---|
| Found | safe | deliverable | the discovered address | 0–100 | 1 |
| Not found | unknown | no_address_found | null | null | 1 |
| A correctly formed profile URL, but not a valid profile, e.g. mistyped or no longer in use (LinkedIn rows) | unknown | profile_not_found | null | null | 1 |
| No current employer (LinkedIn rows) | unknown | no_current_employer | null | null | 1 |
| No company website for the employer (LinkedIn rows) | unknown | no_company_website | null | null | 1 |
| Not a LinkedIn profile URL at all, e.g. a company page URL or plain text (LinkedIn rows) | unknown | invalid_linkedin_url | null | null | 0 |
| Couldn’t be completed, resubmit | unknown | temporarily_unavailable | null | null | 1 |
email_provider, mx_record, is_* flags, confidence) may be null or "Unknown". They’re populated only when a deliverable address is returned. See the response schema for field-by-field details.
Example response
{
"job_id": "123e4567-e89b-12d3-a456-426614174000",
"total_rows": 3,
"total_processed": 3,
"limit": 100,
"offset": 0,
"results": [
{
"first_name": "Jane",
"last_name": "Doe",
"domain": "acme.com",
"email_domain": "acme.com",
"linkedin_url": null,
"email": "jane.doe@acme.com",
"status": "safe",
"substatus": "deliverable",
"explanation": "Safe to email. The mailbox exists and is deliverable.",
"confidence": 98,
"full_name": null,
"employer_name": null,
"employer_linkedin_url": null,
"all_emails": null,
"email_provider": "Google Workspace",
"mx_record": "aspmx.l.google.com",
"is_domain_catch_all": false,
"is_secure_email_gateway": false,
"is_disposable": false,
"is_role_account": false,
"is_free": false,
"credits_consumed": 1
},
{
"first_name": "John",
"last_name": "Smith",
"domain": "bigcorp.io",
"email_domain": "bigcorp.io",
"linkedin_url": null,
"email": null,
"status": "unknown",
"substatus": "no_address_found",
"explanation": "No deliverable address could be found for the given name at this domain.",
"confidence": null,
"full_name": null,
"employer_name": null,
"employer_linkedin_url": null,
"all_emails": null,
"email_provider": "Unknown",
"mx_record": null,
"is_domain_catch_all": null,
"is_secure_email_gateway": false,
"is_disposable": null,
"is_role_account": null,
"is_free": null,
"credits_consumed": 1
},
{
"first_name": "Priya",
"last_name": "Patel",
"domain": "studio.xyz",
"email_domain": "studio.xyz",
"linkedin_url": null,
"email": "priya@studio.xyz",
"status": "safe",
"substatus": "deliverable",
"explanation": "Safe to email. The mailbox exists and is deliverable.",
"confidence": 98,
"full_name": null,
"employer_name": null,
"employer_linkedin_url": null,
"all_emails": null,
"email_provider": "Microsoft Outlook",
"mx_record": "studio-xyz.mail.protection.outlook.com",
"is_domain_catch_all": false,
"is_secure_email_gateway": false,
"is_disposable": false,
"is_role_account": false,
"is_free": false,
"credits_consumed": 1
}
]
}
Authorizations
API key for authentication
Path Parameters
Response
Successful Response
Paginated results for a bulk email finder job.
Unique job identifier.
Example:
"123e4567-e89b-12d3-a456-426614174000"
Total rows submitted.
Example:
500
Rows processed so far.
Example:
500
Page size used for this response.
Example:
50
Row offset into the ordered result set.
Example:
0
Per-row search results, one object per submitted row.
Show child attributes
Show child attributes
⌘I
Get Bulk Email Finder Job Results
curl --request GET \
--url https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbisearch.com/v1/bulk-lookup/{job_id}/results")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"job_id": "123e4567-e89b-12d3-a456-426614174000",
"total_rows": 2,
"total_processed": 2,
"limit": 50,
"offset": 0,
"results": [
{
"first_name": "Jane",
"last_name": "Doe",
"domain": "acme.com",
"email_domain": "acme.com",
"linkedin_url": "https://www.linkedin.com/in/jane-doe",
"email": "jane.doe@acme.com",
"status": "safe",
"substatus": "deliverable",
"explanation": "Safe to email. The mailbox exists and is deliverable.",
"confidence": 99,
"full_name": "Jane Doe",
"employer_name": "Acme",
"employer_linkedin_url": "https://www.linkedin.com/company/acme",
"all_emails": [
{
"email": "jane.doe@acme.com",
"job_order": 1,
"company_linkedin_url": "https://www.linkedin.com/company/acme",
"email_domain": "acme.com"
}
],
"email_provider": "Google Workspace",
"mx_record": "aspmx.l.google.com",
"is_domain_catch_all": false,
"is_secure_email_gateway": false,
"is_disposable": false,
"is_role_account": false,
"is_free": false,
"credits_consumed": 1
},
{
"first_name": "John",
"last_name": "Smith",
"domain": "bigcorp.io",
"email_domain": "bigcorp.io",
"linkedin_url": "https://www.linkedin.com/in/john-smith",
"email": null,
"status": "unknown",
"substatus": "no_address_found",
"explanation": "We couldn't find a valid work email for this person.",
"confidence": null,
"full_name": "John Smith",
"employer_name": "Bigcorp",
"employer_linkedin_url": "https://www.linkedin.com/company/bigcorp",
"all_emails": [],
"email_provider": "Unknown",
"mx_record": null,
"is_domain_catch_all": null,
"is_secure_email_gateway": false,
"is_disposable": null,
"is_role_account": null,
"is_free": null,
"credits_consumed": 1
}
]
}