curl --request GET \
--url https://public-api.lonescale.com/companies/search \
--header 'x-api-key: <api-key>'import requests
url = "https://public-api.lonescale.com/companies/search"
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://public-api.lonescale.com/companies/search', 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://public-api.lonescale.com/companies/search",
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://public-api.lonescale.com/companies/search"
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://public-api.lonescale.com/companies/search")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.lonescale.com/companies/search")
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{
"results": [
{
"linkedinId": "2135371",
"linkedinUniversalName": "stripe",
"linkedinUrl": "https://www.linkedin.com/company/stripe",
"name": "Stripe",
"domain": "stripe.com",
"websiteUrl": "https://stripe.com",
"logoUrl": "<string>",
"description": "<string>",
"linkedinTagline": "Help increase the GDP of the internet.",
"industry": "Computer Software",
"foundedYear": 2010,
"staffCount": 13809,
"staffCountRange": {
"start": 5001,
"end": 10000
},
"countryCode": "US",
"city": "South San Francisco",
"postalCode": "94080",
"linkedinSpecialities": [
"<string>"
],
"linkedinHashtags": [
"<string>"
],
"confirmedLocations": [
{
"country": "<string>",
"geographicArea": "<string>",
"city": "<string>",
"postalCode": "<string>",
"line1": "<string>",
"headquarter": true
}
],
"fundingData": {},
"headcount": [
{
"function": "Engineering",
"count": 5058
}
]
}
],
"count": 1,
"custom": {
"crm_id": "abc-123",
"priority": "1"
}
}{
"message": "at least one of name, domain, linkedin_id, slug is required",
"error": "Bad Request",
"statusCode": 400
}{
"message": "Invalid API Key",
"error": "Unauthorized",
"statusCode": 401
}{
"message": "ThrottlerException: Too Many Requests",
"error": "Too Many Requests",
"statusCode": 429
}Search Company
Resolve a single company by domain, LinkedIn id, LinkedIn slug, or name and return a stable, fixed-shape result.
At least one of domain, linkedin_id, slug, or name is required. The response always returns the same set of fields — null (or [] for arrays) is used for any field we do not have data for, so client integrations can rely on a stable schema.
When enrich=true and no cached match is found, the API will trigger an on-demand enrichment via data-sync; when enrich=true and a result has both a LinkedIn id and a universal name, a function-by-function headcount breakdown is also attached.
The optional custom map (e.g. custom[crm_id]=abc-123) is echoed back unchanged at the top level of the response — useful for correlating results with records on your side.
Rate limited to 5 requests per minute.
curl --request GET \
--url https://public-api.lonescale.com/companies/search \
--header 'x-api-key: <api-key>'import requests
url = "https://public-api.lonescale.com/companies/search"
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://public-api.lonescale.com/companies/search', 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://public-api.lonescale.com/companies/search",
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://public-api.lonescale.com/companies/search"
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://public-api.lonescale.com/companies/search")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.lonescale.com/companies/search")
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{
"results": [
{
"linkedinId": "2135371",
"linkedinUniversalName": "stripe",
"linkedinUrl": "https://www.linkedin.com/company/stripe",
"name": "Stripe",
"domain": "stripe.com",
"websiteUrl": "https://stripe.com",
"logoUrl": "<string>",
"description": "<string>",
"linkedinTagline": "Help increase the GDP of the internet.",
"industry": "Computer Software",
"foundedYear": 2010,
"staffCount": 13809,
"staffCountRange": {
"start": 5001,
"end": 10000
},
"countryCode": "US",
"city": "South San Francisco",
"postalCode": "94080",
"linkedinSpecialities": [
"<string>"
],
"linkedinHashtags": [
"<string>"
],
"confirmedLocations": [
{
"country": "<string>",
"geographicArea": "<string>",
"city": "<string>",
"postalCode": "<string>",
"line1": "<string>",
"headquarter": true
}
],
"fundingData": {},
"headcount": [
{
"function": "Engineering",
"count": 5058
}
]
}
],
"count": 1,
"custom": {
"crm_id": "abc-123",
"priority": "1"
}
}{
"message": "at least one of name, domain, linkedin_id, slug is required",
"error": "Bad Request",
"statusCode": 400
}{
"message": "Invalid API Key",
"error": "Unauthorized",
"statusCode": 401
}{
"message": "ThrottlerException: Too Many Requests",
"error": "Too Many Requests",
"statusCode": 429
}Authorizations
Provide your API key in the x-api-key header.
Query Parameters
Company domain (e.g. stripe.com). Schemes, www., paths, and casing are normalized server-side.
1Numeric LinkedIn company id (the digits in linkedin.com/company/{id}).
1LinkedIn universal name / slug (the trailing segment in linkedin.com/company/{slug}).
1Company name. Best-effort match — prefer domain, linkedin_id, or slug for deterministic resolution.
1When true, fall back to on-demand enrichment if no cached match is found, and attach a headcount breakdown when possible. Defaults to false.
Arbitrary key/value passthrough echoed unchanged in the response — useful for correlating results with records on your side. Pass a URL-encoded JSON object, e.g. custom=%7B%22crm_id%22%3A%22abc-123%22%2C%22priority%22%3A1%7D (decodes to {"crm_id":"abc-123","priority":1}). Only flat string/number values are kept — nested objects, arrays, booleans and null are dropped.
Response
Search completed. results contains at most one company, or is empty when nothing matched.
At most one matching company. Empty when nothing was found.
Show child attributes
Show child attributes
Number of items in results (0 or 1).
1
The custom map from the request, echoed unchanged. {} when none was sent.
Show child attributes
Show child attributes
{ "crm_id": "abc-123", "priority": "1" }

