Skip to main content
Glama

hexadatalabs/uk-companies-house-scraper

hexadatalabs--uk-companies-house-scraper
Destructive

This tool calls the Actor "hexadatalabs/uk-companies-house-scraper" and retrieves its output results. Actor description: Use this when you need UK companies from the official Companies House register: new incorporations, companies by name, SIC code, location, status or type, with registered address, SIC codes, accounts dates and officers (directors). Uses your free Companies House API key. Pay per result.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "apiKey": "<apiKey>"
    },
    "name": "hexadatalabs--uk-companies-house-scraper"
  }
}

Input Schema

NameRequiredDescriptionDefault
apiKeyYes**REQUIRED** Your free REST API key from https://developer.company-information.service.gov.uk/get-started (Developer Hub → your application → Keys → REST API key, Live environment, no IP restriction). Required.
locationNoRegistered-office location as free text: a town, county or postcode area, e.g. "London", "Manchester", "Cardiff", "SW1". Example values: "London"
sicCodesNoUK SIC 2007 codes (5 digits), e.g. 62012 = business and domestic software development, 62020 = IT consultancy, 41100 = development of building projects, 56101 = licensed restaurants. List: https://resources.companieshouse.gov.uk/sic/
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
includeRawNoAttach the original search hit under "raw".
maxResultsNoStop after this many companies. Searches with more than 10,000 matches are split by incorporation date automatically. Example values: 50
companyTypesNoCompanies House type codes, e.g. ltd (private limited), plc, llp, limited-partnership, private-limited-guarant-nsc (limited by guarantee), charitable-incorporated-organisation, registered-overseas-entity. Empty = all types.
companyStatusNoUse "active" for companies currently trading, "dissolved" for closed ones, or "any". Example values: "active"active
searchQueriesNoWords the company name must contain, one search per line, e.g. "software", "solar", "dental". Leave empty to filter only by SIC code, location or dates. Example values: ["software"]
includeDetailsNoOne extra API request per company: accounts and confirmation-statement due dates, previous names, charges and insolvency flags, jurisdiction. Charged as a detail request.
incorporatedToNoOnly companies incorporated on or before this date (YYYY-MM-DD).
includeOfficersNoOne extra API request per company: current and resigned officers with name, role, appointment dates, nationality, country of residence and occupation (never birth dates or home addresses). Officers are named individuals; turn on only if you have a lawful basis to use them. Charged as a detail request.
incorporatedFromNoOnly companies incorporated on or after this date (YYYY-MM-DD), e.g. 2026-10-01 for new companies. With no other filter, the last 7 days are used.
proxyConfigurationNoNot needed for the Companies House API; leave it off (your API key may be restricted to fixed IPs). Example values: {"useApifyProxy":false}
companyNameExcludesNoWords the company name must not contain, e.g. "holdings".
onlyNewSinceLastRunNoUse this on a schedule: the Actor remembers when it last ran (shared store "hexadata-uk-companies-house" in your account) and returns only companies incorporated since then that it has not delivered before. The first run saves everything that matches.

Output Schema

NameRequiredDescriptionDefault
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "address": {
      +      "type": "string"
      +    },
      +    "addressCountry": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "addressLine1": {
      +      "type": "string"
      +    },
      +    "addressLine2": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "companyNumber": {
      +      "type": "string"
      +    },
      +    "country": {
      +      "type": "string"
      +    },
      +    "dissolvedAt": {
      +      "type": "null"
      +    },
      +    "id": {
      +      "type": "string"
      +    },
      +    "incorporatedAt": {
      +      "type": "string"
      +    },
      +    "locality": {
      +      "type": "string"
      +    },
      +    "name": {
      +      "type": "string"
      +    },
      +    "postalCode": {
      +      "type": "string"
      +    },
      +    "region": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "scrapedAt": {
      +      "type": "string"
      +    },
      +    "sicCodes": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "source": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "subtype": {
      +      "type": "null"
      +    },
      +    "type": {
      +      "type": "string"
      +    },
      +    "typeLabel": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observed

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare openWorld and destructive hints but say nothing about credentials or cost; the description supplies both ('Uses your free Companies House API key', 'Pay per result'), which is exactly the value-add expected. It does not explain why destructiveHint is true (dataset/store writes) or describe pagination/run-state behavior, so it stops short of full disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, dense and front-loaded on the 'what/when' before the operational notes (API key, per-result pricing). The opening clause about calling an Actor and retrieving results is boilerplate that could be trimmed, but nothing is redundant or bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter scraping tool with a nested proxy object, the description covers the domain source, available filters, returned fields, credential requirement and pricing model, and an output schema exists to cover return shape. Only the destructive/mutating side effects and long-run polling behavior are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 16 parameters is already documented in the schema. The description adds no parameter-level detail beyond the schema — the mentioned dimensions (name, SIC, location, status, type) simply mirror the schema's own enumerations, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The actor description names a specific resource (UK companies from the official Companies House register) and enumerates the filter axes and returned fields, so an agent can tell it apart from the sibling country/domain scrapers. The framing sentence ('calls the Actor ... and retrieves its output results') is generic platform boilerplate, but the substantive purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this when you need UK companies ...' gives a usable triggering condition plus the filter dimensions it supports. However, it never states when NOT to use it or names an alternative (e.g. the EU/TED or SAM.gov sibling scrapers) for non-UK registries, leaving the agent to infer the boundary from the country name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.