Omni Remote Jobs Scraper avatar

Omni Remote Jobs Scraper

Pricing

from $0.21 / 1,000 result extracteds

Go to Apify Store
Omni Remote Jobs Scraper

Omni Remote Jobs Scraper

Scrape normalized remote job listings from public job boards with deduplication, filters, clean fields, and required source attribution.

Pricing

from $0.21 / 1,000 result extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Collect normalized remote job listings from public job-board APIs in one Apify Actor run.

What does Omni Remote Jobs Scraper do?

Omni Remote Jobs Scraper extracts job listings from public remote and EU job sources, normalizes the fields, removes duplicates, and saves clean rows to an Apify dataset.

It is built for workflows where you need a repeatable job feed instead of manually opening several job boards and merging CSV files.

Who is it for?

Recruiting and sourcing teams

  • Monitor fresh remote roles by keyword, region, and source in one repeatable run.
  • Build shortlists of companies currently hiring for specific skills.
  • Export normalized jobs to spreadsheets, CRMs, or recruiting dashboards.

Job-board and community operators

  • Seed public job boards with attributed listings from remote-friendly sources.
  • Track competing boards without manually reconciling duplicate postings.
  • Keep ingestion pipelines simple with one consistent dataset shape.

Market intelligence and HR analytics teams

  • Compare remote hiring patterns across role categories, locations, and employers.
  • Feed labor-market dashboards with clean title, company, salary, tag, and date fields.
  • Run scheduled snapshots for trend analysis or alerts.

Why use this actor?

Running several single-source scrapers creates duplicated rows, inconsistent field names, and missing source attribution.

This actor gives you one normalized dataset with source, title, company, location, job type, salary, tags, post date, job URL, and attribution.

Public sources included

The first version uses public HTTP JSON APIs only.

  • Arbeitnow public job board API.
  • Remotive public remote jobs API.

Remotive results include attribution text and the original Remotive URL so you can preserve the link-back when reusing listings.

Data fields

FieldDescription
sourceSource API name.
sourceJobIdSource-specific listing ID.
urlOriginal job listing URL.
titleJob title.
companyNameHiring company.
locationListing location.
isRemoteWhether the listing is remote.
candidateRequiredLocationCandidate location requirement when available.
jobTypeEmployment type.
categoryJob category.
tagsSkills, departments, or source tags.
salarySalary text when published.
descriptionTextClean text description.
descriptionHtmlOptional original HTML description.
postedAtISO posting date when available.
postedTimestampUnix posting timestamp when available.
scrapedAtActor scrape timestamp.
attributionSource attribution/link-back note.
dedupeKeyCross-source dedupe key.

How much does it cost to scrape remote jobs?

The actor uses pay-per-event pricing.

You pay a small run-start fee of $0.005 and then a tiered per-result fee for each normalized job saved.

The BRONZE per-result price is about $0.000357 per job, with lower rates on higher Apify subscription tiers.

A small test with 20 jobs is designed to stay inexpensive.

How to run it

  1. Open the actor on Apify.
  2. Choose sources: Arbeitnow, Remotive, or both.
  3. Set a maximum number of jobs.
  4. Add a keyword such as frontend, python, data analyst, or leave it empty.
  5. Optionally add location keywords such as Worldwide, Europe, or Germany.
  6. Run the actor.
  7. Export the dataset as JSON, CSV, Excel, XML, or via API.

Input options

Sources

Select one or both public job sources.

Maximum jobs

Controls how many deduplicated jobs are saved after filtering.

Keyword filter

Searches title, company, location, category, tags, salary, and description text.

Location keywords

Use this when you only need jobs for a specific region.

Remote jobs only

When enabled, non-remote Arbeitnow listings are skipped.

Include description HTML

Enable this when your downstream system needs rich text.

Disable it for smaller exports.

Example input

{
"sources": ["arbeitnow", "remotive"],
"maxItems": 25,
"query": "frontend",
"locations": ["Worldwide"],
"remoteOnly": true,
"includeDescriptionHtml": false
}

Example output

{
"source": "remotive",
"sourceJobId": "2090991",
"url": "https://remotive.com/remote-jobs/software-development/frontend-developer-2090991",
"title": "Frontend Developer",
"companyName": "Example Company",
"location": "Worldwide",
"isRemote": true,
"candidateRequiredLocation": "Worldwide",
"jobType": "full_time",
"category": "Software Development",
"tags": ["javascript", "react"],
"salary": "$20k - $35k",
"descriptionText": "This posting is for a Frontend Developer...",
"postedAt": "2026-06-16T06:59:30.000Z",
"postedTimestamp": 1781593170,
"scrapedAt": "2026-06-18T00:00:00.000Z",
"attribution": "Source: Remotive public API...",
"dedupeKey": "frontend-developer-example-company-worldwide"
}

Tips for best results

  • Start with 25 jobs to validate your filters.
  • Use broad keywords first, then narrow down.
  • Leave locations empty if you want all countries.
  • Keep descriptionHtml disabled unless you need formatting.
  • Preserve the url and attribution fields when republishing listings.

Integrations

Use the dataset in:

  • Recruiting dashboards.
  • Airtable or Google Sheets automations.
  • CRM enrichment workflows.
  • Labor-market monitoring reports.
  • Job-board ingestion pipelines.
  • Slack alerts for new roles.

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/omni-remote-jobs-scraper').call({
sources: ['arbeitnow', 'remotive'],
maxItems: 25,
query: 'frontend',
locations: ['Worldwide'],
remoteOnly: true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/omni-remote-jobs-scraper').call(run_input={
'sources': ['arbeitnow', 'remotive'],
'maxItems': 25,
'query': 'frontend',
'locations': ['Worldwide'],
'remoteOnly': True,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

API usage with cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~omni-remote-jobs-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"sources":["arbeitnow","remotive"],"maxItems":25,"query":"frontend","locations":["Worldwide"],"remoteOnly":true}'

MCP integration

Use this actor through Apify MCP from Claude Code, Claude Desktop, Cursor, or any MCP-compatible client.

MCP server URL:

https://mcp.apify.com/?tools=automation-lab/omni-remote-jobs-scraper

Claude Code setup:

$claude mcp add apify-omni-remote-jobs --transport http "https://mcp.apify.com/?tools=automation-lab/omni-remote-jobs-scraper"

Claude Desktop or JSON-based MCP client setup:

{
"mcpServers": {
"apify-omni-remote-jobs": {
"url": "https://mcp.apify.com/?tools=automation-lab/omni-remote-jobs-scraper"
}
}
}

Example prompts:

  • "Find 50 remote frontend jobs worldwide and summarize the top hiring companies."
  • "Scrape remote data analyst roles in Europe and export them as CSV."
  • "Run the Omni Remote Jobs Scraper for Python jobs and compare categories."

Deduplication

The actor creates a normalized dedupe key from title, company, and location.

If two sources contain the same role with matching normalized values, only the first saved row is kept.

Source attribution

Every row includes an attribution field.

For Remotive, keep the original job URL and attribution text when redistributing or displaying the listing.

Limitations

The actor only extracts public data available from the source APIs.

It does not apply to jobs, log in to job boards, bypass paywalls, or scrape private candidate data.

Some sources may publish delayed, incomplete, or removed listings.

Legality

This actor collects publicly available job listing data.

You are responsible for using the output in compliance with source terms, privacy rules, copyright rules, and applicable laws.

Do not use the data for spam, credential harvesting, or discriminatory hiring workflows.

FAQ

Does this scrape private candidate or applicant data?

No. It only reads public job listing APIs and returns listing-level data such as title, company, location, tags, salary text, URL, and source attribution.

Can I republish Remotive jobs?

Keep the original job URL and attribution field in your downstream workflow. Remotive asks API users to preserve attribution/link-back, so every Remotive row includes this context.

Troubleshooting

Why did I get fewer jobs than maxItems?

Filters are applied after fetching and deduplication. Try a broader keyword or remove location filters.

Why is salary empty?

Many job boards do not publish salary information for every role.

Why are some descriptions plain text?

The default output strips HTML to keep datasets compact. Enable includeDescriptionHtml for raw HTML.

Changelog

0.1

Initial HTTP-only version with Arbeitnow and Remotive sources, normalized output, filters, attribution, and deduplication.

Support

If a source changes its API or you need another public job board added, open an issue from the Apify actor page.