# B2B Website Contact, Email, EU VAT & Impressum Scraper (`dekaz/global-b2b-intelligence-engine`) Actor

Source-backed legal identity, public business contacts and live EU VAT verification from domains. Export evidence to Clay, n8n, Make or CRM.

- **URL**: https://apify.com/dekaz/global-b2b-intelligence-engine.md
- **Developed by:** [Dekaz](https://apify.com/dekaz) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 83.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$6.00 / 1,000 completed domain inspections

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## B2B Website Contact, Email, EU VAT & Impressum Scraper

**Source-backed legal identity, public business contacts and live EU VAT verification.** Enrich company domains with reviewable evidence and separate inspection-completeness and name-comparison states. Paste up to **50,000 domains**, then export CSV or JSON for agency research, CRM cleanup and supplier onboarding.

**$0.006 per completed domain inspection: $6 for 1,000 inspections.** Platform usage during an Apify run is included; check the Pricing tab before starting. Partial HTTP 200 results are billable.

For a one-off list of 1,000 domains, $6 is $293 below a **hypothetical $299 monthly software budget**. This is budget arithmetic, not a competitor quote or a claim of feature equivalence. The separate gateway products' **$19/month Pro plan** has its own quota and billing; it is not an Apify subscription or included credit.

**Complete observed output:** captured on 2026-10-16 at 18:07 UTC with engine 1.0.0. This unchanged historical Actor dataset record includes optional raw evidence; it is not a new benchmark or a guarantee of current coverage.

```json
{
  "result_id": "cd0edc93f9b7938893e81fb9a0e37e67a1954eb304dd9c025f112a6aa3d41d9a", "input_index": 1, "domain": "futuroinformatica.com", "status": "inspected", "success": true,
  "legal_name": "Futuro Informática Profesional, S.L.", "legal_name_status": "found", "country_hint": null, "tax_ids": "ESB92588243", "vat_status": "not_checked", "vat_valid": null, "official_name": null, "official_address": null,
  "emails": "info@futuroinformatica.com | soporte@futuroinformatica.com", "phones": "+34951464351 | +34952051028 | 9514643515 | 952051028 | 951464351", "linkedin": "", "x": "", "instagram": "", "directors": "", "company_registers": "",
  "mail_providers": "", "sending_providers": "", "spf_status": "observed", "spf_policy": "softfail", "dmarc_status": "observed", "dmarc_policy": "none", "spoofing_risk": "monitoring_only",
  "source_urls": "https://www.futuroinformatica.com/ | https://www.futuroinformatica.com/aviso-legal.html | https://www.futuroinformatica.com/contacto.html", "warning_codes": "partial_web_coverage", "error_code": null, "error_message": null,
  "retrieved_at": "2026-10-16T18:07:09.985Z", "elapsed_ms": 1340, "attempts": 1, "billing_status": "charged",
  "raw": {"success":true,"product":"full_enrich","domain":"futuroinformatica.com","retrieved_at":"2026-10-16T18:07:09.985Z","legal_entity":{"status":"found","name":"Futuro Informática Profesional, S.L.","country_hint":null,"source_url":"https://www.futuroinformatica.com/contacto.html","candidates":[{"name":"Futuro Informática Profesional, S.L.","source_url":"https://www.futuroinformatica.com/contacto.html"}]},"tax_identifiers":[{"kind":"local_tax_id","country_code":"ES","value":"ESB92588243","format_valid":true,"source_url":"https://www.futuroinformatica.com/contacto.html","verification":"structure_only","identifier_type":null,"evidence_label":"CIF"}],"directors":[],"company_registers":[],"contacts":{"emails":[{"value":"info@futuroinformatica.com","source_url":"https://www.futuroinformatica.com/contacto.html"},{"value":"soporte@futuroinformatica.com","source_url":"https://www.futuroinformatica.com/contacto.html"}],"phones":[{"value":"+34951464351","source_url":"https://www.futuroinformatica.com/contacto.html"},{"value":"+34952051028","source_url":"https://www.futuroinformatica.com/contacto.html"},{"value":"9514643515","source_url":"https://www.futuroinformatica.com/contacto.html"},{"value":"952051028","source_url":"https://www.futuroinformatica.com/contacto.html"},{"value":"951464351","source_url":"https://www.futuroinformatica.com/contacto.html"}],"social":{"linkedin":[],"x":[],"instagram":[]}},"pages":[{"url":"https://www.futuroinformatica.com/legal","status":"http_404","http_status":404,"elapsed_ms":994},{"url":"https://www.futuroinformatica.com/","status":"ok","http_status":200,"elapsed_ms":1146},{"url":"https://www.futuroinformatica.com/aviso-legal.html","status":"ok","http_status":200,"elapsed_ms":136},{"url":"https://www.futuroinformatica.com/contacto.html","status":"ok","http_status":200,"elapsed_ms":152}],"vat_validation":{"status":"not_checked","valid":null,"country_code":null,"vat_number":null,"format_valid":false,"official_name":null,"official_address":null,"checked_at":null,"source":"VIES","reason":"no_eu_vat_detected","domain_ownership_verified":false},"dns":{"domain":"futuroinformatica.com","resolver":"https://cloudflare-dns.com/dns-query","queries":{"mx":{"status":"ok","rcode":0,"dnssec_authenticated":false,"record_count":1},"txt":{"status":"ok","rcode":0,"dnssec_authenticated":false,"record_count":5},"dmarc":{"status":"ok","rcode":0,"dnssec_authenticated":false,"record_count":1}},"mx":{"status":"observed","records":[{"priority":10,"exchange":"mail.nominalia.com"}],"null_mx":false,"issues":[]},"spf":{"status":"observed","records":["v=spf1 include:spf.mailjet.com include:futuroinformatica.ip-zone.com include:spf.webapps.net ~all"],"includes":[{"domain":"spf.mailjet.com","qualifier":"+","macro":false},{"domain":"futuroinformatica.ip-zone.com","qualifier":"+","macro":false},{"domain":"spf.webapps.net","qualifier":"+","macro":false}],"redirect":null,"all_policy":"softfail","issues":[],"recursive_evaluation":false},"dmarc":{"status":"observed","records":["v=DMARC1; p=none; rua=mailto:ssalvia@futuroinformatica.com; ruf=mailto:ssalvia@futuroinformatica.com; pct=100; ri=86400"],"policy":"none","pct":100,"issues":[],"scope":"exact_domain_only","organizational_fallback_checked":false},"providers":{"inbound":[],"outbound":[]},"limitations":["DNS observations are configuration signals, not proof of active subscriptions or email delivery.","Only the exact requested domain and its _dmarc name are queried; parent policies, sending subdomains, DKIM and nested SPF records are not inspected.","SPF and DMARC checks are limited syntax heuristics; sender authorization and policy enforcement are not fully evaluated.","Missing MX does not rule out address-record fallback. DNS errors remain unknown; a missing _dmarc name is reported only when the base domain resolves."],"spoofing_risk":{"status":"monitoring_only","policy":"none","message":"The published DMARC policy requests monitoring without rejection or quarantine."}},"warnings":[{"code":"partial_web_coverage","message":"Some pages were unavailable, blocked, oversized or outside the time budget."}],"timing":{"budget_ms":4000,"elapsed_ms":1340,"partial":true,"subrequests":9}}
}
```

Here, vat_valid is null because no official VAT check completed. Source URLs, warning codes and billing status make the result auditable. No programming or separate enrichment-service subscription is required.

### What you get

| Data | What the Actor returns |
| --- | --- |
| Company identity | Legal name candidates using forms such as GmbH, AG, Ltd, PLC, Inc., LLC, Corp., S.A.S., S.L. and B.V. |
| Legal notices | Public information discovered on homepages and legal pages, including Impressum, aviso legal and mentions légales |
| Tax and registry identifiers | Labeled identifiers with country, structure-check result and source page; UK company numbers where detected |
| EU VAT validation | A live VIES check when one eligible VAT candidate is unambiguous, with official name and address when returned |
| Public contacts | Corporate-domain emails, phone numbers and links to company profiles on LinkedIn, X and Instagram |
| Directors and registers | Names and references explicitly stated in the page, kept separate from official registry verification |
| Email infrastructure | MX, bounded SPF include/redirect paths and RFC 9989 DMARC discovery, with provider evidence and explicit coverage limits |
| Review signals | Ambiguous legal names, unavailable pages, missing fields and partial validation results |

Supported email-provider patterns include Google Workspace, Microsoft 365, Zoho and Proton. Bounded positive sending-policy paths can identify HubSpot, Klaviyo, ActiveCampaign, SendGrid, Mailchimp and Amazon SES.

### Run your first domain in about a minute

With an Apify account already set up, open **Input**, switch to **JSON**, paste the example below, set the run's **maximum charge** to at least $0.006, and select **Start**. When it finishes, open the dataset and choose JSON or CSV export. Account setup and website response time are additional.

```json
{
  "domains": [
    "www.futuroinformatica.com"
  ],
  "maxDomains": 1,
  "maxConcurrency": 1,
  "maxRetries": 0,
  "includeRaw": false
}
```

For a list, paste one domain per line into **Scrape company domains from a list**, or replace the domains array. Keep maxConcurrency at 5 and includeRaw at false for a larger first batch. Raise maxDomains to the number you want to inspect. Test 20 to 100 representative domains before submitting a full list. Example domains demonstrate input format; field availability can change. Enable includeRaw to obtain the complete nested evidence shown in the historical example above.

### Inputs and batch size

| Input | Purpose |
| --- | --- |
| `domainsText` | A pasted list of domains or website URLs, one per line |
| `domains` | An array of domain or website URL strings |
| `maxConcurrency` | Simultaneous domain inspections; default 5, maximum 20 |
| `maxDomains` | Maximum number of unique domains to inspect; default and maximum 50,000 |
| `maxRetries` | Retries for eligible transient inspection failures; default 1, allowed range 0 to 2 |
| `includeRaw` | Include the complete structured engine response with each output row; default `false` |

If both domainsText and domains are supplied, they are combined and deduplicated. Invalid entries and skipped duplicates are reported in **Review rejected and duplicate domains**. Open **Review run progress and event billing** to check processed domains, remaining domains and why a run stopped.

You can submit up to 50,000 unique domains in one run. Duplicate normalized domains in the same input are inspected once. This is a domain-enrichment job: supplying a page URL selects its website rather than instructing the Actor to crawl every URL on that site.

Large batches take longer than single-domain requests. Completion time depends on upstream sites, DNS, VIES availability, selected concurrency and the run's resource limits. Start a long batch asynchronously and retrieve its dataset when the run finishes; do not keep a short HTTP request waiting for 50,000 results.

### Outputs for CSV and JSON

The default dataset contains flat columns for spreadsheet use. Company, VAT, contact and DNS fields can be filtered without unpacking nested JSON. Multiple values in a scalar flat column are separated by `|`. The `evidence` array is always present in JSON, even with `includeRaw=false`; use a JSON export to retain its structured records. Enable `includeRaw` when your workflow also needs the detailed evidence, candidate lists, page outcomes and validation responses.

| Column group | Fields |
| --- | --- |
| Inspection | `result_id`, `input_index`, `domain`, `status`, `success`, `retrieved_at`, `elapsed_ms`, `attempts` |
| Company | `legal_name`, `legal_name_status`, `legal_address`, `legal_address_status`, `country_hint`, `directors`, `company_registers` |
| Tax | `tax_ids`, `vat_status`, `vat_valid`, `official_name`, `official_address` |
| Contacts | `emails`, `phones`, `linkedin`, `x`, `instagram` |
| DNS | `mail_providers`, `sending_providers`, `spf_status`, `spf_policy`, `dmarc_status`, `dmarc_policy`, `spoofing_risk` |
| Evidence and outcome | `source_urls`, `evidence`, `quality_status`, `identity_match_status`, `engine_version`, `warning_codes`, `error_code`, `error_message`, `billing_status` |
| Optional detail | `raw` when `includeRaw` is enabled |

Read each row's `status` before using its business fields. `inspected` means the engine returned an inspection result; `error` means it could not complete an inspection. An inspected domain can have useful DNS information while its legal name is unavailable. A missing field means the Actor did not establish that value in this inspection; it does not prove the company lacks that property.

For spreadsheet workflows, keep the domain and source links beside the extracted fields so reviewers can trace a value to the public page. For automated workflows, branch on the validation and partial-result statuses instead of treating every completed row as a fully verified business.

### Pay per inspected domain

The billing event is **`domain-inspected`**. One event represents one completed domain inspection that returned HTTP 200 from the enrichment engine.

**You pay for the inspection, not for a guaranteed company match.** A charged inspection can contain partial information, no legal name, an invalid VAT result, or an unavailable VIES status. The dataset makes these outcomes visible.

Invalid inputs, duplicate domains skipped within the same input, and engine or infrastructure failures do not trigger this custom event. The Actor checks the available event budget and stops scheduling further work when the charge limit is reached.

This Actor uses the full-enrichment route. At least one inspected webpage must be available for a billable HTTP 200 result. If every attempted webpage fails, the engine returns HTTP 502 and the failed inspection is not charged, even when DNS records were available. A readable webpage can still produce a billable partial result with an unavailable VIES check or missing legal fields.

HTTP 422 outcomes are also unbilled and are not retried. HTTP 502 outcomes may be retried within `maxRetries`; only a later completed HTTP 200 result can trigger one inspection event. The engine's standalone VAT route uses HTTP 422 for no eligible or ambiguous VAT candidates and HTTP 502 for unavailable VIES validation, but this bulk Actor runs the combined domain-enrichment route rather than selling standalone VAT checks.

The `billing_status` field distinguishes confirmed `charged` events, `not_chargeable` outcomes, `local` runs without marketplace charging and `budget_exhausted` results. `unknown_not_retried` means a billing attempt did not return a reliable acknowledgement; it may have reached Apify. The Actor does not retry that ambiguous charge. Other completed work in that batch is saved as `unbilled_after_charge_error`. Check the run's charge history before reconciling it; the run remains halted until its billing state is reviewed.

**$0.006 per completed inspection. Platform usage during the run is included.** At that event price:

| Completed, billable inspections | Event charges |
| ---: | ---: |
| 100 | $0.60 |
| 1,000 | $6.00 |
| 10,000 | $60.00 |
| 50,000 | $300.00 |

Check the **Pricing** tab for the current event price and any additional charges. Set a maximum charge before starting. Standard Apify storage-operation charges may apply when accessing the dataset after the run. See [Apify's explanation of Actor pricing and spending limits](https://docs.apify.com/actors/running/actors-in-store).

### Interrupted runs and retries

The Actor stores progress for resuming the same run, including its position in the input and pending work. Retryable inspection failures can use the configured `maxRetries`; a completed partial HTTP 200 inspection is not repeatedly charged to chase missing fields.

The dataset and event billing are separate services. A rare interruption during an acknowledged or retried dataset write can leave repeated rows. Use the stable `result_id` to deduplicate such rows when importing results. Starting a new run is a new inspection job with its own charges; previous runs are not a cross-run billing cache.

### Practical workflows

#### Agency account enrichment

Import a customer or prospect website list, enrich the domains and filter by legal-name coverage, corporate contact availability or observed email provider. Send ambiguous records to a review sheet instead of filling a CRM with guessed company identities.

#### EU supplier onboarding

Discover public VAT identifiers and inspect the VIES status before requesting missing details from a supplier. Preserve the source URL and official response when available. A VIES response concerns the VAT number; it does not prove that the number belongs to the submitted website.

#### DACH company research

Extract information from Impressum pages, including legal names, stated directors and company-register references. Use the source page to verify the role and context of each person or entity before relying on it.

#### Email stack segmentation

Group domains by recognized inbound email-provider patterns and bounded SPF include/redirect evidence. Inspect discovered effective DMARC policies set to monitoring-only for further review; an exact-domain missing record can inherit a policy. These observations support research and audits; they do not establish an active software subscription or guarantee email delivery.

#### No-code setup: Clay, n8n, Make and Zapier

The native **Apify** integrations below start this Actor and use **Apify event billing**. An **HTTP call to a marketplace gateway** uses that gateway's subscription and metering instead. A gateway key does not pay for an Apify run. First-time account connections and large batch runs take longer than these one-minute configuration examples.

**Clay native Apify enrichment:** Select **Add enrichment**, search **Apify**, and choose **Run Apify Actor**. Connect your Apify account, select this Actor, and paste the one-domain input above into **Input Data**. Test one row; then insert your domain column token as the domainsText value and remove domains. Use Clay's token picker and follow its native JSON-token handling, which adds no extra quotes around a column token. Set maxDomains to 1 for row-by-row runs. Map legal_name, emails and vat_status from the result. [Clay's Apify setup](https://university.clay.com/docs/apify-integration-overview).

**Clay.com HTTP API enrichment:** For a subscribed single-domain gateway product, select **Add enrichment → HTTP API → Configure**, choose **GET**, paste that product's actual endpoint URL ending in /v1/full-enrich, and map your domain column to its domain query parameter. Store the marketplace's exact authentication headers in an **HTTP API app account**, test one row, and map returned fields. Use the complete gateway URL and authentication headers shown in your subscribed product documentation. [Clay HTTP API configuration](https://university.clay.com/docs/http-api-integration-overview).

**n8n lead gen:** Add the official Apify node, select **Run an Actor**, connect your Apify credential, select this Actor, and paste the example as **Custom input**. Enable **Wait for finish** for the one-domain test. Add **Get Dataset Items** and map **Dataset ID** to defaultDatasetId from the run. For a large list, use an asynchronous run plus **On new Apify event**, filtered to **Succeeded**, before retrieving and paginating the dataset. [Apify's n8n instructions](https://docs.apify.com/integrations/n8n).

**Make.com B2B webhook:** For a one-domain test add **Apify → Run an Actor**, connect Apify, select this Actor, paste the example JSON and set **Run synchronously = Yes**. Add **Apify → Get Dataset Items** with the previous module's defaultDatasetId. For long jobs, start asynchronously and use a separate **Watch Actor Runs → Get Dataset Items** scenario; Watch Actor Runs creates the completion webhook. Filter for successful runs before importing data. [Apify's Make instructions](https://docs.apify.com/integrations/make).

**Zapier domain lookup:** Use the Apify connection to start a run with one domain and retrieve its dataset after completion, or use a marketplace's documented HTTP endpoint through Webhooks by Zapier. The selected route determines the bill. [Apify's Zapier integration](https://docs.apify.com/integrations/zapier).

#### Use the Actor from an AI agent

Claude Code, Cursor and other MCP clients can access Actors through Apify's MCP server. After connecting your own Apify account, have the agent find this Actor, read its input schema, call it with domains or domainsText, then retrieve dataset items. Pass a spending limit in **callOptions.maxTotalChargeUsd**, not in Actor input. The **call-actor** tool returns run and storage identifiers; **get-dataset-items** retrieves the rows. Batch jobs may outlast the first wait. This Actor does not run a separate MCP server. [Apify MCP tools and spending options](https://docs.apify.com/mcp).

### Coverage and interpretation

- **Web coverage:** The engine reads a bounded selection of public static pages. It does not execute browser JavaScript, log in, solve challenges or guarantee access to blocked websites.
- **Parsing limits:** An inspection attempts at most four pages and shares a parsing allowance of 64 KiB of raw page content, 16 KiB of visible text and 1,500 markup tokens across them. Individual responses above 192 KiB are rejected before parsing. Oversized or complex pages may be reported as `parse_budget_exceeded`. If homepage parsing fails, a bounded scan of at most 384 anchors can still discover a smaller legal page; those link hints are not accepted as legal text evidence. If no webpage can be processed, the full inspection returns an unbilled HTTP 502. These limits prioritize bounded processing and reduce coverage on large pages.
- **Time budget:** Each inspection attempt has a four-second application work budget. Retries and orchestration add time. This bounds upstream work per attempt; it is not a response-time SLA or a batch completion guarantee.
- **Legal identity:** Text extraction recognizes patterns and context. A single candidate is not a certified business-owner match, and multiple candidates remain ambiguous.
- **VAT:** Format checks cover the EU Member States and eligible XI identifiers. Live VIES results depend on the Commission and national services. GB VAT is not validated through VIES. Structure checks alone do not establish tax registration.
- **Registry and directors:** These are statements found on public pages. The Actor does not independently query Companies House or national commercial registers.
- **Contacts:** Email addresses are public corporate-domain matches. Mailbox existence, deliverability and permission to contact someone are not verified.
- **DNS:** Provider matches are configuration evidence from bounded SPF paths and RFC 9989 DMARC discovery. Inspect recursive.complete and discovery.complete. Sender-IP authorization, SPF macros/address mechanisms, DKIM and receiver enforcement are not evaluated. An absent exact-domain record can inherit policy and is not proof of vulnerability.

Use source evidence and explicit result states when deciding whether a record is ready for your workflow. No external paid data subscription is required, but running the Actor still uses Apify resources and its published billing model applies.

### Choose the right enrichment scope

Use this as a **Clearbit alternative** for the narrow task of extracting public company identity and contact fields from a website you already know. It supplies source evidence rather than a licensed firmographics or person-level database.

As a **Hunter.io domain search alternative**, it collects emails actually published on inspected corporate pages; it does not guess addresses or verify mailbox deliverability. As a **BuiltWith lite alternative**, its scope is recognized email-provider and bounded SPF policy-path evidence, not a general website technology inventory. It can be an **Apollo complement** when you already have an account list and want legal-page, VAT or DNS context beside those records. These comparisons describe workflow fit, not feature parity or measured competitor performance.

For DACH workflows, inspect **Impressum**, **Handelsregister** references and stated **GmbH Geschäftsführer** names with their source pages. For **NIF CIF Spain** research, extract labeled Spanish identifiers and distinguish structure checks from an official EU VAT result.

A buyer searching for a **UK Companies House domain matcher** can use extracted UK company numbers as a research input, but this Actor does not query Companies House or certify that a domain belongs to a registry entity. Likewise, the search phrase **VIES SOAP API REST wrapper** describes a common integration need; this engine calls the Commission's official **REST** endpoint and does not implement SOAP transport.

### Frequently asked questions

**Can I process 50,000 domains without writing code?**

Yes. Paste the list in the input form or provide the array through Apify's JSON editor. Use a small sample first, then choose a run budget and duration suitable for the full list.

**Does every domain produce a company name and valid VAT number?**

No. Some websites omit these details, block automated access, require JavaScript or contain more than one company. The output distinguishes missing data, ambiguity and official-service availability.

**Can I use this as proof that a company is legitimate?**

The Actor provides public-page evidence and, when available, an official VIES response about a VAT number. It does not certify company legitimacy, website ownership or the correct tax treatment of a transaction.

**Do I need an API key from another enrichment service?**

No customer backend setup is required. The publisher manages the enrichment engine and its service authentication. Buyers supply domains through the Actor input; they do not need a Worker URL, service secret, RapidAPI subscription or separate enrichment API account.

**Can I export to Excel or Google Sheets?**

Yes. Export the flat dataset as CSV and import it into your spreadsheet. JSON is available for workflows that retain detailed evidence.

**Will increasing concurrency always make the run faster?**

No. More concurrent inspections increase upstream demand and resource use. Start at 5 and raise it only after reviewing timeouts and data coverage on a representative sample.

### Review evidence before CRM import

`legal_address` is the selected address published for the extracted entity; `official_address` remains the separate VIES response. `identity_match_status` compares page and official legal names when both are available. A match does not establish domain ownership. `quality_status` reports complete or partial inspection, not a probability of correctness or a guarantee that every field exists. Keep `evidence` source URLs, excerpts, methods and observation dates beside the business fields. Missing values remain null or empty instead of being fabricated.

Version 1.5 adds these fields without changing the `domain-inspected` event. Completed partial results remain billable. The saved example above is historical and intentionally retains its original fields; inspect current rows for the additive fields.

# Actor input Schema

## `domainsText` (type: `string`):

Paste one public company domain or HTTP(S) URL per line, for example futuroinformatica.com. Blank lines are ignored. Do not include a CSV header, separators or company names. Provide this field or domains. Maximum 50,000 unique valid domains after normalization.

## `domains` (type: `array`):

For agents, Clay, n8n, Make and API callers: send an array of domain or HTTP(S) URL strings, for example \["futuroinformatica.com"]. Combined with domainsText and deduplicated after hostname normalization, including www. Supply at least one valid domain.

## `maxDomains` (type: `integer`):

Cap inspected unique domains at this number; set 1 for a single-row enrichment. Later entries are reported as omitted. At most 50,000 unique valid domains can be submitted. This is not a monetary cap; configure the Apify maximum charge in run options.

## `maxConcurrency` (type: `integer`):

Inspect this many domains per bounded batch. Start at 5; use 1 for a small sample. Maximum 20. Higher concurrency can increase rate limits, timeouts and partial results.

## `maxRetries` (type: `integer`):

Retry only engine HTTP 5xx and unexpected inspection failures, up to 0-2 times. Completed partial HTTP 200 results are not retried to chase missing fields. One final successful inspection can trigger one domain event.

## `includeRaw` (type: `boolean`):

Set true for the entire nested engine response, page outcomes and all candidate details. Source excerpts and quality, address and identity-comparison fields are already included in the standard rows. False keeps CSV-oriented rows smaller. No extra event is charged.

## Actor input object example

```json
{
  "domainsText": "www.futuroinformatica.com",
  "maxDomains": 50000,
  "maxConcurrency": 5,
  "maxRetries": 1,
  "includeRaw": false
}
```

# Actor output Schema

## `results` (type: `string`):

Download company rows as JSON or CSV. Scalar multi-values use |. Evidence contains public excerpts and provenance without requiring includeRaw; raw adds the full engine response. Empty and partial results remain visible.

## `summary` (type: `string`):

Check counts, remaining work, stop reason and confirmed or uncertain billing events before retrying a run.

## `inputReport` (type: `string`):

Inspect invalid input indexes, skipped duplicates and omitted entries. These entries do not trigger inspection events.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "domainsText": "www.futuroinformatica.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("dekaz/global-b2b-intelligence-engine").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "domainsText": "www.futuroinformatica.com" }

# Run the Actor and wait for it to finish
run = client.actor("dekaz/global-b2b-intelligence-engine").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "domainsText": "www.futuroinformatica.com"
}' |
apify call dekaz/global-b2b-intelligence-engine --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dekaz/global-b2b-intelligence-engine"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NVWgblCT11uSR8peG/builds/MqOevjgHiKEfGk6PJ/openapi.json
