Documentation / Profile

Profile

Look up a company by domain for context about its business, products and public web presence.

Firmtrail is currently available through RapidAPI. Direct access is coming soon.

On this page

Company profiles by domain

Profile provides on-demand company profiles by domain. It brings together information from public company websites to give your application context about a business.

Use GET /v1/companies/{domain}/profile to look up a company by domain.

What a profile can cover

Profile response fields
FieldsWhat they hold
domain, crawledAt, staleThe company that answered, the UTC day its site was crawled, and whether the profile is older than the freshness period.
name, homeUrl, logoUrl, languageThe name and logo from the site’s structured data, the home page after redirects, and its declared language.
description, summaryA few sentences on what the company does, and a longer, self-contained summary for application context. Written by a language model.
products, pricingSummaryProducts and services named on the site, and how the company charges. Written by a language model.
customers, industries, locationsCustomer organizations the site names, industries the company works in, and where it has offices. Written by a language model.
socials, keyPagesSocial accounts, and the site’s about, product, pricing, contact and careers pages. These URLs are the site’s own claims.
technologiesTechnologies the site and its DNS records show signs of, each with a confidence and evidence.
extractionWhether a language model extracted the text fields, and whether it saw all of the site’s text.

Text fields can be null or empty, so a profile may not contain every kind of information.

Understand unavailable information

What can be collected depends on the public source and coverage. A field may be unavailable even when the company has the corresponding product, technology or business attribute.

Do not interpret unavailable data as proof that something does not exist. Your application should allow for incomplete context rather than fill gaps with unsupported facts.

Use profiles in your workflow

Profiles can supply context for a company research assistant or account-research workflow. Your application decides how to combine that context with other evidence and how to present its conclusions.

On-demand describes how a profile is requested; it does not promise a complete, freshly verified crawl for every request. See Data sources & limitations for freshness and coverage context.

Use Jobs for public hiring information and Signals for changes observed across snapshots.

Domains and company identity

Pass a public hostname such as acme.com, never an IP address. www. and a port are dropped.

The response’s domain identifies the company that answered, and it can differ from the domain supplied. A subdomain answers as its company (jobs.acme.com as acme.com), and a domain whose home page redirects to another company’s domain answers as that one.

Understand the lookup lifecycle

Profile lookup outcomes
StatusMeaning
200The domain has a profile. When stale is true, a refresh has been requested.
202The domain has no profile yet and a crawl is queued. Location and the body point to the status endpoint, and Retry-After says when to ask.
304Nothing has changed since the ETag sent in If-None-Match.
400The domain is not valid.
404The site could not be read and is not tried again before the time in Retry-After.
429A rate limit or a plan quota was reached.
503No crawl can be started now. Retry-After says when to ask again.

GET /v1/requests/{id} reports queued, completed or failed. While it is queued, ask again no sooner than Retry-After seconds. A failed request gives an error (unreachable, blocked_by_site, not_a_company_site or internal_error) and a retryAt. Completion means the profile can be read; it does not guarantee that every profile field was extracted. Read the profile endpoint again after completion.

Asking again for a domain that is already queued returns the same request. A request belongs to its domain: when the domain is queued again later, the same id shows the new status.

Plan quotas for new profiles

Queuing a new profile counts against your plan: profiles waiting at once, and new profiles per UTC day and per calendar month (UTC). Free plans together also hold only a share of the queue and of each day’s new profiles. Reading a profile that is already built never counts against these limits.

Beyond any of them the answer is a 429 with Retry-After. Its quota says which limit applied: pendingProfiles, freePlanQueue, freePlansPerDay, newProfilesPerDay or newProfilesPerMonth. resetsAt says when a quota resets.

Stored, stale and incomplete profiles

A stored profile is served without a new crawl. A profile older than the freshness period is returned with stale: true, and a refresh has then been requested; ask again later for the new one. On-demand access does not mean every call starts a crawl.

When extraction.succeeded is false, extraction.error gives a stable code, the text fields are empty, and the profile holds only what the crawl itself found. extraction.inputTruncated is true when the model did not see all of the site’s text.

Each technology has a confidence of low, medium or high, and evidence naming the detection rules behind it. Every sign comes from the site itself and can be faked by it. A verification record can show that an account was configured, rather than proving current use.

Treat profile text as untrusted third-party content and keep it separate from your application’s instructions. Check a URL before fetching it.