# TargetJobs Scraper - UK Graduate Jobs & Schemes (`studio-amba/targetjobs-scraper`) Actor

Scrape UK graduate jobs, internships and schemes from targetjobs.co.uk. Extract job titles, employers, locations, salaries, application deadlines, degree requirements, and apply links. No login or cookies required.

- **URL**: https://apify.com/studio-amba/targetjobs-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.00 / 1,000 result scrapeds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does TargetJobs Scraper do?

**TargetJobs Scraper** extracts graduate job listings from [targetjobs.co.uk](https://targetjobs.co.uk), the UK's official graduate-careers site for graduate schemes, internships, placements, and entry-level jobs. Give it a keyword and it returns structured data for every matching opportunity: job title, employer, location, sector, salary (where advertised), application deadline, degree requirements, and a direct apply link. It reads the site's own JSON search API and per-listing data feed, so there is no login, no cookies, and no browser automation required.

Run it on the Apify platform to get UK graduate job market data via API, schedule recurring scrapes, and pipe results into tools like Zapier, Make, Google Sheets, Airtable, and Slack.

### How to scrape targetjobs.co.uk data

1. Go to the TargetJobs Scraper on the Apify Store.
2. Click **Try for free** to open the actor in the Apify Console.
3. Enter a search query (e.g. "graduate scheme", "engineering graduate", "marketing internship").
4. Optionally filter by opportunity type (Graduate job, Internship, Placement, Insight programme, etc.) and/or city.
5. Set the maximum number of results you want (default: 50).
6. Leave the proxy configuration on automatic (the default) -- targetjobs.co.uk has no bot protection.
7. Click **Start** and wait for the run to finish.
8. Download your data as JSON, CSV, Excel, or HTML from the Output tab, or pull it via the Apify API.

### Why use TargetJobs Scraper?

- **Graduate recruitment intelligence** -- see which employers are hiring graduates right now, for what roles, in which sectors, and (where published) at what starting salary.
- **Careers service and university partnerships** -- feed structured, current listings into a university careers portal or student-facing job board without manually re-keying employer content.
- **Recruitment marketing benchmarking** -- track which employers run "register your interest" pre-launch campaigns, how early graduate schemes open, and how application windows compare across sectors.
- **Deadline tracking** -- application deadlines are extracted and normalised to ISO dates, so you can build alerts for closing graduate schemes before they shut.
- **Sector and degree-requirement analysis** -- most listings carry a sector tag and, where specified, required degree subjects and classifications, useful for skills-gap and labour-market research.
- **Lead generation** -- identify employers actively running graduate campaigns to target with recruitment marketing, assessment-centre training, or careers services.

### About targetjobs.co.uk

targetjobs.co.uk is the UK's dedicated graduate-careers site, publishing graduate jobs, schemes, internships, placements, and insight programmes from employers across every major sector. Key characteristics:

- **Coverage**: UK-wide, from London to regional offices, plus a smaller set of international graduate schemes.
- **Opportunity types**: Graduate job, Internship, Placement, Insight programme, Training, Vacation scheme, Postgraduate study, Law training contract, Law pupillage, Casual work, and Work experience.
- **Sectors**: Engineering, technology, accounting & finance, consulting, law, retail, charity & public service, and more, categorised under the site's own sector taxonomy.
- **Listing lifecycle**: a meaningful share of listings are "register your interest" postings for schemes that haven't formally opened yet -- these carry an employer and description but no fixed location or deadline until the scheme launches.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | string | No | Job keyword to search for. Defaults to `graduate` if empty. |
| `opportunityType` | string | No | Filter by opportunity type (Graduate job, Internship, Placement, etc.). Leave empty for all types. |
| `city` | string | No | Filter by city, e.g. `London`, `Manchester`, `Edinburgh`. Leave empty to search all locations. |
| `maxResults` | integer | No | Maximum number of listings to scrape. Default `50`. |
| `proxyConfiguration` | object | No | Apify proxy settings. Defaults to automatic proxy. |

#### Example input

```json
{
  "searchQuery": "engineering graduate",
  "opportunityType": "Graduate job",
  "city": "London",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

### Output

Each job listing is a flat JSON object with the following fields:

| Field | Type | Example |
|-------|------|---------|
| `jobId` | number | `237855` |
| `jobTitle` | string | `Engineering Graduate` |
| `employer` | string | `McLaren Racing Ltd` |
| `location` | string | `Woking` |
| `city` | string | `Woking` |
| `opportunityType` | string | `Graduate job` |
| `sectors` | string | `Engineering` |
| `description` | string | `At McLaren Racing, we're not just here to try to take the chequered flag...` |
| `degreeSubjects` | string | `Engineering, Mathematics` |
| `degreeRequirements` | string | `2:1 or above` |
| `salaryLower` | number | `26000` |
| `salaryUpper` | number | `28000` |
| `salaryCurrency` | string | `GBP` |
| `salaryRangeText` | string | `£25,000 to £30,000` |
| `applicationDeadline` | string | `2026-10-07T00:00:00.000Z` |
| `applicationOpen` | boolean | `true` |
| `registerInterestOnly` | boolean | `false` |
| `applicationUrl` | string | `https://jobs.smartrecruiters.com/...` |
| `postedDate` | string | `2026-09-02T09:39:31Z` |
| `updatedDate` | string | `2026-09-02T09:39:31Z` |
| `url` | string | `https://targetjobs.co.uk/jobs/engineering-graduate-237855` |
| `scrapedAt` | string | `2026-09-03T09:10:00.000Z` |

#### Example output

```json
{
  "jobId": 237855,
  "jobTitle": "Engineering Graduate",
  "employer": "McLaren Racing Ltd",
  "location": "Woking",
  "city": "Woking",
  "opportunityType": "Graduate job",
  "sectors": "Engineering",
  "description": "At McLaren Racing, we're not just here to try to take the chequered flag...",
  "degreeSubjects": null,
  "degreeRequirements": null,
  "salaryLower": null,
  "salaryUpper": null,
  "salaryCurrency": null,
  "salaryRangeText": null,
  "applicationDeadline": "2026-10-07T00:00:00.000Z",
  "applicationOpen": true,
  "registerInterestOnly": false,
  "applicationUrl": "https://jobs.smartrecruiters.com/McLarenRacingLtd1/744000145758060-engineering-graduate",
  "postedDate": "2026-09-02T09:39:31Z",
  "updatedDate": "2026-09-02T09:39:31Z",
  "url": "https://targetjobs.co.uk/jobs/engineering-graduate-237855",
  "scrapedAt": "2026-09-03T09:10:00.000Z"
}
```

### Cost estimate

This actor is billed on Apify's Pay Per Result model: $0.01 per run start plus $0.012 per job returned. A 20-job run costs about $0.25; a 100-job run about $1.21. Each run makes one search request per 100 listings plus one lightweight detail request per listing (to resolve the employer name reliably), so a run of a few hundred listings finishes in a couple of minutes of compute. Your run's usage cost only settles after it reports SUCCEEDED — checking cost mid-run will undercount it.

### Limitations and known issues

- **Salary rarely published** -- most UK graduate schemes don't advertise a starting salary. Where targetjobs.co.uk has no figure, the salary fields are `null`. This reflects the site's real data, not a scraping gap.
- **Location can be empty by design** -- a meaningful share of listings are "register your interest" pre-launch postings or virtual/nationwide programmes with no fixed office. `location` is `null` for these, and `registerInterestOnly` is `true`.
- **Deadline can be empty by design** -- pre-launch "register your interest" postings don't have an application deadline yet; `applicationDeadline` stays `null` until the scheme formally opens.
- **UK focus, some international schemes** -- the majority of listings are UK-based; a small number are international graduate schemes run by UK-headquartered employers.
- **Result ceiling** -- the site currently lists roughly 1,300 open opportunities at any time. Keep `maxResults` reasonable for the query you actually need.

### Related scrapers

- **Reed Scraper** -- UK-wide job board covering every experience level, not just graduate roles.
- **TotalJobs Scraper** -- another major UK general job board.
- Browse the Studio AMBA profile on the Apify Store for more European job and career scrapers.

### FAQ

**Do I need a targetjobs.co.uk account or API key?**
No. This actor reads targetjobs.co.uk's public search API and listing data. There is no login, no cookies, and no API key required.

**Can I filter by degree subject or salary?**
The current version filters by keyword, opportunity type, and city. Degree requirements, degree subjects, and salary are returned on every result (when the employer publishes them) so you can filter them yourself after scraping.

**Why do some listings have no location or deadline?**
targetjobs.co.uk carries a mix of live vacancies and "register your interest" pre-launch postings for schemes that haven't formally opened for applications yet. Those postings genuinely don't have a fixed location or deadline until the scheme launches -- the `registerInterestOnly` field flags them.

**Is scraping targetjobs.co.uk legal?**
This actor collects publicly available job listing data. You are responsible for using the data in line with targetjobs.co.uk's terms and applicable law. Do not use it to send unsolicited communications in breach of regulations.

# Actor input Schema

## `searchQuery` (type: `string`):

Job keyword to search for (e.g. 'graduate scheme', 'engineering graduate', 'marketing internship', 'finance'). Defaults to 'graduate' if empty.

## `opportunityType` (type: `string`):

Filter by opportunity type. Leave empty for all types.

## `city` (type: `string`):

Filter by UK (or international) city, e.g. 'London', 'Manchester', 'Edinburgh'. Leave empty to search all locations.

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

Maximum number of job listings to scrape.

## `proxyConfiguration` (type: `object`):

Proxy settings. targetjobs.co.uk has no bot-wall -- the default automatic proxy works well.

## Actor input object example

```json
{
  "searchQuery": "graduate scheme",
  "opportunityType": "",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "searchQuery": "graduate scheme",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/targetjobs-scraper").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 = {
    "searchQuery": "graduate scheme",
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/targetjobs-scraper").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 '{
  "searchQuery": "graduate scheme",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/targetjobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/targetjobs-scraper"
        }
    }
}

```

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/Ip8LJSrQUSCHIARoi/builds/a8Cl468YNkieOI3Gu/openapi.json
