# UK New Manufacturing Company Finder (`afkdigital/api28-uk-new-manufacturing-company-finder`) Actor

Find recently incorporated UK manufacturing companies by SIC 2007 code, registered-office region, incorporation date and company status from official monthly Companies House CSV data. Not a live alert or buyer-intent signal. No personal contacts.

- **URL**: https://apify.com/afkdigital/api28-uk-new-manufacturing-company-finder.md
- **Developed by:** [AFK Digital](https://apify.com/afkdigital) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 new matching manufacturing companies

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

## UK New Manufacturing Company Finder

Find **recently incorporated UK manufacturing legal entities** in official Companies House monthly bulk data, filtered by SIC 2007 manufacturing activity, registered-office locality, incorporation date and company status.

**Best for:** UK accountancy and insurance firms, industrial distributors, manufacturing equipment suppliers, and B2B research teams seeking auditable company-register leads.

**Source:** [Companies House Free Company Data Product](https://download.companieshouse.gov.uk/) (free monthly public CSV ZIP). **Not affiliated with, sponsored by, or endorsed by Companies House.**

### What it actually does

1. Discovers the most recent complete set of official Companies House monthly ZIP files (currently seven parts) via the source landing page. No signup, API key or paid account.
2. Downloads **every** part. A missing or corrupt part aborts the run **before any company is billed**.
3. Streams CSV in constant-size batches, with strict date, company status, registered-office location and manufacturing SIC filters.
4. Sorts by most recent official incorporation date and returns up to your chosen limit.
5. Excludes company numbers already delivered to **this Actor's same Apify user** for the **same snapshot month**. One never-before-delivered matching company = one billable event.

The company must have at least one **official Companies House condensed SIC 2007, Section C** code (manufacturing). You can enter complete five-digit codes (25990, 28110) or prefixes (25, 10) to target a whole sub-sector. Invalid or non-manufacturing codes are rejected with a clear error. An empty SIC list searches **all** Section C activities.

**Important: A newly incorporated company is not evidence of a newly trading company, an active factory, a buyer, an operating site, or purchasing intent.** The data contains registered-office locations, *not necessarily operating or production premises*. The Actor does not infer business maturity, buy-readiness or contact information.

### How recent is the data?

This is a **monthly snapshot**, not a live alert. Companies House states that the CSV contains records compiled through the *end of the preceding calendar month* and usually appears within **five working days of month end**. The file date (for example 2026-10-01) and coverage-through date (2026-09-30) are recorded separately. Status, SIC codes and address are as present in that snapshot and can subsequently change.

The source describes its files as a snapshot of "live companies"; do not assume it is a complete historic archive of dissolved companies.

### Quick start

Example input:

```
{
  "sicCodes": ["25990", "28110"],
  "region": "England",
  "regionField": "COUNTRY",
  "incorporatedFrom": "2026-09-01",
  "incorporatedTo": "2026-09-30",
  "companyStatuses": ["Active"],
  "maxResults": 100
}
```

All fields are optional. Without a date range the Actor uses the preceding calendar month **relative to the newest available snapshot**, not the machine clock. Without SIC codes (\[]), it includes all manufacturing categories. The default status is Active.

#### Region semantics

Use the region string with regionField:

| regionField | What is checked |
| --- | --- |
| COUNTRY | Exact RegAddress.Country value (e.g. ENGLAND, SCOTLAND, WALES, UNITED KINGDOM) |
| COUNTY | Exact RegAddress.County as filed (may be blank) |
| POST_TOWN | Exact RegAddress.PostTown (e.g. LEEDS) |
| POSTCODE_PREFIX | Case-insensitive starts-with registered postcode (e.g. LS1, SW) |
| AUTO | Exact Country / County / PostTown **or** postcode prefix match |

This is not standardised statistical-region/ITL filtering or geocoding. For example, London in POST_TOWN means registered post town London, not necessarily every legal entity in Greater London. A row with UNITED KINGDOM as country is *not inferred to be in England*. Neither full address nor full postcode is returned.

#### Dataset example

The following company number, legal name, SIC and date were verified in the official October 2026 snapshot part 1. Other fields are shown only when present in the CSV.

```
{
  "companyNumber": "17479473",
  "legalName": "AVESTRIUM SYSTEMS LIMITED",
  "sicCodes": ["25990"],
  "sicDescriptions": {"25990": "Manufacture of other fabricated metal products n.e.c."},
  "matchedManufacturingSicCodes": ["25990"],
  "registeredOfficeCountry": "ENGLAND",
  "companyStatus": "Active",
  "incorporationDate": "2026-09-24",
  "registrationDate": null,
  "sourceFileDate": "2026-10-01",
  "snapshotCoverageThrough": "2026-09-30",
  "companyUrl": "https://find-and-update.company-information.service.gov.uk/company/17479473",
  "sourceAttribution": "Contains public register information from Companies House"
}
```

The sicDescriptions object includes the lookup for **all recorded SICs**, while matchedManufacturingSicCodes indicates which ones match your manufacturing filters. If a non-manufacturing SIC appears alongside a matching manufacturing SIC, it remains in sicCodes for transparency.

The SUMMARY key-value record contains source snapshot date, coverage, ZIP count, rows scanned, matching companies, previously delivered numbers, delivered results and charged event count.

#### Why is registrationDate null?

The official free monthly CSV explicitly contains IncorporationDate, but does **not** provide a separately defined registration timestamp. For accuracy, registrationDate is always null, not falsely copied from incorporation date. sourceFileDate documents the date of the bulk file, **not** the date a particular company was registered.

### Pricing and duplicate handling

**Live Store billing:** **$0.01 USD for each newly delivered matching company** using the `new-manufacturing-company` pay-per-event charge. There are no additional charged startup, ZIP, scanned-row, empty-result or unmatched-record events. The event price is managed in Apify monetization (not hardcoded in the Actor). The publisher bears underlying compute costs under the event-only pricing configuration.

- A company number already **delivered to the same Apify user for the same official snapshot month** is skipped on later runs of this Actor, even when search filters change. The second identical run eventually returns **zero duplicates and creates zero new-company events** once all matching records are exhausted. If your first run was cut off by maxResults, the next run can deliver and bill the next set of never-before-delivered matching company numbers. Fully exhausted identical queries are cached per snapshot month and complete without redownloading all ZIPs.
- A new official snapshot month starts a new duplicate scope. Re-requesting older incorporation dates in another month can result in the *same company being charged again* if it remains in the snapshot and matches.
- The duplicate state lives in a persistent **named Apify key-value store under that user's Actor permissions**, not on our server. Apify storage retention, user deletion of that state, or two simultaneously running jobs can affect this guarantee. **Do not run overlapping jobs when you require strict duplicate prevention.** Remote storage does not provide a transaction lock.
- When users reach their Apify maximum event budget, the Actor stops generating further charged results. Source download and cloud computation/storage costs may still arise, depending on the Actor's final Store pricing configuration.
- maxResults applies **after** past deliveries are excluded; sorting prioritises the newest incorporation date and is deterministic.

For predictability, try maxResults: 20 on your first run. The entire official snapshot must still be scanned before any record is delivered.

### Privacy, compliance, accuracy

- **Never gathers directors, shareholders, PSCs, officers, personal emails, personal telephone numbers, or contact leads.** Only legal entity names, IDs, official SIC, dates, status and general registered-office geography are output.
- Does not fetch arbitrary private resources or log into Companies House. It does not use the protected Companies House API.
- A public registered office can sometimes be a residential address. The Actor intentionally omits full street addresses, contact data and inward postcode.
- Company status and SIC descriptions reflect how information was filed or how SIC is classified. Companies House does not verify commercial intent.
- Validate all material business decisions against the linked [Companies House public record](https://find-and-update.company-information.service.gov.uk/).
- The source can include information subject to third-party rights; the official materials do not waive those rights. Review your applicable UK GDPR, commercial marketing, copyright and other obligations.

### Sources and attribution

Contains public register information from **Companies House**.

- [Official data products guidance](https://www.gov.uk/guidance/companies-house-data-products)
- [Official bulk download](https://download.companieshouse.gov.uk/)
- [Data fields PDF](https://resources.companieshouse.gov.uk/toolsToHelp/pdf/freeDataProductDataset.pdf)
- [Official condensed SIC list](https://resources.companieshouse.gov.uk/sic/)
- [Public task, Crown copyright and third-party rights](https://www.gov.uk/government/publications/companies-house-accreditation-to-information-fair-traders-scheme/public-task-copyright-and-crown-copyright)
- [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/)

Material produced by Companies House is usually subject to **Open Government Licence v3.0** except where otherwise indicated. Public-register data is made available for re-use under Companies House's statutory approvals, with third-party rights and other legal obligations remaining the user's responsibility. We give clear attribution in each result and this README, omit Crown insignia, and do not present the service as official.

### Runtime and local development

Python 3.12, Apify Python SDK and requests. No external database, proxy, paid data access or API token in the source.

```
cd /opt/APIFY/API28
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt pytest jsonschema
.venv/bin/python -m pytest -q tests
# Apify Cloud: build/push with Apify CLI using authorized login.
```

The official ZIPs may total **470 MB+ compressed per full run**, so plan platform storage, network and run timeout accordingly. The app downloads ZIP files to a temporary directory, scans them without extracting to disk, then deletes them. A new month can change number/size of ZIPs. The service will fail clearly rather than report incomplete results when any officially published part is unavailable.

The project is isolated in /opt/APIFY/API28. The source-maintenance script scripts/fetch_sic.py regenerates a checked, bundled Companies House SIC classification; it is not called on customer runs. Review licence and schema when refreshing classification editions (ONS UK SIC 2026 exists, but Companies House continues publishing its specific condensed code list).

**No legal, tax or insurance advice is provided.**

# Actor input Schema

## `sicCodes` (type: `array`):

Enter 2–5 digit SIC 2007 Section C codes or prefixes (e.g. 25, 25990). Empty list = all manufacturing Section C codes. Non-manufacturing/unknown codes are rejected.

## `region` (type: `string`):

Exact registered-office Country, County or PostTown, or postcode prefix. AUTO checks these official fields; not an inferred operating location.

## `regionField` (type: `string`):

No geocoding: country/county/post town are exact matches (case-insensitive); postcode prefix is starts-with.

## `incorporatedFrom` (type: `string`):

Optional. Default = first day of prior calendar month relative to latest official snapshot date (not today's date).

## `incorporatedTo` (type: `string`):

Optional. Default = last day of month covered by latest official snapshot. At most 367 days between dates.

## `companyStatuses` (type: `array`):

Case-insensitive exact status labels in official CSV (e.g. Active). Empty array = all statuses included in snapshot.

## `maxResults` (type: `integer`):

Results are sorted newest incorporation date first. Previously delivered company numbers within same snapshot month are excluded; reruns do not bill them.

## Actor input object example

```json
{
  "sicCodes": [
    "25990",
    "28110"
  ],
  "region": "England",
  "regionField": "AUTO",
  "companyStatuses": [
    "Active"
  ],
  "maxResults": 100
}
```

# Actor output Schema

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

No description

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

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("afkdigital/api28-uk-new-manufacturing-company-finder").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("afkdigital/api28-uk-new-manufacturing-company-finder").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 '{}' |
apify call afkdigital/api28-uk-new-manufacturing-company-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,afkdigital/api28-uk-new-manufacturing-company-finder"
        }
    }
}
```

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/lYc2ARGr17sEuVnEL/builds/ohfxUG0eybrgM57w2/openapi.json
