# UK Companies Hiring Now: LinkedIn Jobs + Companies House (`wellbuilt_zythem/uk-hiring-companies`) Actor

UK companies hiring for a role right now, one row per company: how many jobs it has open on LinkedIn, which ones, where and since when, plus its Companies House record: company number, status, registered office, incorporation date, SIC codes and current directors.

- **URL**: https://apify.com/wellbuilt_zythem/uk-hiring-companies.md
- **Developed by:** [Carlos Escanez](https://apify.com/wellbuilt_zythem) (community)
- **Categories:** Lead generation, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.00 / 1,000 company found in companies houses

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Companies Hiring Now: LinkedIn Jobs + Companies House

**Not a list of job ads. A list of the UK companies behind them, with their official company record.**

Type a role and a UK place. You get one row per company that is hiring for it right now: how many jobs it has open, which ones, where and since when, its website, size and headquarters, and its **Companies House record**: company number, status, registered office, incorporation date, SIC activity and current directors.

```
11 open jobs | Culina Group Limited | 1,001-5,000 employees | culina.co.uk
   Warehouse Operative, Stock Administrator, General Ware Operative...
   Dagenham, Haverhill, Warwick, Northamptonshire · latest job 16 Oct 2026
   Companies House: CULINA GROUP LIMITED, 05525931, Active, incorporated 2005
   Market Drayton, Shropshire, TF9 3SQ · Activities of head offices · 3 current directors
```

That is a real row from a run on 17 October 2026 ("warehouse operative" and "forklift driver" in London and Birmingham).

***

### Who it is for

- **Recruitment agencies and staffing firms**: the companies hiring warehouse operatives this week are the ones that will take a call about temps. `minOpenJobs: 3` keeps the ones hiring in volume.
- **B2B sales**: forklift training, PPE, workwear, HR and payroll software, van leasing. A company hiring 10 drivers is a company buying.
- **Market research**: who is hiring what, where, and how big they are.

The company number turns a brand on LinkedIn into a legal entity you can look up, invoice, credit-check or add to a CRM without duplicates.

***

### What you get per company

**From LinkedIn's public job listings:** `companyName`, `openJobs`, `jobTitles`, `jobLocations`, `newestJobDate`, `oldestJobDate`, `jobs` (up to 20 with title, link, location and date), `searchTerms`.

**From the company's LinkedIn page:** `website`, `industry`, `companySize`, `headquarters`, `linkedinCompanyUrl`.

**From Companies House:** `companyNumber`, `registeredName`, `companyStatus`, `companyType`, `incorporationDate`, `companyAgeYears`, `registeredAddress`, `registeredPostcode`, `sicCodes`, `sicDescriptions`, `directors` (current ones: name, role, appointment date), `activeDirectorCount`, `otherPossibleCompanies`, `companiesHouseUrl`.

**How sure the match is:** `companiesHouseMatch`, `activityMatchesIndustry`, `headquartersInRegisteredAddress`, `dormantCompany`.

No phone numbers and no emails: neither LinkedIn's public pages nor Companies House publish them, and this Actor does not guess them.

***

### How the Companies House match works, and how good it is

LinkedIn shows a brand ("Waitrose & Partners"). Companies House registers companies ("WAITROSE LIMITED"). The Actor compares the core of the name, without the legal form, and then checks the company's SIC activity against the industry on its LinkedIn page.

- **`exact`**: the registered name is the brand's name and its activity fits the industry. Tesco → TESCO PLC, Next → NEXT PLC.
- **`probable`**: the brand plus a word groups use for their companies (UK, Group, Holdings, Retail, Stores...), or an exact name whose registered activity does not fit the LinkedIn industry, or a dormant company. GXO Logistics → GXO LOGISTICS UK LIMITED.
- **`not_found`**: no live UK company with that name. Delivered **free**.
- **`public_body`**: NHS trusts, councils, universities, embassies. Not in Companies House. Free.

Measured on 17 October 2026 on 278 real companies: **124 exact, 67 probable, 80 not found, 7 public bodies.**

The activity check exists because a one-word brand can share its name with an unrelated company: "Morrisons" (Retail) matched MORRISONS LIMITED, a firm of solicitors in Swindon. On that sample the check flagged 18 matches. About 11 were the wrong company. The rest were the right company with an unusual registered activity, such as a parts retailer registered as management consultancy. That is why a flagged match is marked `probable` instead of being dropped.

`headquartersInRegisteredAddress` is information, not a verdict. Large groups often register their company in another city. In the sample, 9 out of 10 matches whose headquarters town was not in the registered address were still the right company.

Big groups have many companies. The Actor picks the live one whose name fits best and lists the others in `otherPossibleCompanies`.

***

### Example inputs

**Who is hiring warehouse staff in London and Birmingham this week**

```json
{
  "jobTitles": ["warehouse operative", "forklift driver"],
  "locations": ["London", "Birmingham"],
  "postedWithin": "week",
  "maxJobsPerSearch": 200
}
```

**Companies hiring 3 or more care assistants in Scotland, only the ones found in Companies House**

```json
{
  "jobTitles": ["care assistant"],
  "locations": ["Scotland"],
  "minOpenJobs": 3,
  "onlyMatched": true
}
```

**A weekly feed of companies that just started hiring HGV drivers**

```json
{
  "jobTitles": ["HGV driver"],
  "locations": ["United Kingdom"],
  "onlyNewCompanies": true
}
```

Schedule it weekly. Each run delivers only companies not delivered before for the same titles and places.

***

### Speed, limits, said plainly

- LinkedIn shows 10 jobs per page and its public listing stops at about 1,000 jobs per search. It slows down bursts of requests. The Actor waits and carries on: 29 slowdowns on 63 pages in the run above, all recovered.
- Companies House is a public service and is read gently, with a pause between requests that grows if it asks to slow down. **The 278-company run took 16 minutes**, most of it waiting politely for Companies House. A 50-job run took 2 minutes 22 seconds.
- LinkedIn's public job cards carry no salary, so there is no salary field.
- LinkedIn mixes in jobs from other countries. Only jobs located in the UK are kept.

***

### Pricing

Pay per company found in Companies House (`company` event). Companies not found and public bodies are delivered **without charge**, marked so you can drop them with `onlyMatched`. Companies are checked in order of open jobs, so a capped run keeps the biggest hirers.

***

### Data sources

- LinkedIn's public job listings and public company pages, read without logging in.
- Companies House, the UK's official register of companies. Contains public sector information licensed under the Open Government Licence v3.0.

# Actor input Schema

## `jobTitles` (type: `array`):

The roles you are looking for, as a candidate would type them on LinkedIn: "warehouse operative", "forklift driver", "HGV driver", "care assistant". Each title is searched in each location.

## `locations` (type: `array`):

UK cities, counties or regions: "London", "Manchester", "West Midlands", "Scotland". "United Kingdom" is added for you, so London means London, England, not London, Ontario.

## `postedWithin` (type: `string`):

Only companies with a job posted in this window. A week is the default: recent enough to call, long enough to see who is hiring in volume.

## `maxJobsPerSearch` (type: `integer`):

Job listings read for each title and location, 10 per LinkedIn page. LinkedIn's public listing stops at about 1,000. More jobs find more companies.

## `minOpenJobs` (type: `integer`):

1 lists every company hiring. 3 or more keeps the ones hiring in volume, which is who a recruitment agency or a staffing firm wants to call.

## `includeDirectors` (type: `boolean`):

The company's current directors from Companies House: name, role and appointment date. One more Companies House page per company.

## `onlyMatched` (type: `boolean`):

Companies that could not be matched to a Companies House record are delivered free and marked not_found. Turn this on to leave them out.

## `onlyNewCompanies` (type: `boolean`):

Remember the companies delivered for these titles and locations and skip them next time. Schedule the Actor weekly for a feed of companies that just started hiring.

## `maxCompanies` (type: `integer`):

0 for no limit. Companies are checked in order of open jobs, so a capped run keeps the biggest hirers.

## Actor input object example

```json
{
  "jobTitles": [
    "warehouse operative"
  ],
  "locations": [
    "London"
  ],
  "postedWithin": "week",
  "maxJobsPerSearch": 50,
  "minOpenJobs": 1,
  "includeDirectors": true,
  "onlyMatched": false,
  "onlyNewCompanies": false,
  "maxCompanies": 0
}
```

# Actor output Schema

## `companies` (type: `string`):

No description

## `runSummary` (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 = {
    "jobTitles": [
        "warehouse operative"
    ],
    "locations": [
        "London"
    ],
    "maxJobsPerSearch": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("wellbuilt_zythem/uk-hiring-companies").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 = {
    "jobTitles": ["warehouse operative"],
    "locations": ["London"],
    "maxJobsPerSearch": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("wellbuilt_zythem/uk-hiring-companies").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 '{
  "jobTitles": [
    "warehouse operative"
  ],
  "locations": [
    "London"
  ],
  "maxJobsPerSearch": 50
}' |
apify call wellbuilt_zythem/uk-hiring-companies --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wellbuilt_zythem/uk-hiring-companies"
        }
    }
}
```

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/WIYJytM7EDWCEzzig/builds/0rMu9xbkywaFN8xym/openapi.json
