The NanoScrape Job Feed Scraper is an Apify actor that extracts structured web data from Job Feed. It returns 91 fields per result including title, company, location, salary, locations, priced at $0.5/1k unique job in aggregated feed, with no API key or monthly subscription required.
One deduplicated, newest-first job feed from 110+ job boards in 60+ countries, 40+ ATS career systems and any company career page. Deepest in Switzerland, Germany and Austria. Daily new-jobs-only runs, radius filter, agency flag, and MCP for AI agents.
| Field | Type | Example | Group | Fill % |
|---|---|---|---|---|
_type | string | null | (populated when data available) | Core | — |
job_id | string | null | 70901c999a55d44e | Core | 100% |
job_id_aliases | array | null | ["70901c999a55d44e"] | Core | 100% |
title | string | null | Laboratory Technician - Organic Synthesis | Core | 100% |
apply_url | string | null | https://www.nemensis.com/jobs/detail/22wmtS-laboratory-technician-organic-synthesis-mwd... | Core | 100% |
job_url_status | string | null | (populated when data available) | Core | — |
ats_url | string | null | (populated when data available) | Core | 68% |
career_page_url | string | null | (populated when data available) | Core | — |
apply_url_is_synthetic | boolean | null | (populated when data available) | Core | — |
hiring_jobs_url | string | null | (populated when data available) | Core | — |
company | object | string | null | {"name": "nemensis ag", "url": null, "domain": null, "is_agency": true, "agency_ | Company | 100% |
location | object | null | {"raw": "Basel, BS", "city": "Basel", "region": "BS", "country": "CH", "remote": | Location | 100% |
street_address | string | null | (populated when data available) | Location | — |
locations | array | null | (populated when data available) | Location | — |
description_text | string | null | Maintain precise and compliant documentation in the electronic lab notebook (eLN), foll... | Description | 36% |
description_html | string | null | (populated when data available) | Description | 18% |
description_md | string | null | Maintain precise and compliant documentation in the electronic lab notebook (eLN), foll... | Description | 36% |
salary | object | null | {"min": null, "max": null, "currency": null, "period": null, "source": null} | Salary | 100% |
employment_type | string | null | permanent | Employment | 86% |
working_hours | string | null | (populated when data available) | Employment | — |
hours_per_week | object | null | (populated when data available) | Employment | — |
requirements | array | null | ["Completed apprenticeship as a Laboratory Technician (Laborant"] | Requirements | 18% |
skills | array | null | (populated when data available) | Requirements | — |
experience_level | string | null | (populated when data available) | Requirements | — |
education_level | string | null | (populated when data available) | Requirements | — |
languages | array | null | (populated when data available) | Requirements | — |
relevance_score | number | null | 0 | Reviews / rating | 100% |
start_date | string | null | (populated when data available) | Reviews / rating | — |
starts_immediately | boolean | null | true | Reviews / rating | 9% |
posted_date | string | null | 2026-10-06T00:00:00.000Z | Metadata | 100% |
department | string | null | (populated when data available) | Metadata | 46% |
reference_number | string | null | (populated when data available) | Metadata | — |
end_date | string | null | 2027-10-01 | Metadata | 9% |
scraped_at | string | null | (populated when data available) | Metadata | — |
_platform | string | null | arbeit-swiss | Other | 100% |
dedup_key | string | null | laboratory technician organic synthesis|nemensis|basel | Other | 100% |
workload_pct | object | null | {"min": 100, "max": 100} | Other | 100% |
expires_at | string | null | 2026-11-06T00:00:00.000Z | Other | 9% |
first_seen | string | null | 2026-10-31T17:40:16.776Z | Other | 100% |
last_seen | string | null | 2026-10-31T17:40:16.776Z | Other | 100% |
lifecycle | object | null | (populated when data available) | Other | — |
content_hash | string | null | 3aaf86bb010ca62382bf95abea8e3ff3dc9d8af3b60e184ae868c46fdda7aa12 | Other | 100% |
language | string | null | de | Other | 100% |
contacts | array | null | [{"salutation": "Herr", "first_name": "Phillip", "last_name": "Rogers", "email": | Other | 9% |
job_status | string | open | Other | 100% |
industry | string | null | (populated when data available) | Other | — |
technologies | array | null | (populated when data available) | Other | — |
ats_system | string | null | (populated when data available) | Other | 68% |
ats_tenant | string | null | (populated when data available) | Other | — |
matched_query | string | null | Laborant | Other | 32% |
relevance_matched_tokens | array | null | (populated when data available) | Other | 9% |
sources | array | null | [{"platform": "arbeit-swiss", "url": "https://www.job-room.ch/job-search/82c342c | Other | 100% |
hiring_organization | string | null | (populated when data available) | Other | 4% |
application_deadline | string | null | (populated when data available) | Other | — |
is_easy_apply | boolean | null | (populated when data available) | Other | — |
updated_at | string | null | (populated when data available) | Other | 4% |
work_forms | array | null | [] | Other | — |
input_refs | array | null | (populated when data available) | Other | 68% |
platforms_requested | number | null | (populated when data available) | Other | — |
platforms_succeeded | number | null | (populated when data available) | Other | — |
platforms_failed | array | null | (populated when data available) | Other | — |
platforms_skipped_degraded | array | null | (populated when data available) | Other | — |
raw_results | number | null | (populated when data available) | Other | — |
unique_jobs | number | null | (populated when data available) | Other | — |
duplicates_merged | number | null | (populated when data available) | Other | — |
only_new | object | null | (populated when data available) | Other | — |
orchestrator_billed_events | number | null | (populated when data available) | Other | — |
total_cost_usd | number | null | (populated when data available) | Other | — |
per_platform | array | null | (populated when data available) | Other | — |
subactor_cost_total_usd | number | null | (populated when data available) | Other | — |
orchestrator_cost_usd | number | null | (populated when data available) | Other | — |
cost_per_unique_job_usd | number | null | (populated when data available) | Other | — |
overlap_matrix | array | null | (populated when data available) | Other | — |
redundancy_hint | string | null | (populated when data available) | Other | — |
ref | string | null | (populated when data available) | Other | — |
website | string | null | (populated when data available) | Other | — |
hiring_checked | boolean | null | (populated when data available) | Other | — |
hiring_status | string | null | (populated when data available) | Other | — |
hiring_open_roles_count | number | null | (populated when data available) | Other | — |
hiring_open_roles_count_is_capped | boolean | null | (populated when data available) | Other | — |
hiring_roles | array | null | (populated when data available) | Other | — |
hiring_roles_detail | array | null | (populated when data available) | Other | — |
hiring_evidence | string | null | (populated when data available) | Other | — |
hiring_sources | array | null | (populated when data available) | Other | — |
hiring_checked_at | string | null | (populated when data available) | Other | — |
not_read_reason | string | null | (populated when data available) | Other | — |
jobs_on_site | number | null | (populated when data available) | Other | — |
jobs_matching | number | null | (populated when data available) | Other | — |
reason | string | null | (populated when data available) | Other | — |
note | string | null | (populated when data available) | Other | — |
filters | object | null | (populated when data available) | Other | — |
{
"countries": [
"DE",
"AT",
"CH",
"UK"
],
"keywords": [
"Software Engineer"
],
"location": "Zürich",
"includeJobDetails": true,
"includeContactData": true,
"includeCompanyDetails": true,
"includeCompaniesWithoutJobs": true,
"includeReportRowsInDataset": true
}{
"job_id": "70901c999a55d44e",
"job_id_aliases": [
"70901c999a55d44e"
],
"title": "Laboratory Technician - Organic Synthesis",
"company": {
"name": "nemensis ag",
"url": null,
"domain": null,
"is_agency": true,
"agency_type": "staffing",
"agency_confidence": "high",
"is_agency_signal": true
},
"location": {
"raw": "Basel, BS",
"city": "Basel",
"region": "BS",
"country": "CH",
"remote": "",
"postal_code": "4056"
},
"employment_type": "permanent",
"workload_pct": {
"min": 100,
"max": 100
},
"salary": {
"min": null,
"max": null,
"currency": null,
"period": null,
"source": null
},
"posted_date": "2026-10-06T00:00:00.000Z",
"first_seen": "2026-10-31T17:40:16.776Z",
"last_seen": "2026-10-31T17:40:16.776Z",
"content_hash": "3aaf86bb010ca62382bf95abea8e3ff3dc9d8af3b60e184ae868c46fdda7aa12",
"language": "de",
"description_text": "Maintain precise and compliant documentation in the electronic lab notebook (eLN), following Good Documentation Practice Flag safety observations and operational risks proactively, and support a strong HSE and GxP compliance culture Your Profile Completed apprenticeship as a Laboratory Technician (Laborant",
"description_md": "Maintain precise and compliant documentation in the electronic lab notebook (eLN), following Good Documentation Practice\nFlag safety observations and operational risks proactively, and support a strong HSE and GxP compliance culture\n\nYour Profile\n\n Completed apprenticeship as a Laboratory Technician (<em>Laborant</em>",
"apply_url": "https://www.nemensis.com/jobs/detail/22wmtS-laboratory-technician-organic-synthesis-mwd_4051-basel",
"contacts": [
{
"salutation": "Herr",
"first_name": "Phillip",
"last_name": "Rogers",
"email": "[email protected]",
"phone": "+41612059867",
"source_platform": "arbeit-swiss"
}
],
"matched_query": "Laborant",
"relevance_score": 0,
"sources": [
{
"platform": "arbeit-swiss",
"url": "https://www.job-room.ch/job-search/82c342c9-0bcf-4ecc-a34d-fe5990b1e0e3",
"source_id": "82c342c9-0bcf-4ecc-a34d-fe5990b1e0e3",
"first_seen": "2026-10-31T17:40:16.776Z",
"company_name": "nemensis ag"
}
],
"dedup_key": "laboratory technician organic synthesis|nemensis|basel",
"_platform": "arbeit-swiss",
"expires_at": "2026-11-06T00:00:00.000Z",
"job_status": "open",
"requirements": [
"Completed apprenticeship as a Laboratory Technician (<em>Laborant</em>"
],
"end_date": "2027-10-01",
"starts_immediately": true,
"work_forms": []
}Priced at $0.0005 per unique job in aggregated feed. 10 unique job in aggregated feeds ≈ $0.01, 100 ≈ $0.05, 1,000 ≈ $0.50. The first runs land inside Apify's $5/mo free-tier credit — pay only for what you extract, no monthly subscription.
enableHiringSignals in the Google Maps Scraper and it sends each place that has a website to Job Feed, then adds hiring_* fields to every place.hiring_status (hiring, no_open_roles, not_read or no_website), hiring_open_roles_count, up to 5 sample role titles in hiring_roles, and the careers page in hiring_jobs_url. not_read means the site could not be checked, not "not hiring".hiringSignalsMaxPlaces (default 50, up to 500) caps how many places are checked per run. Career sites that only work in a browser are skipped unless hiringBrowserFallback is on. Already have a list of company websites? Run Job Feed directly instead.Click Open on Apify above to run job-feed in your browser - no code, no install. In the Apify console you get:
To run this actor from your own code you need an Apify API token. Get one in about a minute:
Free tier: Apify credits your account with $5 of platform usage every month, no credit card required. Enough to test any actor meaningfully. How many results that covers depends on the actor's price per result.
Run this actor from any language via the Apify REST API. Replace YOUR_TOKEN with your API token and adapt the input JSON to your needs.
curl -X POST "https://api.apify.com/v2/acts/santamaria-automations~job-feed/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'// npm install apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('santamaria-automations/job-feed').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('santamaria-automations/job-feed').call(run_input={})
items = list(client.dataset(run['defaultDatasetId']).iterate_items())
print(items)// dotnet add package Apify.Client
using Apify.Client;
var client = new ApifyClient("YOUR_TOKEN");
var run = await client.Actor("santamaria-automations/job-feed").CallAsync(new { });
var items = await client.Dataset(run.DefaultDatasetId).ListItemsAsync();// Maven: com.apify:apify-client
import com.apify.client.ApifyClient;
ApifyClient client = new ApifyClient("YOUR_TOKEN");
ActorRun run = client.actor("santamaria-automations/job-feed").call(Map.of());
List<Map<String,Object>> items = client.dataset(run.getDefaultDatasetId()).listItems();This actor is available on the Apify MCP server, so you can drive it from any MCP-compatible AI client - Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or a custom agent - without writing any code.
https://mcp.apify.com?tools=santamaria-automations/job-feedExample prompt once connected:
"Use <code>job-feed</code> to run a scrape on my target list and give me the results as a table."
Clients that support dynamic tool discovery (Claude.ai, VS Code) receive the full input schema automatically via add-actor.
Trigger this actor from your favorite automation tool. Every platform below can call the Apify API in a few clicks - no code required.
@apify/n8n-nodes-apify).santamaria-automations/job-feed.https://api.apify.com/v2/acts/santamaria-automations~job-feed/run-sync-get-dataset-items?token=YOUR_TOKEN.application/json.https://api.apify.com/v2/acts/santamaria-automations~job-feed/run-sync-get-dataset-items?token=YOUR_TOKEN, method POST, body raw JSON.https://api.apify.com/v2/acts/santamaria-automations~job-feed/run-sync-get-dataset-items?token=YOUR_TOKEN.steps.http.$return_value in subsequent steps.https://api.apify.com/v2/acts/santamaria-automations~job-feed/run-sync-get-dataset-items?token=YOUR_TOKEN, body type JSON.$0.50 / 1,000 unique job in aggregated feed, billed per result on Apify. Apify's $5/month free tier covers the first runs. No monthly subscription — you only pay for what you extract.
91 fields per result. Full field catalog is listed in the 'What you can scrape' table above — includes core identifiers, descriptive text, dates, and any category-specific data.
Scraping publicly available data is generally permitted in most jurisdictions, but GDPR applies to any personal data you collect. Review your local rules and consult a lawyer for commercial use.
Every run pulls live data at execution time. Set up a schedule (daily/hourly/weekly cron) in the Apify console to keep your dataset current automatically.