Search companies
Async company discovery. Returns operationId; poll GET /api/operations/:id.
POST
/
api
/
v1
/
companies
/
search
Search companies
curl --request POST \
--url https://developer.thehog.ai/api/v1/companies/search \
--header 'Content-Type: application/json' \
--header 'X-Access-Key: <api-key>' \
--header 'X-Secret-Key: <api-key>' \
--data '
{
"query": "B2B SaaS companies in Austin hiring engineers",
"limit": 25,
"includeSignals": false,
"filters": {
"titles": [
"<string>"
],
"locations": [
"<string>"
],
"industries": [
"<string>"
],
"employeeCount": {
"min": 1,
"max": 1
},
"signals": [
"<string>"
],
"company": {
"names": [
"<string>"
],
"domains": [
"<string>"
],
"linkedinUrls": [
"<string>"
],
"industries": [
"<string>"
],
"employeeCount": {
"min": 1,
"max": 1
},
"signals": [
"<string>"
]
}
},
"confirm": true
}
'const options = {
method: 'POST',
headers: {
'X-Access-Key': '<api-key>',
'X-Secret-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
query: 'B2B SaaS companies in Austin hiring engineers',
limit: 25,
includeSignals: false,
filters: {
titles: ['<string>'],
locations: ['<string>'],
industries: ['<string>'],
employeeCount: {min: 1, max: 1},
signals: ['<string>'],
company: {
names: ['<string>'],
domains: ['<string>'],
linkedinUrls: ['<string>'],
industries: ['<string>'],
employeeCount: {min: 1, max: 1},
signals: ['<string>']
}
},
confirm: true
})
};
fetch('https://developer.thehog.ai/api/v1/companies/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://developer.thehog.ai/api/v1/companies/search"
payload = {
"query": "B2B SaaS companies in Austin hiring engineers",
"limit": 25,
"includeSignals": False,
"filters": {
"titles": ["<string>"],
"locations": ["<string>"],
"industries": ["<string>"],
"employeeCount": {
"min": 1,
"max": 1
},
"signals": ["<string>"],
"company": {
"names": ["<string>"],
"domains": ["<string>"],
"linkedinUrls": ["<string>"],
"industries": ["<string>"],
"employeeCount": {
"min": 1,
"max": 1
},
"signals": ["<string>"]
}
},
"confirm": True
}
headers = {
"X-Access-Key": "<api-key>",
"X-Secret-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "<string>",
"operationId": "<string>",
"status": "queued",
"pollUrl": "<string>"
}{
"statusCode": 400,
"error": "Bad Request",
"message": "Validation failed",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b",
"errors": [
{
"property": "body.query",
"message": "query must be a string",
"constraints": {
"isString": "query must be a string"
}
}
]
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication is required.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}{
"statusCode": 402,
"error": "Payment Required",
"message": "Insufficient credits.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}{
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}POST /api/v1/companies/search
Search for companies by firmographics, technographics, and signals. Async.Search for companies by industry, headcount, revenue, technology, hiring signals, and more. This is an async endpoint — returns
202 Accepted with a poll URL.
Example
curl -X POST https://developer.thehog.ai/api/v1/companies/search \
-H "X-Access-Key: ak_xxxxxxxxxxxxxxxx" \
-H "X-Secret-Key: sk_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"query": "Series B SaaS companies in the US with 50-200 employees", "limit": 10}'
Authorizations
The public API key from the Credentials page.
The API secret shown when the credential is created.
Headers
Optional. Reusing the same key for the same organization returns the existing queued operation.
Body
application/json
⌘I
Search companies
curl --request POST \
--url https://developer.thehog.ai/api/v1/companies/search \
--header 'Content-Type: application/json' \
--header 'X-Access-Key: <api-key>' \
--header 'X-Secret-Key: <api-key>' \
--data '
{
"query": "B2B SaaS companies in Austin hiring engineers",
"limit": 25,
"includeSignals": false,
"filters": {
"titles": [
"<string>"
],
"locations": [
"<string>"
],
"industries": [
"<string>"
],
"employeeCount": {
"min": 1,
"max": 1
},
"signals": [
"<string>"
],
"company": {
"names": [
"<string>"
],
"domains": [
"<string>"
],
"linkedinUrls": [
"<string>"
],
"industries": [
"<string>"
],
"employeeCount": {
"min": 1,
"max": 1
},
"signals": [
"<string>"
]
}
},
"confirm": true
}
'const options = {
method: 'POST',
headers: {
'X-Access-Key': '<api-key>',
'X-Secret-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
query: 'B2B SaaS companies in Austin hiring engineers',
limit: 25,
includeSignals: false,
filters: {
titles: ['<string>'],
locations: ['<string>'],
industries: ['<string>'],
employeeCount: {min: 1, max: 1},
signals: ['<string>'],
company: {
names: ['<string>'],
domains: ['<string>'],
linkedinUrls: ['<string>'],
industries: ['<string>'],
employeeCount: {min: 1, max: 1},
signals: ['<string>']
}
},
confirm: true
})
};
fetch('https://developer.thehog.ai/api/v1/companies/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://developer.thehog.ai/api/v1/companies/search"
payload = {
"query": "B2B SaaS companies in Austin hiring engineers",
"limit": 25,
"includeSignals": False,
"filters": {
"titles": ["<string>"],
"locations": ["<string>"],
"industries": ["<string>"],
"employeeCount": {
"min": 1,
"max": 1
},
"signals": ["<string>"],
"company": {
"names": ["<string>"],
"domains": ["<string>"],
"linkedinUrls": ["<string>"],
"industries": ["<string>"],
"employeeCount": {
"min": 1,
"max": 1
},
"signals": ["<string>"]
}
},
"confirm": True
}
headers = {
"X-Access-Key": "<api-key>",
"X-Secret-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "<string>",
"operationId": "<string>",
"status": "queued",
"pollUrl": "<string>"
}{
"statusCode": 400,
"error": "Bad Request",
"message": "Validation failed",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b",
"errors": [
{
"property": "body.query",
"message": "query must be a string",
"constraints": {
"isString": "query must be a string"
}
}
]
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication is required.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}{
"statusCode": 402,
"error": "Payment Required",
"message": "Insufficient credits.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}{
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred.",
"path": "/api/v1/search",
"timestamp": "2026-05-21T09:08:10.000Z",
"requestId": "506af9b3-01a9-43be-9eb4-8458fe3e4f5b"
}