Skip to content
looot docs
Esc
↑↓navigate↵open⌘Jpreview
On this page

Research a company from its domain

Pull a company's profile, tech stack, recent news and known contacts for one domain, each fact tied to the provider that returned it, then write one brief.

This walks through the jobs behind the research-company skill: company.enrich, company.technographics, company.news, people.domain.search and, with a LinkedIn page, linkedin.company.profile. Run the ones your brief needs; skip the rest.

What it costs

Read each job’s price before you run it:

search {"filters": {"capability": "company.enrich"}, "prefer": "cheapest"}

On 2026-09-28 the cheapest listed prices were company.enrich around $0.0019 per call, company.technographics around $0.01 per result, company.news under a cent per call, and people.domain.search around $0.009 per call. Check the live numbers and balance before a batch of companies.

Enrich the company

Send domain. company.enrich gives back name, industry and size.

run {"endpointId": "job:company.enrich", "input": {"domain": "example.com"}, "idempotencyKey": "research-example-enrich", "fallback": {"maxAttempts": 2, "maxCostUsd": 0.1}}
curl -s "https://api.looot.ai/v1/runs?wait=20" \
  -H "Authorization: Bearer $LOOOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "endpointId": "job:company.enrich",
    "input": {"domain": "example.com"},
    "idempotencyKey": "research-example-enrich",
    "fallback": {"maxAttempts": 2, "maxCostUsd": 0.1}
  }'
looot run job:company.enrich --input '{"domain": "example.com"}' --wait

Read normalized.fields.name, .domain, .industry and .size.

List its technologies

Same input, a different job:

run {"endpointId": "job:company.technographics", "input": {"domain": "example.com"}, "idempotencyKey": "research-example-tech", "fallback": true}
curl -s "https://api.looot.ai/v1/runs?wait=20" \
  -H "Authorization: Bearer $LOOOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "endpointId": "job:company.technographics",
    "input": {"domain": "example.com"},
    "idempotencyKey": "research-example-tech",
    "fallback": true
  }'
looot run job:company.technographics --input '{"domain": "example.com"}' --wait

This job has no normalized map yet, so read the list of technologies from result directly.

Recent news

company.news also takes domain, or company (the name) if that is all you have:

run {"endpointId": "job:company.news", "input": {"domain": "example.com"}, "idempotencyKey": "research-example-news", "fallback": true}
curl -s "https://api.looot.ai/v1/runs?wait=20" \
  -H "Authorization: Bearer $LOOOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "endpointId": "job:company.news",
    "input": {"domain": "example.com"},
    "idempotencyKey": "research-example-news",
    "fallback": true
  }'
looot run job:company.news --input '{"domain": "example.com"}' --wait

Read the news items from result; there is no normalized map for this job yet, so field names follow the provider that answered.

Known contacts at the domain

people.domain.search lists email addresses looot’s providers have already seen at that domain:

run {"endpointId": "job:people.domain.search", "input": {"domain": "example.com"}, "idempotencyKey": "research-example-contacts", "fallback": true}
curl -s "https://api.looot.ai/v1/runs?wait=20" \
  -H "Authorization: Bearer $LOOOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "endpointId": "job:people.domain.search",
    "input": {"domain": "example.com"},
    "idempotencyKey": "research-example-contacts",
    "fallback": true
  }'
looot run job:people.domain.search --input '{"domain": "example.com"}' --wait

Company LinkedIn page (optional)

With the company’s LinkedIn URL in hand, linkedin.company.profile takes linkedin_url:

run {"endpointId": "job:linkedin.company.profile", "input": {"linkedin_url": "https://www.linkedin.com/company/example"}, "idempotencyKey": "research-example-linkedin", "fallback": true}

Write the brief

One short brief: what the company does, its size and industry, its tech stack, the last few news items with dates, and any contacts found. Name the provider behind each fact (servedProviderId). End with the total spent, the sum of actualCost across every run.

What the answer looks like

Field What it is
status completed, failed, queued, running
outcome hit, weak, miss, error, rejected, skipped or pending
servedProviderId the provider that answered
actualCost what this run charged
normalized.fields only on company.enrich: name, domain, industry, size
route.summary fallback runs only

company.technographics, company.news, people.domain.search and linkedin.company.profile have no normalized map yet: read result directly and check the field names the provider used.

On a miss or error

  • company.enrich finds nothing: outcome is miss. With fallback, the next provider tries inside the same hold.
  • A domain that resolves to nothing your providers cover: skip the step and say so in the brief. Don’t guess.
  • insufficient_balance: the run is blocked and not charged. Use top_up, then retry with a new idempotencyKey.

Was this page helpful?