Company Intelligence: Competitors, AI Traffic & People
Pricing
from $5.00 / 1,000 domains
Company Intelligence: Competitors, AI Traffic & People
Turn a list of company domains into one profile for each row. Each profile carries competitors, AI referral traffic, a popularity rank, firmographics and technographics. You can add the named leaders as an opt-in. The actor charges nothing for an empty result.
Pricing
from $5.00 / 1,000 domains
Rating
0.0
(0)
Developer
Joseph Schady
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
18 hours ago
Last modified
Categories
Share
What does Company Intelligence do?
Company Intelligence turns a list of company domains into one structured profile for each row. It reads six open public sources over plain HTTP and writes one dataset row for every domain you send.
Each profile carries a competitor list, a global popularity rank and the traffic that AI assistants refer. It also carries firmographics, domain registration and technographics. The named leaders are an opt-in. The actor uses no browser, no proxy, no login and no API key.
Start it from the Console, or call it from the Apify API. Both return the same dataset.
Why use Company Intelligence?
- Competitors with numbers, not names. Every competitor row carries a similarity score, monthly visits, a category and a top-country rank.
- AI referral traffic. The profile reports the visits that AI assistants sent, the share of all referrals they account for, and the engine split.
- One row for every input row, in your order. You join the output back on the string you sent. Six spellings of one domain give you six rows, and the actor charges the domain once.
- No charge for an empty result. The actor charges for a distinct domain that returns real data. A domain that returns none costs nothing.
- Honest nulls. A source that answers with a challenge, a rate limit or an empty page fills
no field. The profile records the outcome and leaves the value
null.
What data can Company Intelligence extract?
| Field | Type | Description |
|---|---|---|
inputDomain | string | The raw string you sent. Join on this field. |
domain | string | The normalised domain the actor fetched. |
duplicateOf | string or null | The first input row that normalises to the same domain. |
status | string | ok, no_data, invalid_input or not_attempted. |
tier | string | The coverage tier for this row: FULL, CORE, THIN or EMPTY. |
site | object | The site record: title, meta description, category, category rank, monthly visits, tags and the linked mobile apps. |
competitors | array | Up to 20 similar sites. Each row holds a domain, a similarity score, a similarity rank, monthly visits, a category and a top-country rank. |
aiReferral | object | The referred visits, the share of all referral visits, the ranked engines, the top-3 engine shares and 3 months of history. |
popularity | object | The global Tranco rank, the rank date, and the 30-day trend when the trend is available. |
firmographics | object | The company name, the description, the industries, the founding year, the employee band floor, the revenue band floor and the head-office location. |
categories | array | Every category value with the vocabulary it belongs to. The actor never merges two vocabularies. |
registration | object | The registrar, the registration date, the expiry date, the statuses, the nameservers and the DNSSEC flag, from RDAP. |
technographics | object | The mail provider, the DNS provider, the MX hosts, the SPF record, the DMARC policy and the vendor verification tokens. |
employees | object or null | The named leaders and their roles. This block is off by default. |
provenance | object | The source, the fetch time, the definition and the confidence for every value the actor filled. |
sourceOutcomes | array | The typed result for every source the run attempted, for this row. |
billing | object | Holds 2 flags: billable for the profile event, and employeesCharged for the employees add-on. |
The actor does not return keyword data, paid-search data or a traffic-source split. Version 1 excludes that source.
How to scrape company data
- Open the Input tab.
- Paste your company domains into Company domains, one for each line.
- Turn on Include employees if you want the named leaders. Read the personal-data notes below first.
- Click Start.
- Open the Output tab and read the dataset, or download it as JSON, CSV, Excel or HTML.
You can paste stripe.com, www.stripe.com, STRIPE.COM or https://stripe.com/pricing. The
actor normalises every entry before the first request. This matters: three of the sources answer
an un-normalised domain with an empty page and no error.
How much will it cost to run Company Intelligence?
The actor charges 2 pay-per-event events. The table gives the price for each one.
| Event | Price | The actor charges it when |
|---|---|---|
| The company profile | $5.00 for each 1,000 domains | The distinct domain returns real profile data. |
| The employees add-on | $4.00 for each 1,000 domains | Include employees is on, and the org chart returns named people. |
The 2 events are independent. A domain that returns a profile and people costs both prices. A domain that returns people and no profile costs the add-on price alone.
- A domain that returns no data costs nothing.
- A repeat spelling of a domain you already sent costs nothing.
- A malformed input costs nothing and sends no request.
- The add-on costs nothing while Include employees is off.
Apify bills the platform usage on top, from your plan.
You can set a maximum total charge for the run. The limit covers both events together. The actor
stops charging before it reaches that limit, writes not_attempted for every remaining row, and
ends the run normally. Caution: if you set no limit for the run, the actor applies no cap of
its own. The run summary reports capConfigured: false when this happens.
Input
The Input tab holds four fields.
| Field | Type | Default | What it does |
|---|---|---|---|
domains | array of strings | required | The company domains to profile. |
includeEmployees | boolean | false | Add the named leaders and their roles. It charges the add-on price. |
stripEmployeeNames | boolean | false | Remove the name, the person slug and the profile image from the employees block. |
mode | string | profile | profile returns one profile for each domain. wire-proof sends one request to every host, writes the result table, and stops. |
Output
The run writes one row for every input row to the default dataset, in the order you sent them. Download the dataset as JSON, CSV, Excel or HTML from the Output tab, or read it from the API.
The dataset carries six views: Overview, Competitors, AI traffic, Registration and
technographics, Employees and Diagnostics. The Overview view holds no billing column.
Read the Diagnostics view for the billing decision, or read the billing block in the row itself.
A shortened profile row looks like this:
{"inputDomain": "www.Stripe.com","domain": "stripe.com","status": "ok","tier": "FULL","site": { "category": "Finance", "categoryRank": 21, "monthlyVisits": 89824847 },"competitors": [{ "domain": "paypal.com", "similarityRank": 1, "similarityScore": 0.4342 }],"popularity": { "rank": 238, "rankDate": "2026-08-26", "trend30d": 2 },"firmographics": { "name": "Stripe", "hqCity": "San Francisco", "wikidataQid": "Q7624104" },"billing": { "billable": true, "employeesCharged": true }}
A row that returns nothing looks like this:
{"inputDomain": "zzzqqxfoobarbaz-notreal.io","domain": "zzzqqxfoobarbaz-notreal.io","status": "no_data","reason": "unknown_domain","tier": "EMPTY","billing": { "billable": false, "employeesCharged": false }}
Tips
- Send bare hostnames when you can. The actor normalises the rest, and a clean list is easier to join.
- Read the
billingblock to see which events the actor charged for each row. - Read the
sourceOutcomesarray when a block isnull. It names the source and the outcome. - Read
provenanceto see which source filled a value and when it fetched the value. - Run the actor in
wire-proofmode when a whole block goes empty. The mode sends one request to every host and reports what each one answered.
Coverage
These figures come from a 2026-08-26 probe of 52 real domains across the US, the EU, LATAM and APAC. The list was hand-built to span company size and geography. A customer list holds more long tail than this sample, so your own fill rate can be lower.
| Block | Fill on the tested domains |
|---|---|
| Competitor list | 51 of 52 |
| Global rank | 52 of 52 |
| AI referral split | 48 of 52 |
| Company name | 39 of 52 |
| Linked mobile apps | 38 of 52 |
| Wikidata company entity | 37 of 52 |
| Site tags | 16 of 52 |
Every figure above assumes a normalised domain, which the actor does for you.
The 30-day rank trend has partial coverage. The actor reads the rank for a large list from a bulk
file. That file carries no history, so popularity.trend30d is often null. The trendReason
field says why.
FAQ, disclaimers and support
Which sources does the actor read?
Six open sources answer for the blocks below.
| Block | Source |
|---|---|
site, competitors | A website-similarity directory. |
aiReferral, part of firmographics | An AI-traffic page. |
popularity | The Tranco list. |
firmographics, categories | Wikidata. |
registration, technographics | RDAP and public DNS. |
employees | A public org chart. |
The actor names the source and the fetch time for every value it fills, in the provenance
block.
Why is a block null?
A source answered with a challenge, a rate limit, an empty page, or nothing about your domain. The
actor never invents a value. Read sourceOutcomes for the typed reason.
Why does the AI figure look small next to the site visits?
The two numbers count different things. site.monthlyVisits estimates every visit to the site.
aiReferral.aiReferredVisits counts only the visits an AI assistant referred in the snapshot
month. Never sum them and never compare them.
Personal data
Warning: if you turn on Include employees, the output contains the names of real people, their roles and links to their public profiles. You are the controller of that data. Establish your own lawful basis before you run the actor with the option on, and delete the output when your basis ends.
- The employees block is off by default. When it is off, the actor sends no request to the org chart host and it charges no add-on.
- Turn on Strip employee names to keep the roles and the counts without the identifiers. The actor then omits the full name, the person slug and the profile image.
- A role alone can still identify a person at a small company. The strip does not cover that case.
- The actor reads only pages that are already public. It holds no data between runs and stores nothing outside your dataset.
- Send a data-subject request to the source that publishes the profile. This actor keeps no copy.
Other disclaimers
- The actor reports what each source published. It never corrects a source's own data defect, because a silent correction is harder to audit than a wrong value.
- A domain registration date is not a founding year. The profile keeps the two apart.
- A vendor verification token proves that the company has used the vendor. It does not prove that the company pays for the vendor now.
- The employee band floor and the revenue band floor have no ceiling. The real figure can be much higher.
Support
Open the Issues tab on this actor to report a defect or to ask for a field. Include the run id and the input domain. Read the API tab to call the actor from your own code.