# Reed.co.uk Job Scraper (`trev0n/reed-scraper`) Actor

Scrape reed.co.uk job listings by keyword, sector and location. Every on-site filter, salary bounds, remote/hybrid status, full job descriptions, and incremental monitoring that emits only new or updated listings on recurring runs.

- **URL**: https://apify.com/trev0n/reed-scraper.md
- **Developed by:** [Paweł](https://apify.com/trev0n) (community)
- **Categories:** Jobs, Lead generation, Business
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 job results

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?

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

## 💼 Reed.co.uk Job Scraper

🎯 **Turn the UK's biggest job board into a clean, structured dataset — every job, every salary, every employer, updated as often as you like.**

This scraper pulls job listings from reed.co.uk across all 37 sectors and every UK town, city and postcode. You get job titles, salary ranges, contract types, remote and hybrid status, employers, posting dates and — when you want it — the complete job description with required skills and exact location.

### 🚀 What Does It Do?

This scraper automatically searches reed.co.uk and collects **structured, ready-to-use data** from the UK's largest job board. No manual browsing, no copy-paste, no missed listings — just set your filters and hit Start.

💡 **Two modes of operation:**

1. **🔍 Discovery Mode** — Search by keyword, sector, location and salary, then page through every matching result. A single run can harvest an entire sector.
2. **📋 Direct URL Mode** — Paste reed.co.uk search or job pages and the scraper takes them exactly as given.

🔁 **And a third way to use it:** switch on **Monitoring** and every scheduled run returns only what changed since last time — the new jobs, the edited jobs, the ones that came back. Typically 80–95% fewer results to pay for and read.

### 👥 Who Is This For?

| 🏢 Use Case                         | 💬 How It Helps                                                                                                                    |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| 🧲 **Recruiters & agencies**        | See every competing ad for your roles the day it goes live, with the salary the client is really offering                          |
| 📊 **Salary & market analysts**     | Build genuine pay benchmarks from thousands of live ads, broken down by sector, region and contract type                           |
| 🏗️ **Job boards & aggregators**     | Keep your own listings fresh with a daily feed of new and updated UK vacancies                                                     |
| 🤖 **AI & data teams**              | Feed a training set or a matching engine with clean, labelled job data instead of scraped HTML                                     |
| 🔎 **Job seekers & career coaches** | Get an alert the moment a role matching your exact criteria appears — including the hybrid roles the site itself cannot filter for |
| 💼 **Employer-brand teams**         | Track which companies are hiring in your space, how fast, and at what pay                                                          |

### ✨ Features

- 🌐 **Full UK coverage** — Every town, city, county and postcode, with an adjustable search radius
- 🗂️ **All 37 sectors** — From IT & Telecoms to Social Care, Apprenticeships and Charity work
- 💷 **Real salary data** — Numeric from/to bounds, the period (per hour, per day, per annum) and the exact wording of the ad
- 🏡 **Remote, hybrid and on-site** — Every job is labelled, so you can isolate hybrid roles even though the site itself only filters for fully remote
- 📄 **Full job descriptions** — Optionally open each listing for the complete description, required skills and precise location
- 🔔 **Change monitoring** — Recurring runs return only new, updated or reappeared jobs, with repost detection
- 📬 **Instant alerts** — Send new matches straight to Slack, Discord, Telegram or your own webhook
- 🎛️ **Smart Filters** — Keyword, sector, location, radius, salary range, contract type, hours, remote, agency vs employer, posting age, graduate, easy-apply and visa sponsorship
- 🧹 **Post-filters the site doesn't offer** — Keyword must/must-not rules, a real salary floor that drops unpaid ads, hybrid-only, and a minute-level freshness cut-off
- ⚡ **Fast & Scalable** — 25 jobs per request with no page-depth ceiling; a full 6,000-job sector is a single run
- 🚫 **Deduplication** — Results are de-duplicated by job ID across pages and across every keyword in the same run
- 📤 **Export Anywhere** — Download results as JSON, CSV, Excel, or push to Google Sheets, Zapier, Make, or your CRM

### 🎛️ Filters & Options

| Option                              | What It Does                                                                  |
| ----------------------------------- | ----------------------------------------------------------------------------- |
| 🔤 **Search Keywords**              | What to look for, e.g. "software developer", "registered nurse", "hgv driver" |
| ➕ **Additional Keyword Searches**  | Run several searches in one go and get one merged, de-duplicated dataset      |
| 📍 **Location**                     | Any UK town, city, county or postcode                                         |
| 📏 **Search Radius**                | How many miles around that location to include                                |
| 🗂️ **Sector**                       | Narrow to one of Reed's 37 sectors, or search all of them                     |
| 📑 **Contract Type**                | Permanent, contract or temporary only                                         |
| ⏱️ **Hours**                        | Full-time or part-time only                                                   |
| 🏡 **Remote Jobs Only**             | Restrict to fully remote roles                                                |
| 🏢 **Posted By**                    | Only recruitment agencies, or only employers hiring directly                  |
| 📅 **Posted Within**                | Today, the last 3 days, the last week or the last fortnight                   |
| 💷 **Minimum / Maximum Salary**     | Restrict to a pay band before results are even returned                       |
| 🎓 **Graduate Roles Only**          | Only graduate schemes and entry-level positions                               |
| ⚡ **Easy-Apply Only**              | Only jobs you can apply to in one click                                       |
| 🛂 **Visa Sponsorship Only**        | Only employers offering sponsorship                                           |
| 🧹 **Hide Training Courses**        | Drop the paid training listings mixed into job results                        |
| 🔎 **Must / Must Not Contain**      | Keep or drop jobs by words anywhere in the title, company or description      |
| 🏠 **Remote Types To Keep**         | Keep only Remote, Hybrid, On-Site or unspecified roles                        |
| 💰 **Minimum Salary On The Record** | A real pay floor that also removes ads with no salary at all                  |
| ⏰ **Maximum Age**                  | Keep only jobs posted or updated in the last N minutes                        |
| 📄 **Fetch Full Job Descriptions**  | Open each listing for the complete text, skills and postcode                  |
| ✂️ **Truncate Descriptions**        | Cap long descriptions at a character count                                    |
| 🔁 **Monitoring**                   | Return only what changed since the previous run                               |
| 🔕 **Skip Reposts**                 | Ignore expired ads re-posted under a new ID                                   |
| 📢 **Notifications**                | Slack, Discord, Telegram or webhook alerts when something new lands           |
| 🗜️ **Compact Output**               | Ten essential fields per job instead of the full record                       |
| 🔢 **Max Results**                  | Control how many jobs to extract per run — or take everything                 |
| 🔗 **Direct URLs**                  | Optionally provide specific reed.co.uk search or job URLs to scrape           |

### 📦 What You Get (Output Fields)

Every job includes:

#### Job Basics

| Field              | Example                                                                            |
| ------------------ | ---------------------------------------------------------------------------------- |
| jobId              | `57205630`                                                                         |
| title              | `Software Engineer`                                                                |
| url                | `https://www.reed.co.uk/jobs/software-engineer/57205630`                           |
| descriptionSnippet | `Software Engineer Location: Hybrid / Remote (UK-based) Team: Engineering...`      |
| description        | `Software Engineer\n\nLocation: Hybrid / Remote (UK-based)\n\nAbout Our Client...` |
| skills             | `["React", "TypeScript", "AWS"]`                                                   |
| category           | `Engineer`                                                                         |
| subCategory        | `Software Engineer`                                                                |
| sector             | `IT & Telecoms`                                                                    |
| subSector          | `Analyst Prog/Dev`                                                                 |

#### Employer

| Field                | Example                                                                   |
| -------------------- | ------------------------------------------------------------------------- |
| companyName          | `Vermillion Analytics`                                                    |
| companyProfileUrl    | `https://www.reed.co.uk/jobs/vermillion-analytics/p100633`                |
| companyLogo          | `https://resources.reed.co.uk/profileimages/logos/thumbs/Logo_100633.png` |
| postedByType         | `Employer`                                                                |
| isAgency             | `false`                                                                   |
| isEmployer           | `true`                                                                    |
| applicationReference | `17011_24679329`                                                          |

#### Pay

| Field              | Example                       |
| ------------------ | ----------------------------- |
| salaryFrom         | `35000`                       |
| salaryTo           | `45000`                       |
| salaryPeriod       | `per annum`                   |
| salaryCurrency     | `GBP`                         |
| salaryText         | `£35,000 - £45,000 per annum` |
| salaryFromPerAnnum | `35000`                       |
| salaryToPerAnnum   | `45000`                       |
| salaryIsNegotiable | `false`                       |
| salaryIsOte        | `false`                       |

#### Location & Working Style

| Field                | Example              |
| -------------------- | -------------------- |
| location             | `London`             |
| town                 | `London`             |
| county               | `London`             |
| region               | `South East England` |
| country              | `United Kingdom`     |
| countryCode          | `GB`                 |
| postCode             | `EC2A 4NE`           |
| remoteWorkingOption  | `Hybrid`             |
| isRemoteJob          | `false`              |
| inferredLocationType | `hybrid`             |

#### Contract & Timing

| Field        | Example                    |
| ------------ | -------------------------- |
| contractType | `Permanent`                |
| isFullTime   | `true`                     |
| isPartTime   | `false`                    |
| isGraduate   | `false`                    |
| isEasyApply  | `true`                     |
| ukOnly       | `true`                     |
| postedAt     | `2026-08-06T12:54:07.117`  |
| updatedAt    | `2026-08-18T13:02:17.647`  |
| expiresAt    | `2026-09-17T23:59:59`      |
| scrapedAt    | `2026-08-30T15:21:32.438Z` |

#### Monitoring (when monitoring is on)

| Field       | Example                            |
| ----------- | ---------------------------------- |
| changeType  | `NEW`                              |
| firstSeenAt | `2026-08-28T06:00:00.000Z`         |
| lastSeenAt  | `2026-08-30T06:00:00.000Z`         |
| isRepost    | `false`                            |
| repostOfId  | `null`                             |
| contentHash | `6c347d7b0667a51958afaf89d017a7da` |

### 📊 Example Output

```json
{
    "jobId": 57205630,
    "title": "Software Engineer",
    "url": "https://www.reed.co.uk/jobs/software-engineer/57205630",
    "companyName": "Vermillion Analytics",
    "companyProfileUrl": "https://www.reed.co.uk/jobs/vermillion-analytics/p100633",
    "companyLogo": "https://resources.reed.co.uk/profileimages/logos/thumbs/Logo_100633.png",
    "postedByType": "Employer",
    "location": "London",
    "town": "London",
    "county": "London",
    "region": "South East England",
    "country": "United Kingdom",
    "countryCode": "GB",
    "postCode": null,
    "contractType": "Permanent",
    "isFullTime": true,
    "isPartTime": false,
    "remoteWorkingOption": "Hybrid",
    "isRemoteJob": false,
    "inferredLocationType": "hybrid",
    "salaryFrom": 35000,
    "salaryTo": 45000,
    "salaryPeriod": "per annum",
    "salaryCurrency": "GBP",
    "salaryText": "£35,000 - £45,000 per annum",
    "salaryFromPerAnnum": 35000,
    "salaryToPerAnnum": 45000,
    "salaryIsNegotiable": false,
    "salaryIsOte": false,
    "descriptionSnippet": "Software Engineer Location: Hybrid / Remote (UK-based) Team: Engineering Salary: Up to 45000...",
    "description": "Software Engineer\n\nLocation: Hybrid / Remote (UK-based)\n\nYou must be UK based and eligible to work.\n\nAbout Our Client\n\nOur client is one of Europe's fastest-growing software companies...",
    "skills": [],
    "category": "Engineer",
    "subCategory": "Software Engineer",
    "sector": "IT & Telecoms",
    "subSector": "Analyst Prog/Dev",
    "applicationReference": null,
    "screeningQuestionCount": 0,
    "isAgency": false,
    "isEmployer": true,
    "isGraduate": false,
    "isEasyApply": true,
    "isTrainingJob": false,
    "ukOnly": true,
    "postedAt": "2026-08-06T12:54:07.117",
    "updatedAt": "2026-08-18T13:02:17.647",
    "expiresAt": "2026-09-17T23:59:59",
    "searchQuery": "software developer",
    "searchUrl": "https://www.reed.co.uk/jobs?keywords=software+developer&location=London&proximity=10",
    "contentHash": "6c347d7b0667a51958afaf89d017a7daa752e323",
    "scrapedAt": "2026-08-30T15:21:32.438Z"
}
```

### 📋 Dataset Views

The Apify Console gives you **4 ready-made table views** to quickly browse your results:

| View                    | What It Shows                                                                                      |
| ----------------------- | -------------------------------------------------------------------------------------------------- |
| 📊 **Overview**         | Job title, company, location, salary, contract, working style, posting date and link               |
| 💷 **Salary Breakdown** | Numeric pay bounds and period next to the advertised wording — ready for sorting and benchmarking  |
| 🔔 **Monitoring Feed**  | What changed since the last run, when each job was first and last seen, and whether it is a repost |
| 📋 **Everything**       | Every single field — the complete dataset                                                          |

### ❓ FAQ

**🤔 How many jobs can I get in one run?**
As many as the search has. There is no page-depth ceiling — a whole sector of 6,000+ jobs comes out in a single run. Set Max Results to 0 to take everything.

**🤔 Can I get hybrid jobs only?**
Yes. Reed itself can only filter for fully remote roles, but every job here is labelled Remote, Hybrid, On-Site or unspecified, so use "Remote Types To Keep" to isolate hybrid — something you cannot do on the site.

**🤔 Do I need the full job descriptions?**
Only if you want them. The search results already carry title, salary, location, contract type, employer and dates. Turning on full descriptions adds the complete text, required skills and postcode at the cost of one extra request per job.

**🤔 How do I track only new jobs?**
Switch on Monitoring and schedule the run. The first run stores a baseline; every run after that returns only new, updated or reappeared listings — usually 80–95% fewer results.

**🤔 Will I get the same job twice?**
No. Results are de-duplicated by job ID across pages and across every keyword search in the same run.

**🤔 Can I export the data?**
Yes — JSON, CSV, Excel, XML, HTML, RSS. You can also push data directly to Google Sheets, Zapier, Make, or any webhook/API endpoint.

**🤔 How often should I run this?**
For fresh data, run daily or weekly. You can schedule automatic runs on Apify with just a few clicks — and with Monitoring on, a daily run costs a fraction of a full re-scrape.

**🤔 Do I need a proxy?**
No — and you are better off without one. The scraper runs at full speed straight from Apify with no proxy at all, which is the default. If you do want one for a very large harvest, choose residential proxies with country United Kingdom; the shared datacenter pool is the one setting that will cost you blocked requests.

### 🛠️ Need Custom Filters or Features?

**I'm happy to customize this scraper for your specific needs!** 🤝

Whether you need:

- 🎯 Additional filters (specific employers, job reference numbers, IR35 status, security clearance, shift patterns)
- 📊 Extra data fields or custom output formats
- 🔄 Integration with your CRM, Google Sheets, or database
- ⏰ Scheduled scraping with automatic deduplication
- 🌐 Scraping from other UK job boards alongside reed.co.uk

👉 **Don't hesitate to reach out via private message** — I respond quickly and I'm always open to building exactly what you need. No request is too small or too specific!

### ⚖️ Legal & Ethical Use

This scraper collects **only publicly available information** from reed.co.uk. It does not access private data, bypass authentication, or touch any part of the site that reed.co.uk asks crawlers to stay out of. Please use the data responsibly and in compliance with applicable laws and platform terms of service.

# Actor input Schema

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

What to search for on reed.co.uk, e.g. "software developer", "registered nurse" or "hgv driver". Leave empty to browse a whole sector or location.

## `additionalKeywords` (type: `array`):

Run several keyword searches in one go. Results are merged and de-duplicated by job ID.

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

A UK town, city, county or postcode, e.g. "London", "Milton Keynes" or "SW1A 1AA".

## `proximity` (type: `integer`):

How far from the location to search. Reed's own default is 10 miles.

## `sector` (type: `string`):

Restrict the search to one of Reed's 37 sectors. Leave empty to search every sector.

## `startUrls` (type: `array`):

Paste reed.co.uk search or job-page URLs to scrape them directly instead of building a search. Search URLs are paged through; job URLs are fetched in full.

## `contractType` (type: `string`):

Permanent, contract or temporary roles only.

## `hours` (type: `string`):

Full-time or part-time roles only.

## `remoteWorkingOption` (type: `string`):

Reed can only filter for fully remote roles. To narrow to hybrid or on-site, leave this empty and use "Remote types to keep" below instead.

## `postedBy` (type: `string`):

Only ads posted by recruitment agencies, or only ads posted directly by the employer.

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

Reed offers today, 3 days, 1 week and 2 weeks. Any other number is rounded up to the next bucket; anything over 14 days is ignored.

## `salaryFrom` (type: `integer`):

Reed's own salary-from filter. Applied by the site before results are returned.

## `salaryTo` (type: `integer`):

Reed's own salary-to filter.

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

Only graduate schemes and entry-level roles Reed tags as graduate.

## `easyApplyOnly` (type: `boolean`):

Only jobs you can apply to without leaving Reed.

## `visaSponsorshipOnly` (type: `boolean`):

Only employers who state they offer visa sponsorship.

## `hideTrainingJobs` (type: `boolean`):

Reed mixes paid training courses into its job results. Turn this on to drop them.

## `hideSurveyJobs` (type: `boolean`):

Drop paid-survey listings that appear alongside real vacancies.

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

Stop after this many jobs. Set to 0 for every result the search has — Reed pages all the way to the end, so a whole sector really can be harvested.

## `maxPages` (type: `integer`):

Extra safety cap. Each page holds 25 jobs. 0 means no page cap.

## `includeDetails` (type: `boolean`):

Opens each job page for the complete description, required skills, postcode and exact salary wording. One extra request per job.

## `descriptionFormat` (type: `string`):

Plain text is easier to read and search; original HTML keeps Reed's formatting and links.

## `descriptionMaxLength` (type: `integer`):

0 keeps the full description.

## `detailConcurrency` (type: `integer`):

How many job pages to open at once when full descriptions are switched on.

## `useProxyForDetails` (type: `boolean`):

Off by default — job pages fetch faster and more reliably straight from the actor.

## `includeKeywords` (type: `array`):

Keep only jobs whose title, company or description mentions at least one of these.

## `excludeKeywords` (type: `array`):

Drop jobs whose title, company or description mentions any of these.

## `remoteTypes` (type: `array`):

Keep only Remote, Hybrid, On-Site or NotSpecified jobs. Applied after scraping, which is how you get hybrid-only results that Reed itself cannot filter for.

## `minSalary` (type: `integer`):

Drops jobs whose advertised top-of-range salary is below this. Unlike Reed's own filter, this also removes ads with no salary at all.

## `excludeTrainingJobs` (type: `boolean`):

Removes training listings from the results after scraping, even if Reed still returned them.

## `maxAgeMinutes` (type: `integer`):

Keep only jobs posted or updated within this many minutes. Finer than Reed's day buckets — use it for near-real-time monitoring.

## `compact` (type: `boolean`):

Ten essential fields per job instead of the full record.

## `excludeEmptyFields` (type: `boolean`):

Removes fields that came back empty, for a leaner dataset.

## `incrementalMode` (type: `boolean`):

Remember what previous runs saw and emit only new, updated or reappeared jobs. The first run stores a baseline; later runs typically emit 80-95% fewer records.

## `stateKey` (type: `string`):

Name the baseline this run compares against. Leave empty to derive one from the search settings.

## `emitUnchanged` (type: `boolean`):

Also emit jobs that have not changed since the previous run. Off by default — emitting them is what monitoring exists to avoid.

## `emitExpired` (type: `boolean`):

Emits a record for every job that was in the baseline but is gone from this run's results.

## `skipReposts` (type: `boolean`):

Drops jobs that are an expired listing re-posted under a new ID.

## `webhookUrl` (type: `string`):

POSTs the run summary and emitted jobs as JSON.

## `telegramBotToken` (type: `string`):

Bot token from @BotFather. Stored encrypted.

## `telegramChatId` (type: `string`):

The chat or channel the Telegram bot should post into.

## `discordWebhookUrl` (type: `string`):

Discord channel webhook. Stored encrypted.

## `slackWebhookUrl` (type: `string`):

Slack incoming webhook. Stored encrypted.

## `notifyOnlyChanges` (type: `boolean`):

Stay silent when a monitoring run finds nothing new.

## `notificationLimit` (type: `integer`):

How many individual jobs each notification message lists before it summarises the rest.

## `includeRunSummary` (type: `boolean`):

Attach the run statistics (new, updated, expired counts) to the webhook payload.

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

reed.co.uk serves this actor without a proxy, which is the default and the most reliable setting. Apify's shared datacenter proxy pool is rate-limited by reed.co.uk and will cost you blocked requests; if you do need a proxy for a very large harvest, pick RESIDENTIAL with country GB.

## Actor input object example

```json
{
  "keywords": "software developer",
  "additionalKeywords": [],
  "location": "London",
  "proximity": 10,
  "sector": "",
  "startUrls": [],
  "contractType": "",
  "hours": "",
  "remoteWorkingOption": "",
  "postedBy": "",
  "postedWithinDays": 0,
  "salaryFrom": 0,
  "salaryTo": 0,
  "graduate": false,
  "easyApplyOnly": false,
  "visaSponsorshipOnly": false,
  "hideTrainingJobs": false,
  "hideSurveyJobs": false,
  "maxResults": 100,
  "maxPages": 0,
  "includeDetails": false,
  "descriptionFormat": "text",
  "descriptionMaxLength": 0,
  "detailConcurrency": 5,
  "useProxyForDetails": false,
  "includeKeywords": [],
  "excludeKeywords": [],
  "remoteTypes": [],
  "minSalary": 0,
  "excludeTrainingJobs": false,
  "maxAgeMinutes": 0,
  "compact": false,
  "excludeEmptyFields": false,
  "incrementalMode": false,
  "stateKey": "",
  "emitUnchanged": false,
  "emitExpired": false,
  "skipReposts": false,
  "webhookUrl": "",
  "telegramChatId": "",
  "notifyOnlyChanges": true,
  "notificationLimit": 10,
  "includeRunSummary": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

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

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,trev0n/reed-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/S9AhtlenQN2SjjCMP/builds/wrJucBmzAVEQG7mgX/openapi.json
