# Skywalker.gr Scraper — Greek Job Listings & Employers (`studio-amba/skywalker-gr-scraper`) Actor

Scrape job offers from Skywalker.gr, Greece's #2 job board. Search by keyword and extract job titles, companies, categories, position levels, work models, locations, full descriptions and dates. No login required.

- **URL**: https://apify.com/studio-amba/skywalker-gr-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 $20.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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Skywalker.gr Scraper — Greek Job Listings & Employers

Scrape job offers from [Skywalker.gr](https://www.skywalker.gr), Greece's #2 job board, straight into JSON, CSV or Excel. Search by keyword or browse every open position. No login, no cookies.

### What does Skywalker.gr Scraper do?

Skywalker.gr is a general job board covering every sector of the Greek labour market — sales, hospitality and tourism, automotive, technical trades, marketing, HR, retail and more. This actor collects those offers and returns clean, structured data:

- Job title, hiring company, logo and website
- Location — city/municipality and region across all of Greece
- Employment type (full-time, part-time, seasonal, internship, contract...) and work model (on-site, remote, hybrid)
- Occupational category and position/seniority level
- Full job description as HTML
- Published and expiry dates, and the canonical listing URL

Skywalker.gr does not publish salary ranges anywhere on the site — this actor never estimates or invents one, so there are no salary fields in the output.

### Why use Skywalker.gr Scraper?

- **Greek job market research** — track hiring demand across sectors and regions on Greece's #2 job board, alongside [Kariera.gr](https://apify.com/studio-amba/kariera-gr-scraper) for full-market coverage.
- **Recruitment and sourcing** — monitor which companies are hiring for which roles, at what position level, in which cities.
- **Lead generation** — companies actively hiring are companies actively spending. Company name, logo and website are included on every listing where published.
- **Job aggregation** — feed fresh Greek job postings into your own job board, newsletter or CRM.
- **Remote-work tracking** — every offer carries a work-model flag, so filtering for remote/hybrid Greek roles is a single client-side filter on the dataset.

### How to scrape Skywalker.gr data

1. Open the actor and set a **Search Query** keyword (e.g. `πωλήσεις`, `λογιστής`, `chef`) or leave it empty to browse the newest offers across every category.
2. Set **Max Results** and run. Results land in the dataset, ready to export as JSON, CSV, Excel or via API.
3. Leave every field empty and the actor still works: it browses the newest offers across every category and region in Greece.

That's it. A run of 20-50 offers with detail fetching enabled typically finishes in under a minute; larger runs take proportionally longer (see **Tips** below on why this actor can't parallelize).

### Input

| Field | Type | Description |
|-------|------|-------------|
| `searchQuery` | string | Free-text keyword matched against job titles and descriptions. Empty = browse newest offers. |
| `maxResults` | integer | Maximum offers to scrape. Default: `100` |
| `fetchDetails` | boolean | Fetch each offer's detail page for the full HTML description, company name, category, position level, work model and exact publish/expiry dates. Default: `true` |
| `proxyConfiguration` | object | Proxy settings. **Residential Greek proxy is required** — Skywalker.gr sits behind a Cloudflare managed challenge that only a Greek residential exit can pass. |

#### Example input

```json
{
    "searchQuery": "πωλήσεις",
    "maxResults": 100
}
```

### Output

Each dataset item is one job offer:

| Field | Type | Example |
|-------|------|---------|
| `jobId` | string | `01m0frrzx0s2mayermchdb1wv7` |
| `title` | string | `Luxury Retail Store Manager` |
| `company` | string | `SANDBLU` |
| `companyUrl` | string | `https://sandblu.com/` |
| `companyLogoUrl` | string | Logo URL |
| `city` | string | `Δήμος Θήρας` |
| `region` | string | `Περιφέρεια Νοτίου Αιγαίου` |
| `locations` | array | `["Νομός Κυκλάδων"]` |
| `employmentType` | string | `Εποχιακή εργασία` |
| `employmentTypeSchema` | string | `FULL_TIME`, `PART_TIME`, `SEASONAL` |
| `workModel` | string | `Με φυσική παρουσία` (on-site), `Εξ αποστάσεως` (remote) |
| `positionLevel` | string | `Supervisor` |
| `category` | string | `Πωλήσεις Λιανικής` |
| `descriptionHtml` | string | Full job description as HTML (with `fetchDetails`) |
| `publishedAt` | string | `2026-08-20` |
| `expiresAt` | string | `2026-09-19` |
| `url` | string | `https://www.skywalker.gr/el/aggelia-ergasias/01m0frrzx0s2mayermchdb1wv7/ypefthynos-i-katastimatos` |
| `scrapedAt` | string | ISO timestamp of the scrape |

#### Example output

```json
{
    "jobId": "01kzv0j1vqaxb1sh8h5nw3802c",
    "title": "Σύμβουλος Πωλήσεων - Automarin - Αθήνα",
    "company": "Automarin",
    "companyUrl": "http://www.automarin.gr",
    "companyLogoUrl": "https://www.skywalker.gr/storage/clients/01hdtme3dwycx3nf4syt2p7ycq/logos/2023/11/automarinLOGO23-65577ece7b0ef.jpg",
    "city": "Νότιος Τομέας Αθηνών",
    "region": "Περιφέρεια Αττικής",
    "locations": ["Νότιος Τομέας Αθηνών"],
    "employmentType": "Πλήρης απασχόληση",
    "employmentTypeSchema": "FULL_TIME",
    "workModel": "Με φυσική παρουσία",
    "positionLevel": "Staff",
    "category": "Πωλήσεις Χονδρικής",
    "publishedAt": "2026-08-12",
    "expiresAt": "2026-09-11",
    "url": "https://www.skywalker.gr/el/aggelia-ergasias/01kzv0j1vqaxb1sh8h5nw3802c/symvoulos-poliseon---automarine---athina",
    "scrapedAt": "2026-08-20T20:00:27.456Z"
}
```

### How much does it cost to scrape Skywalker.gr?

Pay-per-event pricing: a small fee per run start plus a fee per result. Skywalker.gr sits behind a Cloudflare managed challenge on every route, so this actor drives a real (headless) browser session rather than plain HTTP requests — that costs a little more compute than a pure-HTTP scraper, reflected in the per-result price. A typical 50-100 offer run with detail fetching enabled costs well under a dollar.

Usage cost only settles once a run reports **SUCCEEDED** — reading the dataset mid-run will undercount what you'll actually be charged.

### Tips

- Leave `searchQuery` empty to track every new posting on the site, newest first.
- This actor navigates one browser page **sequentially** — Skywalker.gr's Cloudflare challenge re-triggers a slow, hard re-check if it sees concurrent requests from the same session, so there's no parallel-fetch shortcut here. Expect roughly 1-2 seconds per item after a one-time warm-up; plan run size accordingly for very large scrapes.
- Set `fetchDetails` to `false` when you only need titles, URLs, work model and prefecture-level location: the run gets noticeably faster because it skips the per-offer detail page navigation. Company name, category, position level and the full description all require `fetchDetails: true`.
- `workModel` is a reliable, structured filter you can apply client-side on the dataset (on-site vs remote vs hybrid) — Skywalker.gr itself doesn't expose a clean way to filter this via the public search form.

### Limitations

- No salary data — Skywalker.gr doesn't publish it, on any listing, anywhere on the site.
- `region` and `city` granularity varies: `city` (from the site's own structured data) is sometimes a sub-region label (e.g. "Βόρειος Τομέας Αθηνών") rather than a literal city name — that's how Skywalker.gr itself models Athens-area listings.
- `companyUrl` is only present when the employer has published their own website on the listing (roughly 3 in 4 offers).
- Full description HTML, company name, category, position level and exact dates require `fetchDetails: true` (one extra page navigation per offer).

### FAQ and support

- **Is it legal?** This actor scrapes only publicly available job listings. It does not collect personal data and does not require login. Always review the target site's terms of service and applicable law before using scraped data commercially.
- **Found a bug?** Open an issue in the [Issues tab](https://console.apify.com/actors) — we reply within one business day.
- **Need a schema change?** Request it in the Issues tab; most field additions ship within a week.

### Support and maintenance

This Actor is actively maintained by [Studio Amba](https://apify.com/studio-amba). We monitor health daily and fix breaking changes within 24 hours.

### About Studio Amba

We build reliable, production-grade scrapers for European websites. Our actors share a common core:

- **No cookies, no login** — public data only, no account management headaches
- **Fast APIs and structured data over headless browsers** where possible — lower cost, higher throughput
- **Proactive health monitoring** — we watch every actor 24/7 and ship fixes before you notice

### Related Scrapers

- [Kariera.gr Scraper](https://apify.com/studio-amba/kariera-gr-scraper) — Greece's #1 job board, includes salary data
- [Randstad Scraper](https://apify.com/studio-amba/randstad-scraper) — pan-European staffing agency, includes Greece
- [Adecco Scraper](https://apify.com/studio-amba/adecco-scraper) — pan-European staffing agency, includes Greece
- [RocketJobs.pl Scraper](https://apify.com/studio-amba/rocketjobs-pl-scraper) — Polish non-tech job board
- [JobScout24 Switzerland Scraper](https://apify.com/studio-amba/jobscout24-ch-scraper) — Swiss general job board

### Changelog

See commit history in the [GitHub repo](https://github.com/studio-amba/actors) for a full changelog of bug fixes and schema changes.

# Actor input Schema

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

Free-text keyword to search job titles and descriptions (e.g. 'πωλήσεις', 'λογιστής', 'chef'). Leave empty to browse the newest offers across all of Skywalker.gr.

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

Maximum number of job offers to scrape.

## `fetchDetails` (type: `boolean`):

Fetch each offer's detail page for the full HTML job description, company name, category, position level, work model and exact publish/expiry dates. Disable for a faster, listing-only run (title, url and work model are always included either way, but most other fields are only populated with details enabled).

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

Proxy settings. Skywalker.gr sits behind a Cloudflare Turnstile managed challenge — residential Greek proxy is required (verified live: plain/automatic proxy and headless Chromium cannot pass the challenge; only a Greek residential exit auto-passes it).

## Actor input object example

```json
{
  "searchQuery": "πωλήσεις",
  "maxResults": 5,
  "fetchDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GR"
  }
}
```

# 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": "πωλήσεις",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "GR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/skywalker-gr-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": "πωλήσεις",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "GR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/skywalker-gr-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": "πωλήσεις",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GR"
  }
}' |
apify call studio-amba/skywalker-gr-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/skywalker-gr-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/1k1zixxG9vc9bgKUq/builds/JAxhUEaWidUFShFH9/openapi.json
