# Highland TSI Vacancies Scraper: Charity & Third Sector Jobs (`getascraper/highlandtsi-vacancies-scraper`) Actor

Extract every live charity and third sector vacancy from Highland TSI (highlandtsi.org.uk) in the Scottish Highlands. Get title, organisation, location, salary, hours, deadline, contact email and description as JSON, CSV or Excel. Filter by keyword. Schedule it for new postings only. Pay per result.

- **URL**: https://apify.com/getascraper/highlandtsi-vacancies-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.31 / 1,000 vacancies

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

## 🏔️ Highland TSI Vacancies Scraper: Charity & Third Sector Jobs

<table width="100%" style="display:table;width:100%;border-collapse:collapse">
<tr>
<td style="padding:24px 28px;background:#ECFDF5;border:1px solid #A7F3D0;border-top:4px solid #047857;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Never miss a Highland charity job again</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Every current opening from Highland TSI, delivered as clean data the moment it's posted, without checking the site yourself.</span>
</td>
</tr>
</table>

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed">
<tr>
<td width="25%" style="width:25%;padding:14px 12px;background:#FFFFFF;border:1px solid #A7F3D0;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#047857">🏔️ Reads the real source</span><br>
<span style="font-size:12px;color:#57534E">Pulls directly from Highland TSI's own live listings, not a stale copy.</span>
</td>
<td width="25%" style="width:25%;padding:14px 12px;background:#ECFDF5;border:1px solid #A7F3D0;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#047857">📋 Full job details</span><br>
<span style="font-size:12px;color:#57534E">Title, organisation, salary, hours, deadline, contact email and how to apply.</span>
</td>
<td width="25%" style="width:25%;padding:14px 12px;background:#FFFFFF;border:1px solid #A7F3D0;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#047857">🔔 Never re-check by hand</span><br>
<span style="font-size:12px;color:#57534E">Watchlist mode flags only vacancies new since your last run.</span>
</td>
<td width="25%" style="width:25%;padding:14px 12px;background:#ECFDF5;border:1px solid #A7F3D0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#047857">🔍 Filter what you see</span><br>
<span style="font-size:12px;color:#57534E">Narrow results by keyword, location or working pattern.</span>
</td>
</tr>
</table>

Highland TSI Vacancies Scraper pulls live charity and third sector job vacancies from [highlandtsi.org.uk](https://highlandtsi.org.uk), the vacancy board run by Highland Third Sector Interface in the Scottish Highlands. Export to JSON, CSV or Excel, or connect it to Google Sheets and your own pipeline via the API. Run it on demand or on a schedule. No login, no coding required.

### ✨ Why use this Actor

**A focused source for anyone who cares about third sector jobs in the Highlands.**

- 🙋 **Job seekers**: want to work in the Highlands charity sector. A good role can disappear within days of being posted, and this catches it the moment it's live.
- 🤝 **Recruitment consultants and agencies**: place candidates across the Scottish third sector and track several regional boards at once, without checking each one by hand.
- 📢 **Charity sector HR and comms staff**: want a simple way to see what similar Highland organisations are hiring for, without visiting their site directly.

**This is a small, focused source, not a big job board.** Highland TSI lists whatever's currently open across one regional charity network, so expect a handful of live vacancies at any time rather than hundreds. That's exactly why watchlist mode matters here: with so few openings, catching a new one the day it's posted is the real advantage over checking back occasionally.

### ⚙️ How it works

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed">
<tr>
<td style="padding:16px 14px;width:33%;background:#ECFDF5;border:1px solid #A7F3D0;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#047857;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set your filters (optional)</span><br>
<span style="font-size:12px;color:#57534E">Add a keyword or location, or leave blank to see every current opening.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#ECFDF5;border:1px solid #A7F3D0;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#047857;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run the Actor</span><br>
<span style="font-size:12px;color:#57534E">It reads the live site and returns matching vacancies.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#ECFDF5;border:1px solid #A7F3D0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#047857;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get your results</span><br>
<span style="font-size:12px;color:#57534E">Export the list, or turn on watchlist mode for new postings only.</span>
</td>
</tr>
</table>

Start with no filters to see everything currently live, then narrow down once you know what you're looking for.

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `keyword` | string | No | Filter vacancies by a word or phrase in the job title, organisation name, or description. |
| `location` | string | No | Filter by location, e.g. "Inverness" or "Hybrid". |
| `workingPattern` | string | No | Filter by working pattern, e.g. "Full Time" or "Part Time". |
| `monitorMode` | boolean | No | Remember vacancies already seen and report only new ones on later scheduled runs. |
| `maxItems` | integer | No | Stop after returning this many vacancies in this run. |
| `proxyConfiguration` | object | No | Proxy settings. Datacenter by default. |

### 📤 Output

Every result is one vacancy:

```json
{
  "vacancyId": "447fc9ae-65ba-44f1-a41e-fcc04d6d21fb",
  "title": "Operations & Events Manager",
  "organisation": "Torridon District Community Association",
  "location": "Torridon",
  "salary": "FTE £30,810; Pro Rata £23,115",
  "hours": "28",
  "workingPattern": "Part Time",
  "roleLength": "Fixed Term",
  "deadlineToApply": "25/09/2026",
  "jobDescriptionHtml": "<p>Do you want to make a difference to the communities...</p>",
  "contactEmail": "chair@lochtorridoncentre.co.uk",
  "websiteLink": "https://www.lochtorridoncentre.co.uk/",
  "publishedAt": "2026-09-01T07:24:37.253Z",
  "scrapedAt": "2026-09-05T05:02:14.501Z"
}
```

Download the dataset in JSON, CSV, Excel, HTML or XML from the Apify Console, or pull it through the API.

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `vacancyId` | string | The site's own stable identifier for the vacancy. |
| `title` / `organisation` | string | The job title and the charity or organisation hiring. |
| `location` | string | Where the role is based, as published. |
| `salary` / `hours` / `workingPattern` / `roleLength` | string | Pay, hours, and contract details, exactly as the organisation stated them. |
| `deadlineToApply` | string | The application deadline, or "ongoing" where the organisation doesn't set one. |
| `jobDescriptionHtml` | string | The full job description, with its original formatting. |
| `contactEmail` / `howToApply` / `websiteLink` | string | How to actually apply for the role, where published. |
| `publishedAt` | string | When the vacancy was posted. |

The Output tab also ships two pre-built views: a listings overview, and a full-details view.

### 💰 Pricing

This Actor is pay per result: you only pay for the vacancies you actually collect, and a run that returns nothing costs nothing. There is no subscription and no stacked billing events.

### ⭐ Enjoying Highland TSI Vacancies Scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#ECFDF5;border:1px solid #A7F3D0;border-left:5px solid #047857;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Found a role you'd have missed otherwise?</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other Highland job seekers and recruiters find it.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#047857;border:1px solid #A7F3D0;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/highlandtsi-vacancies-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 🛠️ Tips for better runs

- Leave every filter blank on your first run to confirm what's currently live before narrowing down.
- Turn on `monitorMode` and schedule the Actor daily so a new posting reaches you the same day, not days later.
- Since this is a small, focused source, don't expect a large number of results at any time. That's the nature of the target, not a limitation of the Actor.
- Keyword matches the job title, organisation, and description, so a broad term will usually catch more than an exact job title would.

### ❓ FAQ

**Is it legal to extract vacancy data from highlandtsi.org.uk?**
Yes. This Actor only reads public job vacancy listings that Highland TSI already publishes for job seekers to find.

**Why did I only get one or two results?**
Highland TSI is a small regional charity network, so it typically has only a handful of open vacancies at any time. An empty or short result is often accurate, not a bug.

**Can I get notified when a new vacancy is posted?**
Yes. Turn on watchlist mode and schedule the Actor to run periodically. You'll see only vacancies new since the last check.

**Do the filters need an exact match?**
No. Keyword, location and working pattern all match as a substring, so "Full Time" also matches "Full Time " with extra spacing, exactly as the site publishes it.

Found a bug or need a custom version of this Actor? Open an issue from the Actor's Issues tab and it'll be looked at directly.

### 🔗 Other actors

- [EU TED Tender Monitor: Notices and Awards](https://apify.com/getascraper/eu-ted-tender-monitor) ↗ - European Union public procurement notices and contract awards.
- [Impressum Scraper: Legal Notice Data for DACH and EU Sites](https://apify.com/getascraper/impressum-scraper) ↗ - company legal notice and contact data for DACH and EU sites.
- [US Short Interest Scraper: NYSE, Nasdaq and OTC via FINRA Data](https://apify.com/getascraper/short-interest-scraper) ↗ - official short interest data with the same monitor-mode pattern.

# Actor input Schema

## `keyword` (type: `string`):

Filter vacancies by a word or phrase in the job title, organisation name, or description. Leave blank to see every current opening.

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

Filter vacancies by location, e.g. "Inverness" or "Hybrid". Leave blank for any location.

## `workingPattern` (type: `string`):

Filter by working pattern, e.g. "Full Time" or "Part Time". Leave blank for any.

## `monitorMode` (type: `boolean`):

Remember vacancies already seen and report only new ones on later scheduled runs. Turn this on to get notified the moment a new vacancy is posted.

## `maxItems` (type: `integer`):

Stop after returning this many vacancies in this run.

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

Datacenter proxy is enough for this site and is the default.

## Actor input object example

```json
{
  "keyword": "",
  "location": "",
  "workingPattern": "",
  "monitorMode": false,
  "maxItems": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `vacancies` (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 = {
    "keyword": "",
    "location": "",
    "workingPattern": "",
    "monitorMode": false,
    "maxItems": 15,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/highlandtsi-vacancies-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 = {
    "keyword": "",
    "location": "",
    "workingPattern": "",
    "monitorMode": False,
    "maxItems": 15,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/highlandtsi-vacancies-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 '{
  "keyword": "",
  "location": "",
  "workingPattern": "",
  "monitorMode": false,
  "maxItems": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/highlandtsi-vacancies-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/highlandtsi-vacancies-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/mcfLnsu6aAEA1CXjF/builds/6y0oQxYR6oj51zFc4/openapi.json
