# Jobicy Remote Jobs Scraper (`parsebird/jobicy-remote-jobs-scraper`) Actor

Scrape remote job listings from Jobicy — titles, salaries, industries, job type, seniority, and full descriptions via the public jobs API.

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

## Pricing

from $2.49 / 1,000 job scrapeds

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/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

### Jobicy Remote Jobs Scraper

Extract remote job listings from [Jobicy](https://jobicy.com), a curated remote job board covering software engineering, design, marketing, data science, and more. The **Jobicy Remote Jobs Scraper** searches by keyword, filters by industry, job type, seniority, geography, and posting date, and returns clean, structured job data — titles, salaries, companies, and full descriptions — ready for job boards, monitoring pipelines, or analysis.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Combine keyword search with industry, job type, seniority, and geography filters, then set a "posted since" date to run it daily and only pull what's new.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Apify Actor: parsebird/jobicy-remote-jobs-scraper. Scrapes remote job listings from Jobicy (jobicy.com). Call via ApifyClient: client.actor("parsebird/jobicy-remote-jobs-scraper").call(run_input={"searchKeyword": "react", "industries": ["Software Engineering"], "jobTypes": ["Full-Time"], "jobLevel": "Senior", "geo": "Anywhere", "maxJobs": 50}). Returns per job: jobId, title, company, companyLogo, industries, jobTypes, jobLevel, geo, annualSalaryMin, annualSalaryMax, salaryCurrency, salaryPeriod, excerpt, description, url, postedAt, scrapedAt. Full API spec: https://apify.com/parsebird/jobicy-remote-jobs-scraper/api. Get your token: https://console.apify.com/settings/integrations.
```

### What does Jobicy Remote Jobs Scraper do?

This actor queries [Jobicy's public jobs API](https://jobicy.com/jobs) directly — no browser, no HTML parsing. You give it a search keyword and/or filters, and it returns matching remote jobs with salary, industry, job type, seniority, geography, and the full job description.

- 🔍 **Keyword search** — match against job titles and descriptions.
- 🏷️ **Industry filtering** — 22 categories from Software Engineering to Legal & Compliance.
- 🎚️ **Job type and seniority filters** — Full-Time, Part-Time, Contract, Internship; Senior, Mid, Junior, or Any.
- 🌍 **Geography filtering** — by country, region (e.g. `Europe`, `EMEA`), or `Anywhere` for worldwide-open roles.
- 📅 **Posted-since date filtering** — pass yesterday's date to build a daily monitoring pipeline that only surfaces new listings.
- 🧹 **Automatic deduplication** — when multiple industries are selected, results are merged and deduplicated by job ID.

### What job data can you extract from Jobicy?

| Field | Description |
|-------|-------------|
| `title` | Job title as posted |
| `description` | Full job description (HTML) |
| `excerpt` | Short summary (up to ~55 words) |
| `jobTypes` | Employment type(s) — `Full-Time`, `Part-Time`, `Contract`, `Internship` |
| `jobLevel` | Seniority as tagged by Jobicy — e.g. `Senior`, `Midweight`, `Entry-Level, Junior`, `Any` |
| `geo` | Geographic restriction, or `Anywhere` when open worldwide |
| `annualSalaryMin` / `annualSalaryMax` / `salaryCurrency` / `salaryPeriod` | Compensation range where disclosed |
| `company` / `companyLogo` | Hiring company details |
| `industries` | Jobicy's own category tags |
| `postedAt` | Original publish timestamp |
| `url` | Link to the job on Jobicy |

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchKeyword` | string | No | `""` | Free-text keyword matched against title and description (min 3 characters) |
| `industries` | string\[] | No | `[]` | Filter by industry — 22 Jobicy categories. Empty = all |
| `jobTypes` | string\[] | No | `[]` | `Full-Time`, `Part-Time`, `Contract`, `Internship`. Empty = all |
| `jobLevel` | string | No | `""` | `Senior`, `Mid`, `Junior`, `Any` (unspecified level). Empty = all |
| `geo` | string | No | `""` | Country, region, or `Anywhere` for worldwide-open roles. Empty = all |
| `postedSince` | string | No | `""` | ISO date (`YYYY-MM-DD`). Only returns jobs posted on or after it |
| `maxJobs` | integer | No | `100` | Max jobs to save (0–100). `0` = all matching jobs found |

### Output example

```json
{
  "jobId": "148927",
  "title": "Customer Success Manager III",
  "company": "Samsara",
  "companyLogo": "https://jobicy.com/data/server-nyc0409/galaxy/mercury/2025/06/dd26f5ca-221.jpg",
  "industries": ["Customer Support & Success"],
  "jobTypes": ["Full-Time"],
  "jobLevel": "Senior",
  "geo": "USA",
  "annualSalaryMin": 97878,
  "annualSalaryMax": 131600,
  "salaryCurrency": "USD",
  "salaryPeriod": "yearly",
  "excerpt": "Samsara (NYSE: IOT) is the pioneer of the Connected Operations Cloud...",
  "description": "<div><p><strong>Who we are</strong></p><p>Samsara...</p></div>",
  "url": "https://jobicy.com/jobs/148927-customer-success-manager-iii",
  "postedAt": "2026-08-08T05:20:11+00:00",
  "scrapedAt": "2026-08-09T01:05:30.000Z"
}
```

Download results as **JSON, CSV, Excel, HTML, or XML** directly from the Apify Console, or fetch them via the [Apify API](https://docs.apify.com/api/v2) / [dataset endpoint](https://apify.com/parsebird/jobicy-remote-jobs-scraper/api).

### Use cases

- **Remote job aggregation** — feed a job board, newsletter, or Slack/Discord bot with fresh Jobicy listings.
- **Daily monitoring** — set `postedSince` to your last run's date and schedule the actor to only pull what's new.
- **Salary benchmarking** — collect compensation data by industry, seniority, and geography.
- **Talent sourcing** — filter to specific industries and seniority levels to build a targeted candidate outreach list of hiring companies.
- **Market research** — track which industries and job types are growing in the remote hiring market.

### How to scrape Jobicy remote jobs

1. **Set a keyword** (optional) — e.g. `"react"` or `"designer"`. Leave empty to browse the latest jobs across all categories.
2. **Choose filters** — industries, job types, seniority, and geography.
3. **Set `postedSince`** (optional) — use your previous run's date to only fetch new listings.
4. **Set `maxJobs`** — up to 100 per run (Jobicy's API does not support pagination beyond its 100-most-recent limit).
5. **Run the actor** — click **Start** in the Apify Console, trigger it via the [API](https://docs.apify.com/api/v2), or on a [schedule](https://docs.apify.com/platform/schedules) for daily monitoring.
6. **Get your data** — download as JSON/CSV/Excel or pull it via the API.

### How much does it cost to scrape Jobicy job listings?

This actor uses [Pay-Per-Event (PPE)](https://docs.apify.com/platform/actors/publishing/monetize#pay-per-event-pricing) pricing — you're charged per job listing extracted, not per compute unit.

| Event | Price per event | Price per 1,000 |
|-------|----------------|-----------------|
| `job-scraped` (Free plan) | $0.00399 | **$3.99** |
| `job-scraped` (Bronze plan) | $0.00349 | **$3.49** |
| `job-scraped` (Silver plan) | $0.00299 | **$2.99** |
| `job-scraped` (Gold plan) | $0.00249 | **$2.49** |

A run collecting 100 jobs costs roughly $0.25–$0.40 depending on your Apify plan. All Apify accounts include a [free trial](https://apify.com/pricing) with credits to try the actor before committing to a paid plan.

### FAQ

**Why does filtering by industry sometimes return adjacent categories?**
Jobicy's own API filter for related categories (e.g. `Marketing & Sales`) also returns jobs from adjacent categories like Sales or Business Development. This actor applies a strict client-side filter on top, so your `industries` selection is matched exactly against each job's tagged category.

**Why does filtering by a country also return regional jobs?**
Filtering by `geo: "Germany"` also returns jobs open to a broader region that includes Germany (e.g. `EMEA` or `Anywhere`) — those jobs genuinely are available to candidates there. This is intentional and matches how Jobicy scopes geographic eligibility.

**Why are some `annualSalaryMin` / `annualSalaryMax` fields `null`?**
Not every Jobicy listing discloses a salary. When compensation isn't published, both fields are `null`. Check `salaryPeriod` when present — most disclosed salaries are `yearly`, but some listings post hourly or monthly rates.

**Can I get more than 100 jobs in one run?**
Jobicy's public API returns at most the 100 most recent jobs matching your filters and does not support pagination. Selecting multiple industries runs one search per industry and merges/deduplicates the results, which can net you more than 100 total.

**What are the limitations of this actor?**
⚠️

- Jobicy's API returns at most 100 results per search (no pagination) — see above for how multi-industry search works around this
- `jobTypes`, `jobLevel`, and `postedSince` are applied after fetching, since Jobicy's API doesn't support them as server-side filters — you may see fewer results than `maxJobs` requests if your filters are narrow
- Job listings on Jobicy are published with an intentional ~3-hour delay from when they're first collected
- Built-in retry on HTTP 429 / server error responses

### Is it legal to scrape Jobicy?

Yes. This actor only accesses publicly available job listings that Jobicy and its customers have made visible for the purpose of recruitment, using Jobicy's own [public jobs API](https://github.com/Jobicy/remote-jobs-api). It does not bypass login walls or collect personal data about individuals. Every job record includes the original Jobicy `url`, in line with Jobicy's API terms requiring clear credit and a direct link to the source. Scraping publicly available data is generally considered legal — see [Apify's overview of web scraping legality](https://www.apify.com/is-web-scraping-legal) for more detail. Users are responsible for ensuring their use of the collected data complies with applicable laws and [Jobicy's Terms of Service](https://jobicy.com/terms-conditions).

### Python and JavaScript usage

**Python** ([apify-client](https://docs.apify.com/api/client/python/)):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {
    "searchKeyword": "react",
    "industries": ["Software Engineering"],
    "jobTypes": ["Full-Time"],
    "jobLevel": "Senior",
    "geo": "Anywhere",
    "maxJobs": 50,
}

run = client.actor("parsebird/jobicy-remote-jobs-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["company"])
```

**JavaScript** ([apify-client](https://docs.apify.com/api/client/js/)):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const input = {
    searchKeyword: 'react',
    industries: ['Software Engineering'],
    jobTypes: ['Full-Time'],
    jobLevel: 'Senior',
    geo: 'Anywhere',
    maxJobs: 50,
};

const run = await client.actor('parsebird/jobicy-remote-jobs-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Related Actors

- [Himalayas Remote Jobs Scraper](https://apify.com/parsebird/himalayas-remote-jobs-scraper) — remote jobs from Himalayas
- [Hiring.cafe Jobs Scraper](https://apify.com/parsebird/hiring-cafe-scraper) — 2.8M+ aggregated postings across 46 ATS platforms
- [Workable Job Scraper](https://apify.com/parsebird/workable-job-scraper) — jobs from companies hiring on Workable
- [JustJoin.it Jobs Scraper](https://apify.com/parsebird/justjoin-jobs-scraper) — tech jobs from Poland's JustJoin.it
- [eFinancialCareers Jobs Scraper](https://apify.com/parsebird/efinancialcareers-jobs-scraper) — finance and banking jobs

Browse the full catalog on the [ParseBird Apify Store page](https://apify.com/parsebird).

# Actor input Schema

## `searchKeyword` (type: `string`):

Free-text keyword matched against the job title and description (e.g. "react", "designer"). Leave empty to skip keyword search.

## `industries` (type: `array`):

Filter by industry. Leave empty to include all industries.

## `jobTypes` (type: `array`):

Filter by employment type. Leave empty to include all types.

## `jobLevel` (type: `string`):

Filter by seniority. "Any" matches jobs Jobicy tags as open to any level. Leave on "All levels" to skip this filter.

## `geo` (type: `string`):

Filter by geography, e.g. "USA", "Europe", "Germany", or "Anywhere" for jobs open worldwide. Leave empty for all regions.

## `postedSince` (type: `string`):

Only return jobs posted on or after this date. Set to your previous run's date for daily monitoring.

## `maxJobs` (type: `integer`):

Maximum jobs to save. Jobicy's API returns at most the 100 most recent jobs matching your filters per run (no pagination). 0 = all matching jobs found.

## Actor input object example

```json
{
  "searchKeyword": "",
  "industries": [],
  "jobTypes": [],
  "jobLevel": "",
  "geo": "",
  "postedSince": "",
  "maxJobs": 20
}
```

# Actor output Schema

## `dataset` (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 = {
    "maxJobs": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/jobicy-remote-jobs-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 = { "maxJobs": 20 }

# Run the Actor and wait for it to finish
run = client.actor("parsebird/jobicy-remote-jobs-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 '{
  "maxJobs": 20
}' |
apify call parsebird/jobicy-remote-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/jobicy-remote-jobs-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/s8xYGpnaN12wOW4rs/builds/5Kg2yu4sXSSEyqhG8/openapi.json
