# Prospects.ac.uk Scraper (`santamaria-automations/prospects-uk-scraper`) Actor

Scrape UK graduate jobs, schemes and internships from Prospects.ac.uk. Returns title, employer, salary, closing date, contact email and phone, how to apply, working pattern and optional company details. Pay per result.

- **URL**: https://apify.com/santamaria-automations/prospects-uk-scraper.md
- **Developed by:** [NanoScrape](https://apify.com/santamaria-automations) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 3 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 search result row (fast mode)s

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

## Prospects.ac.uk Scraper: UK Graduate Jobs

Extract graduate schemes, graduate jobs, apprenticeships, internships and placements from [Prospects.ac.uk](https://www.prospects.ac.uk), the UK universities' official careers partner. Every listing includes salary, location, closing date and an apply link. Full mode adds the description, degree requirement and posted date.

### What it does

Prospects.ac.uk lists 300 to 2,000 open graduate opportunities from UK employers. This actor reads the site's own search feed, and optionally opens each listing's detail page and each employer's profile page.

- **Fast**: search feed only. Title, employer, salary, location, employment type, closing date, apply link. No description, no posted date.
- **Full** (default): adds description (text, HTML, Markdown), degree requirement, posted date, contacts found in the text and the diversity flag.
- **includeCompanyDetails**: also fetches each unique employer profile once per run (about-us, address, website).

#### Sample output

```json
{
  "_type": "job",
  "id": "2706650",
  "title": "Engineering - Year in Industry Placement",
  "employer_name": "AWE",
  "company_name": "AWE",
  "location": "Berkshire",
  "salary_min": 24500,
  "salary_max": 24500,
  "salary_currency": "GBP",
  "salary_period": "year",
  "salary_text": "\u00a324,500",
  "employment_type": "work experience",
  "workplace_type": null,
  "degree_required": "any",
  "closing_date": "2026-10-31",
  "posted_at": "2026-09-20",
  "job_url": "https://www.prospects.ac.uk/graduate-jobs/engineering-year-in-industry-placement-2706650",
  "application_url": "https://www.prospects.ac.uk/redirect/job/apply/2706650",
  "diversity_scheme_flag": false,
  "search_query": "engineering",
  "source_platform": "prospects.ac.uk",
  "scraped_at": "2026-09-29T08:00:00Z"
}
```

### Pricing

**$0.001 per actor start + $0.003 per row (fast) or $0.005 per row (full) + optional $0.005 per unique employer profile. About $3 to $5 per 1,000 roles.**

You only pay for rows that are returned. Rows removed by `titleFilter` or `postedWithinDays` are not charged.

| Event | Price |
|-------|-------|
| Actor start | $0.001 |
| Search row (fast mode) | $0.003 |
| Detail row (full mode) | $0.005 |
| Employer profile (unique employer, `includeCompanyDetails=true`) | $0.005 |

**New to Apify?** Every account gets a $5 free monthly platform credit, enough for around 1,000 full-detail rows.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `searchQueries` | array of strings | `["graduate scheme"]` | Keywords to search. Each runs separately, results are deduplicated across queries. |
| `maxResults` | integer | 20 | Total cap across all queries. |
| `maxResultsPerQuery` | integer | 20 | Cap per keyword. The site returns 20 items per page. |
| `mode` | string | `full` | `fast` (search feed only) or `full` (adds detail pages). |
| `postedWithinDays` | number | unset | Only jobs posted within this many days (decimals allowed). Needs the detail page, so it switches the run to full mode. Jobs with no posted date are kept. |
| `sortBy` | string | `newest` | `newest` or `relevance`. The site has no sort option and always returns newest first, so both give the same order. |
| `titleFilter` | string | empty | Comma-separated title terms (OR, case-insensitive). Non-matching rows are dropped before the detail fetch and are not charged. |
| `includeJobDetails` | boolean | false | Kept for compatibility. Full mode always fetches detail pages. |
| `includeCompanyDetails` | boolean | false | Also fetch employer profiles (implies full mode). |
| `maxConcurrency` | integer | 5 | Concurrent detail page requests (1 to 20). |

#### Example input

```json
{
  "searchQueries": ["graduate scheme", "engineering"],
  "maxResults": 40,
  "maxResultsPerQuery": 20,
  "mode": "full",
  "postedWithinDays": 14
}
```

#### Precision title filter

```json
{
  "searchQueries": ["engineer"],
  "titleFilter": "engineer, senior",
  "maxResults": 50
}
```

### What you get

| Field | Type | Description |
|---|---|---|
| `_type` | string | Always `job`. |
| `id` | string | Prospects.ac.uk job ID. |
| `title` | string | Role title. |
| `employer_name` | string | Hiring organisation. |
| `company_name` | string | Same as `employer_name` (fleet-standard alias). |
| `location` | string | Locations as listed, comma-joined (city, region or several regions). |
| `salary_min` / `salary_max` | number | Parsed salary bounds. Null for "Competitive" or "Unpaid". |
| `salary_currency` | string | `GBP` when a salary is parsed. |
| `salary_period` | string | `year`, `month`, `week`, `day` or `hour`. |
| `salary_text` | string | Salary exactly as shown on the site. |
| `employment_type` | string | Site's own type: `graduate-scheme`, `graduate-job`, `apprenticeship`, `work experience` (internships, placements, insight days, vacation schemes) or `law training contract`. |
| `workplace_type` | string | `remote` or `hybrid`, only when the listing states it (about 3% of listings). Null otherwise. |
| `degree_required` | string | `any`, `2:2`, `2:1`, `1st`, `masters` or `phd`. Full mode. |
| `duration_months` | integer | Length of fixed-term roles when stated in the description. Full mode, often null. |
| `closing_date` | string | Application deadline, `YYYY-MM-DD`. |
| `description` | string | Plain-text description. Full mode. |
| `description_full` | string | Plain text with paragraph and list line breaks. Full mode. |
| `description_html` | string | Description as HTML. Full mode. |
| `description_md` | string | Description as Markdown. Full mode. |
| `job_url` | string | Canonical Prospects.ac.uk listing URL. |
| `source_url` | string | Same as `job_url`. |
| `apply_url` | string | Canonical apply link. Same as `application_url`; falls back to `job_url`. |
| `expires_at` | string | Same as `closing_date` (fleet-canonical name). |
| `application_url` | string | Apply link (Prospects redirect to the employer's application page). |
| `diversity_scheme_flag` | boolean | True when the listing mentions a diversity programme such as Rare or Bright Network. Full mode. |
| `posted_at` / `posted_at_datetime` | string | Posted date `YYYY-MM-DD`. Full mode only; the search API has no posted date, so it is null in fast mode. |
| `posted_at_text` | string | Raw posted date text. Full mode. |
| `source_platform` | string | Always `prospects.ac.uk`. |
| `search_query` | string | The keyword that produced the row. |
| `scraped_at` | string | UTC scrape timestamp. |
| `contact_emails` / `contact_phones` / `contact_urls` | array | Contacts found on the job page: mailto and tel links plus emails and numbers in the description and How to apply text (Prospects' own addresses excluded). Full mode. |
| `contact_email` / `contact_phone` | string | First email and first phone from the arrays above. Full mode. |
| `how_to_apply` | string | Text of the How to apply section on the job page. Full mode. |
| `contract_type` / `working_pattern` | string | Contract type (Fixed term, Permanent) and working pattern (Full-time, Part-time) from Additional job details, when stated. Full mode. |
| `additional_details` | object | Every label/value pair from the Additional job details section. Full mode. |
| `company_about` | string | Employer about-us text. With `includeCompanyDetails`. |
| `company_website` | string | Employer's own website or careers URL from its profile. With `includeCompanyDetails`. |
| `company_phone` / `company_email` | string | Employer contact details when published (usually null). |
| `company_address_street` / `_city` / `_postcode` / `_country` | string | Employer postal address. With `includeCompanyDetails`. |
| `company_active_jobs_count` | integer | Open roles at this employer. With `includeCompanyDetails`. |
| `company_active_jobs` | array | Other open roles at the same employer (`title`, `job_url`, `location`, `salary_text`), taken from the job page. With `includeCompanyDetails`. |

#### Deprecation notes

- `employer_name` is deprecated (introduced 2026-09-29, removal not before 2027-09-29). Use `company_name`, which carries the same value. Both are emitted.
- `application_url` is an alias of `apply_url`. Both are emitted.

### Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client: Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=santamaria-automations/prospects-uk-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}
```

For per-tool schemas and copy-paste snippets for MCP clients, see the [MCP tab](https://console.apify.com/actors/WHxKqla89MahnwQ05/info/api/mcp?build=latest).

**Example prompt once connected:**

> "Use `prospects-uk-scraper` to find graduate software developer roles in the UK closing in the next 30 days. Return a table with employer, salary and closing date."

### Support

- **Questions or issues?** Email contact@nanoscrape.com, we typically reply within 6 hours. You can also open a ticket in the [Issues tab](https://console.apify.com/actors/WHxKqla89MahnwQ05/info/issues) on the actor page.
- **Feature request for this actor?** Open a ticket in the [Issues tab](https://console.apify.com/actors/WHxKqla89MahnwQ05/info/issues) or email contact@nanoscrape.com with the platform field you need and (if possible) a URL that shows the data live.
- **Need a scraper for a job board we don't cover yet?** Email contact@nanoscrape.com with the target site and your rough usage volume. We ship one-off boards regularly.

### Why this scraper

- **Source of truth for UK graduate hiring.** Prospects.ac.uk is Jisc's official careers portal, linked from nearly every UK university careers service.
- **Clean, structured rows.** Parsed salary, deadline, degree requirement and posted date.
- **No login and no browser.** Small runs cost cents.
- **Fast.** Fast mode returns 45 rows in a few seconds; full mode about 40 rows per minute.

### Common use cases

- **Graduate recruitment agencies**: track competitor grad schemes and salary benchmarks.
- **University careers services**: feed a live list of relevant roles to your careers portal.
- **AI job-search agents**: give agents structured access to UK graduate roles.
- **Diversity and inclusion research**: track which schemes mention diversity partnerships.

### Notes and limits

- The site does not publish a sector, verified badge, start-date type, scheme size or visa flag in its listings, so this actor does not output them.
- The site's search feed has no posted date. `posted_at` is only filled in full mode (from the detail page).
- Some listings do not disclose salary ("Competitive", "Unpaid") or degree class. Those fields are null.
- `workplace_type` is only set when the listing states a workplace, which is rare.
- `duration_months` is extracted from description text when present and is often null.
- Prospects rarely publishes employer phone or email. Address, about-us text and website fill at high rates with `includeCompanyDetails`.

### Related Actors

More UK job scrapers:

- [TargetJobs UK Scraper](https://apify.com/santamaria-automations/targetjobs-uk-scraper): UK graduate jobs, internships, spring weeks and placement years.
- [Reed.co.uk Scraper](https://apify.com/santamaria-automations/reed-uk-scraper): the UK's largest general job board.
- [CWJobs UK Scraper](https://apify.com/santamaria-automations/cwjobs-uk-scraper): UK IT and tech specialist board.
- [Teaching Vacancies UK Scraper](https://apify.com/santamaria-automations/teaching-vacancies-uk-scraper): UK government teaching jobs portal.
- [Indeed Scraper](https://apify.com/santamaria-automations/indeed-scraper): job listings from Indeed.

Enrich the employer websites this actor returns in `company_website`:

- [Website Email Scraper](https://apify.com/santamaria-automations/website-email-scraper): pull hiring-team emails from employer sites.
- [Website Contact Extractor](https://apify.com/santamaria-automations/website-contact-extractor): phone numbers, emails and social links from employer sites.

# Actor input Schema

## `searchQueries` (type: `array`):

One or more graduate role keywords to search for (e.g. 'graduate scheme', 'software developer', 'consulting'). Each runs as a separate search and results are deduplicated across queries.

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

Total cap across all queries (rows dropped by titleFilter or postedWithinDays do not count). Prospects.ac.uk typically lists 300 to 2000 open graduate roles at any time.

## `maxResultsPerQuery` (type: `integer`):

Maximum results per keyword. Prospects.ac.uk pagination returns 20 items per page.

## `mode` (type: `string`):

Fast mode extracts fields available from the search JSON API. Full mode also fetches each job's detail page for description, degree requirements, closing date and application URL.

## `postedWithinDays` (type: `number`):

Only return jobs posted within this many days (decimals allowed, e.g. 0.5 for 12 hours). Prospects.ac.uk only publishes the posted date on the detail page, so setting this switches the run to full mode. Jobs with an unknown posted date are kept. Leave empty or 0 to disable.

## `sortBy` (type: `string`):

Preferred result ordering. Prospects.ac.uk's search API has no sort parameter and always returns results newest first, so both values give the same order. The field is accepted for fleet schema consistency.

## `titleFilter` (type: `string`):

Comma-separated list of terms to match against job titles (case-insensitive OR-match). Only jobs whose title contains one of the terms are emitted. Non-matching rows are dropped before the detail-fetch event, so you don't pay for filtered-out jobs. Leave empty to disable.

## `includeJobDetails` (type: `boolean`):

Fetch each job's detail page for the full description, structured salary, employment type, closing date, and any additional PDP-only fields. Otherwise only SERP-visible fields are returned.

## `includeCompanyDetails` (type: `boolean`):

Also fetch each unique employer's company profile page for the About-us text, phone, address, website, and a list of the employer's other currently-open roles. Deduplicated per employer within a run. Adds one HTTP hop per unique employer.

## `maxConcurrency` (type: `integer`):

Maximum number of concurrent detail page requests (full mode only).

## Actor input object example

```json
{
  "searchQueries": [
    "graduate scheme"
  ],
  "maxResults": 20,
  "maxResultsPerQuery": 20,
  "mode": "full",
  "sortBy": "newest",
  "titleFilter": "",
  "includeJobDetails": false,
  "includeCompanyDetails": false,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `jobListings` (type: `string`):

Dataset of scraped listings, 52 fields per row (details and employer profile fields fill in full mode / includeCompanyDetails).

# 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 = {
    "searchQueries": [
        "graduate scheme"
    ],
    "maxResults": 20,
    "maxResultsPerQuery": 20,
    "mode": "full",
    "sortBy": "newest",
    "maxConcurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/prospects-uk-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 = {
    "searchQueries": ["graduate scheme"],
    "maxResults": 20,
    "maxResultsPerQuery": 20,
    "mode": "full",
    "sortBy": "newest",
    "maxConcurrency": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/prospects-uk-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 '{
  "searchQueries": [
    "graduate scheme"
  ],
  "maxResults": 20,
  "maxResultsPerQuery": 20,
  "mode": "full",
  "sortBy": "newest",
  "maxConcurrency": 5
}' |
apify call santamaria-automations/prospects-uk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,santamaria-automations/prospects-uk-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/WHxKqla89MahnwQ05/builds/TEaeCWI7ctcKHi5t1/openapi.json
