# Remote Jobs from 59,000+ Company Career Sites (Europe-friendly) (`lacuna-ai/remote-jobs-europe-ats`) Actor

Remote jobs from 59,000+ companies with no company list needed. Reads 26 ATS live (Greenhouse, Lever, Ashby, Workday, Teamtailor, Personio, Recruitee, JOIN...) and tags where you can actually work from: Europe, UK, US, worldwide.

- **URL**: https://apify.com/lacuna-ai/remote-jobs-europe-ats.md
- **Developed by:** [Dan C.](https://apify.com/lacuna-ai) (community)
- **Categories:** Jobs, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Remote Jobs from 59,000+ Company Career Sites

Find remote jobs **without bringing a list of companies**. This Actor already knows **59,000+ companies** and the
applicant tracking system (ATS) each one hires through. Type a job title and where you can work from, and it
reads every matching company's career site live.

### Why this one

**1. The companies are built in.** Most ATS scrapers only fetch the boards you give them, so you have to know
which companies to look at first. Here the list ships with the Actor and grows every week. You can still add
your own career-page URLs on top.

**2. It tells you where you can actually work from.** "Remote" often means "remote, US only". Every job gets an
`eligibleRegions` tag (`europe`, `uk`, `us`, `canada`, `worldwide`, `latam`, `apac`, ...) based on its location,
title and description. Set **I can work from** and jobs you can't take are dropped before you pay for them.

**3. It covers the European ATS that US-focused scrapers skip.** Teamtailor, Personio, Recruitee, JOIN,
Pinpoint, Homerun, Factorial, Softgarden and Zoho Recruit sit next to Greenhouse, Lever, Ashby and Workday. That's
where a large share of European startup and SMB jobs are posted.

**4. Live, not a database.** Every run reads each company's board as it is right now, so closed jobs don't show up
and new ones appear the same day they're posted.

### Quick start

1. Enter one or more **job title keywords**, e.g. `product manager`, `backend engineer`.
2. Pick **I can work from**, e.g. *Europe*.
3. Run. With the defaults you get up to 100 matching remote jobs from the last 30 days in a few minutes.

For a daily job alert, schedule the Actor with **Only new jobs** turned on: each run returns, and charges for,
only jobs it hasn't returned before.

### Output

| Field | Example |
|---|---|
| title | Senior Backend Engineer |
| company | Acme GmbH |
| location | Remote, Germany |
| remoteType | remote / hybrid / on-site |
| eligibleRegions | `["europe"]`, `["uk", "europe"]`, `["worldwide"]` |
| postedAt | 2026-10-28 |
| salary | when the company publishes it |
| department | Engineering |
| url | the job on the company's own ATS |
| ats, atsCompanyId | `teamtailor`, `acme` |
| descriptionText, descriptionHtml | full job description (optional) |

### Input

| Option | What it does |
|---|---|
| Job title keywords | Keep jobs whose title contains any of these. Required unless you pick platforms. |
| Exclude title keywords | Drop titles containing these, e.g. `intern`, `sales`. |
| I can work from | Europe, UK, US, Canada, worldwide only, or Any (tag only, no filtering). |
| Remote only | Drop hybrid and on-site jobs (on by default). |
| Posted within (days) | 1 to 90, default 30. |
| ATS platforms | Scan only some platforms, e.g. `teamtailor`, `personio`. |
| Extra companies | Career-page URLs on a supported ATS, e.g. `https://jobs.lever.co/acme`. |
| Only new jobs | Skip jobs this monitor returned in earlier runs. |
| Max jobs | Stop after this many jobs (default 100). |

### Supported ATS (26)

Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Rippling, Gem, Teamtailor, Personio, Recruitee, JOIN,
Pinpoint, Homerun, Factorial, Softgarden, Zoho Recruit, BambooHR, Breezy HR, JazzHR, Dover, HiBob, Polymer,
Manatal, Freshteam, Comeet, CareerPuck.

### Pricing

**$3 per 1,000 jobs returned**, plus $0.01 per run. Region and title filters run before billing, so jobs you
can't apply to are never charged.

### Speed

- A keyword search over a few platforms (e.g. the European ones) takes a few minutes.
- Max jobs stops the run as soon as it's reached, and platforms are interleaved, so even a small cap gives you a mix.
- A scan of the full list for a common title takes around 45 minutes.

### Notes

- About 7% of jobs say only "Remote" with no region anywhere. They get an empty `eligibleRegions` and are left
  out when you filter by region. Set **I can work from** to *Any* to keep them.
- Missing an ATS or a company? Open an issue and it will be considered for the next update.

# Actor input Schema

## `keywords` (type: `array`):

Keep jobs whose title contains any of these (case-insensitive), e.g. "product manager", "backend engineer". Leave empty for every job.

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

Drop jobs whose title contains any of these, e.g. "intern", "sales".

## `eligibleFrom` (type: `string`):

Keep only remote jobs open to people in this region. 'Any' keeps every remote job and only tags eligibility.

## `remoteOnly` (type: `boolean`):

Keep only fully remote jobs (hybrid and on-site dropped).

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

Only jobs first published in the last N days.

## `platforms` (type: `array`):

Limit to these ATS ids (e.g. teamtailor, personio, greenhouse). Leave empty for all.

## `useBuiltInCompanyList` (type: `boolean`):

Scan every company in our curated list for the chosen platforms. Turn off to scan only the companies you give below.

## `companies` (type: `array`):

Career-page URLs on a supported ATS, e.g. https://jobs.lever.co/acme or https://acme.teamtailor.com. The ATS is detected from the URL.

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

Add the job description as text and HTML. Turn off for smaller, faster results.

## `onlyNew` (type: `boolean`):

For scheduled runs: skip (and don't charge for) jobs this monitor already returned. Uses the monitor name below.

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

Any name; runs with the same name share their seen-jobs memory.

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

Stop after this many jobs (controls cost and run time). Raise it for bigger exports.

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

How many companies to fetch at the same time.

## Actor input object example

```json
{
  "keywords": [
    "engineer",
    "product manager"
  ],
  "eligibleFrom": "any",
  "remoteOnly": true,
  "postedWithinDays": 30,
  "useBuiltInCompanyList": true,
  "includeDescription": true,
  "onlyNew": false,
  "monitorName": "default",
  "maxItems": 100,
  "maxConcurrency": 16
}
```

# Actor output Schema

## `jobs` (type: `string`):

Matching jobs as a table: title, company, location, remote type, where you can work from, posting date, salary and link.

## `jobsFull` (type: `string`):

Every field for each job, including department, ATS company id and the full description (text and HTML).

# 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": [
        "engineer",
        "product manager"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("lacuna-ai/remote-jobs-europe-ats").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": [
        "engineer",
        "product manager",
    ],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("lacuna-ai/remote-jobs-europe-ats").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": [
    "engineer",
    "product manager"
  ],
  "maxItems": 100
}' |
apify call lacuna-ai/remote-jobs-europe-ats --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lacuna-ai/remote-jobs-europe-ats"
        }
    }
}
```

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/1R7wVn3FmwMNGEzBF/builds/qygYwiOkbhXDJCXjW/openapi.json
