# UK Visa Sponsor Jobs (`quietbyte/reed-jobs-uk-visa`) Actor

UK jobs from Reed's official API, each checked against the Home Office register of licensed visa sponsors and tagged for what the ad says about sponsorship, with the exact sentence. Monitoring mode: pay only for new jobs.

- **URL**: https://apify.com/quietbyte/reed-jobs-uk-visa.md
- **Developed by:** [Quietbyte](https://apify.com/quietbyte) (community)
- **Categories:** Jobs, Developer tools, Automation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 uk jobs

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 Visa Sponsor Jobs

UK jobs from **Reed.co.uk's official API**, each one checked two ways:

- **What the ad says** about visa sponsorship: `offered`, `refused`, `mixed` or `not_mentioned`, **with the exact sentence** the tag is based on.
- **Whether the employer can sponsor at all:** a match against the Home Office **Register of Licensed Sponsors** (routes such as Skilled Worker, and the rating), downloaded fresh on every run.

Built for people who need to answer **"can this UK employer actually hire someone who needs a visa?"** without reading every ad.

### What people use it for

- **Skilled Worker visa job seekers:** a daily list of new jobs from licensed sponsors, minus the ads that rule sponsorship out.
- **Immigration advisers and relocation services:** check a client's target employers against the sponsor register, with the ad's own wording as proof.
- **Recruiters and job boards:** a clean UK job feed with salary, contract type and sponsor status in one schema.
- **AI agents:** answer "which nursing jobs in Leeds are with licensed sponsors?" through the Apify API or MCP.

**What it costs:** 1,000 jobs cost $2.00, with the visa tags and the sponsor check included. A daily monitor that returns 30 new jobs a day costs about $1.80 a month.

### What you get

```json
{
  "id": "reed:57386797",
  "title": "Care Assistant",
  "employer": "Agincare",
  "employerType": "direct",
  "location": "HR95BS",
  "salaryText": "£13.50 - £14.00 per hour",
  "salaryMinYearly": 26325,
  "salaryMaxYearly": 27300,
  "contractType": "Permanent",
  "postedAt": "2026-09-24",
  "expiresAt": "2026-11-05",
  "url": "https://www.reed.co.uk/jobs/care-assistant/57386797",
  "visaSponsorship": "refused",
  "visaEvidence": ["Non-UK nationals must have the right to work in the UK with at least 12 months left on their visa, please note presently we are unable to offer sponsorship"],
  "relocationOffered": false,
  "ukSponsorLicence": {
    "licensed": true,
    "matchedName": "Agincare UK Limited",
    "match": "exact",
    "routes": ["Skilled Worker"],
    "ratings": ["Worker (A rating)"],
    "registerDate": "2026-10-13"
  }
}
```

**Field notes**

- **`ukSponsorLicence`** describes the employer, not the job. `match: "prefix"` means only the first words of the name matched, so check it. `licensed: false` means no match on the register.
- **`employerType`:** `direct` when you search direct employers only (the default). With agency ads the advertiser is the agency, so the sponsor check is about the agency.
- **`salaryMinYearly` / `salaryMaxYearly`:** Reed's own yearly equivalent, handy for hourly and daily rates. Salaries are empty when the employer hides them.

### Why both checks matter

Searching UK jobs for "visa sponsorship" mostly finds ads that **refuse** it. In a live sample of 30 direct-employer ads matching "visa sponsorship" (October 2026), **29 refused it** ("we do not offer visa sponsorship", "must have the right to work in the UK"). Yet **19 of those 30 employers hold a sponsor licence**. The ad tells you about this job; the register tells you whether the employer sponsors anyone. You get both, with the evidence.

### What you can put in

| Input | What it does |
|---|---|
| `keywords` | What to search for, e.g. `software engineer` or `nurse`. |
| `location`, `distanceMiles` | A UK town, city or postcode, and a radius (default 10 miles). |
| `minimumSalary`, `maximumSalary` | Salary range in GBP. |
| `postedByDirectEmployer` | On by default, so sponsor checks are about the real employer. |
| `permanent`, `contract`, `temp`, `fullTime`, `partTime`, `graduate` | Reed's own job-type filters. |
| `postedWithinDays` | Only jobs posted in the last N days. |
| `visaFilter` | `offered` keeps ads that offer sponsorship; `not_refused` drops ads that rule it out. |
| `sponsorFilter` | `licensed` keeps only employers on the sponsor register. |
| `maxJobs` | Stop after this many jobs (default 200, up to 5,000). |
| `onlyNewJobs`, `monitorName` | Monitoring mode, below. |
| `reedApiKey` | Optional. A built-in key is used; add your own free key for heavy use. |

#### Example input

```json
{
  "keywords": "software engineer",
  "location": "Manchester",
  "sponsorFilter": "licensed",
  "visaFilter": "not_refused",
  "postedWithinDays": 7
}
```

### Daily monitoring: pay only for new jobs

Turn on **Only new jobs** and schedule the Actor daily. It remembers which jobs it has already returned (per **monitor name**, or per exact input), so after the first run you only get, and only pay for, new postings. Each new job has `"isNew": true`.

### Pricing

Pay per event: you pay only for jobs you receive.

| Event | Price |
|---|---|
| Job, with visa tags and the UK sponsor check | **$2.00 per 1,000 jobs** ($0.002 each) |

Jobs that don't match your filters cost nothing. Runs stop cleanly at your spending limit.

### Data sources and compliance

- **Jobs:** Reed.co.uk's official **Jobseeker API**, the documented API Reed offers developers. No scraping, no logins, no proxies.
- **Sponsors:** the UK Home Office **Register of Licensed Sponsors: Workers**, published on GOV.UK under the Open Government Licence v3.0, downloaded fresh on every run. If GOV.UK is unreachable, jobs are still saved without `ukSponsorLicence` and the run summary says so.
- **No personal data:** only job ads and employer names. No recruiter contacts are collected.

### FAQ

**How accurate are the visa tags?**
They are rule-based and conservative, and every tag comes with its evidence sentence. Ads that say nothing are `not_mentioned`, not "no".

**Does a licensed employer sponsor this job?**
Not necessarily. A licence means the employer *can* sponsor; the job also needs to be eligible (for Skilled Worker, the right occupation code and salary). Treat it as a strong lead.

**Can I use it from an AI agent or over MCP?**
Yes. It's a standard Apify Actor, so any Apify client, the Apify API or Apify's MCP server can call it.

### Related Actors

- [Visa Sponsorship Jobs API](https://apify.com/quietbyte/ats-jobs-visa): the same visa tags for Greenhouse, Lever, Ashby, SmartRecruiters and Recruitee career boards.
- [Workday Jobs Scraper](https://apify.com/quietbyte/workday-jobs-visa): Workday careers sites with US H-1B filings and the same UK sponsor register.
- [Remote Jobs by Country](https://apify.com/quietbyte/remote-jobs-by-country): remote jobs from four boards, filtered to the ones open to where you live.
- [Podcast Transcript Scraper](https://apify.com/quietbyte/podcast-transcripts): publisher-provided transcripts as text, timestamped Markdown or RAG chunks.

# Actor input Schema

## `keywords` (type: `string`):

What to search for on Reed, e.g. "software engineer" or "nurse". Reed's own search syntax.

## `location` (type: `string`):

A UK town, city or postcode, e.g. "Manchester". Leave empty for the whole UK.

## `distanceMiles` (type: `integer`):

Search radius around the location. Reed's default is 10.

## `minimumSalary` (type: `integer`):

Optional.

## `maximumSalary` (type: `integer`):

Optional.

## `postedByDirectEmployer` (type: `boolean`):

Keep this on for meaningful sponsor checks: with agency ads, the advertiser is the agency, not the employer.

## `postedByRecruitmentAgency` (type: `boolean`):

Only ads posted by recruitment agencies.

## `permanent` (type: `boolean`):

Only permanent jobs.

## `contract` (type: `boolean`):

Only contract jobs.

## `temp` (type: `boolean`):

Only temporary jobs.

## `fullTime` (type: `boolean`):

Only full-time jobs.

## `partTime` (type: `boolean`):

Only part-time jobs.

## `graduate` (type: `boolean`):

Only graduate jobs.

## `postedWithinDays` (type: `integer`):

Keep jobs posted in the last N days. 0 = no limit.

## `visaFilter` (type: `string`):

Filter on what the ad says: offered = sponsorship offered (or mixed), not_refused = drop ads that rule it out.

## `checkSponsorLicence` (type: `boolean`):

Match each employer against the Home Office Register of Licensed Sponsors. It describes the employer, not the job.

## `sponsorFilter` (type: `string`):

Keep only employers holding a UK sponsor licence. Turns the register check on.

## `includeDescription` (type: `boolean`):

Turn off for smaller output; the tags are still computed from the full ad.

## `maxJobs` (type: `integer`):

Stop after this many jobs are saved.

## `onlyNewJobs` (type: `boolean`):

Save only jobs not seen in earlier runs with the same settings, so scheduled runs pay for new jobs only. The first run counts every job as new.

## `monitorName` (type: `string`):

Optional. Runs with the same name share one memory of seen jobs, even if other settings change.

## `reedApiKey` (type: `string`):

Optional. A built-in key is used by default; add your own free key from reed.co.uk/developers for heavy use.

## Actor input object example

```json
{
  "keywords": "software engineer",
  "location": "London",
  "distanceMiles": 10,
  "postedByDirectEmployer": true,
  "postedByRecruitmentAgency": false,
  "permanent": false,
  "contract": false,
  "temp": false,
  "fullTime": false,
  "partTime": false,
  "graduate": false,
  "postedWithinDays": 0,
  "visaFilter": "any",
  "checkSponsorLicence": true,
  "sponsorFilter": "any",
  "includeDescription": true,
  "maxJobs": 200,
  "onlyNewJobs": false
}
```

# Actor output Schema

## `results` (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 = {
    "keywords": "software engineer",
    "location": "London"
};

// Run the Actor and wait for it to finish
const run = await client.actor("quietbyte/reed-jobs-uk-visa").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 = {
    "keywords": "software engineer",
    "location": "London",
}

# Run the Actor and wait for it to finish
run = client.actor("quietbyte/reed-jobs-uk-visa").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 '{
  "keywords": "software engineer",
  "location": "London"
}' |
apify call quietbyte/reed-jobs-uk-visa --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,quietbyte/reed-jobs-uk-visa"
        }
    }
}
```

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/TqWZnU88aHvUG4pKV/builds/3GS4yHLcyXvyGWSI6/openapi.json
