The NanoScrape Website Job Extractor Scraper is an Apify actor that extracts enrichment data from Website Job Extractor. It returns 91 fields per result including title, location, city, description, company_name, priced at $12/1k job (managed llm), with no API key or monthly subscription required.
Website Job Extractor (Career Pages, Global): AI-powered extraction from any company career page. Auto-detects ATS, handles pagination, and validates output.
| Field | Type | Example | Group | Fill % |
|---|---|---|---|---|
company_id | string | input-2 | Core | 100% |
company_name | string | Breeze Dental | Core | 100% |
company_name_detected | string | null | Breeze Dental | Core | 68% |
company_name_source | string | null | json_ld_organization | Core | 68% |
title | string | null | Dental Hygienist | Core | 28% |
full_text_url | string | null | (populated when data available) | Core | — |
contact_name | string | null | (populated when data available) | Core | — |
apply_url | string | null | (populated when data available) | Core | — |
source_url | string | https://www.breezeoralcare.com/careers/ | Core | 60% |
job_url | string | null | https://jobs.wizehire.com/job/registered-dental-hygienist-in-austin-tx-us-1e7a9fd377118... | Core | 28% |
job_url_is_synthetic | boolean | false | Core | 28% |
job_id | string | null | registered-dental-hygienist-in-austin-tx-us-1e7a9fd37711872f | Core | 28% |
application_url | string | null | https://www.breezeoralcare.com/careers/ | Core | 28% |
ats_url | string | null | (populated when data available) | Core | — |
ats_urls | array | null | (populated when data available) | Core | — |
career_page_url | string | null | https://www.breezeoralcare.com/?utm_campaign=gmb | Core | 28% |
_type | string | null | (populated when data available) | Core | 72% |
ats_employer | string | null | (populated when data available) | Company | — |
postal_code | string | null | (populated when data available) | Location | — |
street_address | string | null | (populated when data available) | Location | — |
location | string | null | Austin, TX | Location | 28% |
city | string | null | (populated when data available) | Location | — |
region | string | null | (populated when data available) | Location | — |
country | string | null | (populated when data available) | Location | — |
dropped_off_country | integer | null | (populated when data available) | Location | 36% |
description | string | null | Join Breeze Oral Care as a Dental Hygienist in Austin, TX, working with innovative Airf... | Description | 28% |
description_md | string | null | (populated when data available) | Description | — |
salary_text | string | null | (populated when data available) | Salary | — |
salary_min | number | null | (populated when data available) | Salary | — |
salary_max | number | null | (populated when data available) | Salary | — |
salary_currency | string | null | (populated when data available) | Salary | — |
salary_period | string | null | (populated when data available) | Salary | — |
salary_source | string | null | (populated when data available) | Salary | — |
salary_range | string | null | (populated when data available) | Salary | — |
remote_option | string | null | (populated when data available) | Employment | — |
working_hours | string | null | (populated when data available) | Employment | — |
employment_type | string | null | Full-time | Employment | 28% |
remote | boolean | null | (populated when data available) | Employment | — |
languages | array | null | (populated when data available) | Requirements | — |
skills | array | null | (populated when data available) | Requirements | — |
experience_level | string | null | (populated when data available) | Requirements | — |
requirements | array | null | (populated when data available) | Requirements | 12% |
benefits | array | null | ["Innovative Work Environment", "Professional Growth", "Comprehensive Benefits"] | Requirements | 24% |
reference_number | string | null | (populated when data available) | Metadata | — |
department | string | null | (populated when data available) | Metadata | — |
posted_at | string | null | (populated when data available) | Metadata | — |
posting_format | string | null | (populated when data available) | Other | — |
expires_at | string | null | (populated when data available) | Other | — |
application_deadline | string | null | (populated when data available) | Other | — |
workload_min | number | null | (populated when data available) | Other | — |
workload_max | number | null | (populated when data available) | Other | — |
contact_email | string | null | (populated when data available) | Other | — |
contact_phone | string | null | (populated when data available) | Other | — |
hiring_organization | string | null | (populated when data available) | Other | — |
is_easy_apply | boolean | null | (populated when data available) | Other | — |
workplace_type | string | null | onsite | Other | 16% |
extracted_at | string | 2026-10-27T10:57:57.268Z | Other | 100% |
confidence | number | null | 0.6000000000000001 | Other | 28% |
relevance | string | null | (populated when data available) | Other | — |
ats_system | string | null | (populated when data available) | Other | — |
ats_supported_by_csj | boolean | false | Other | 100% |
application_ats | string | null | (populated when data available) | Other | — |
manifest_version | string | (populated when data available) | Other | 72% |
ats_handover_supported | boolean | null | (populated when data available) | Other | — |
js_rendering_suspected | boolean | null | (populated when data available) | Other | 32% |
js_indicators | array | null | (populated when data available) | Other | 32% |
job_count | integer | null | (populated when data available) | Other | 40% |
truncated_at_cap | boolean | null | (populated when data available) | Other | 40% |
reason | string | null | (populated when data available) | Other | 40% |
reason_message | string | null | (populated when data available) | Other | 36% |
jobs_status | string | null | (populated when data available) | Other | 40% |
llm_calls_failed | integer | null | (populated when data available) | Other | 40% |
ats_tenant | string | null | (populated when data available) | Other | — |
extraction_method | string | null | llm | Other | 28% |
jobs_extracted | integer | null | (populated when data available) | Other | 40% |
pages_fetched | integer | null | (populated when data available) | Other | 40% |
pagination_source | string | null | (populated when data available) | Other | 40% |
aborted | boolean | null | (populated when data available) | Other | — |
abort_cause | string | null | (populated when data available) | Other | — |
will_resume | boolean | null | (populated when data available) | Other | — |
jobs_seen | integer | null | (populated when data available) | Other | 40% |
jobs_after_filters | integer | null | (populated when data available) | Other | 40% |
jobs_pushed | integer | null | (populated when data available) | Other | 40% |
jobs_total_reported_by_site | integer | null | (populated when data available) | Other | — |
filter_mode | string | null | (populated when data available) | Other | 40% |
filter_note | string | null | (populated when data available) | Other | — |
detail_fetched | integer | null | (populated when data available) | Other | — |
detail_pdf | integer | null | (populated when data available) | Other | — |
detail_failed | integer | null | (populated when data available) | Other | — |
detail_llm_calls | integer | null | (populated when data available) | Other | — |
detail_charged | integer | null | (populated when data available) | Other | — |
{
"includeJobDetails": true
}{
"company_id": "input-2",
"company_name": "Breeze Dental",
"company_name_detected": "Breeze Dental",
"company_name_source": "json_ld_organization",
"title": "Dental Hygienist",
"description": "Join Breeze Oral Care as a Dental Hygienist in Austin, TX, working with innovative Airflow cleaning technology in a full-time, in-office role.",
"location": "Austin, TX",
"city": null,
"region": null,
"country": null,
"remote": null,
"employment_type": "Full-time",
"experience_level": null,
"salary_range": null,
"department": null,
"requirements": null,
"benefits": [
"Innovative Work Environment",
"Professional Growth",
"Comprehensive Benefits",
"Collaborative Culture"
],
"source_url": "https://www.breezeoralcare.com/careers/",
"job_url": "https://jobs.wizehire.com/job/registered-dental-hygienist-in-austin-tx-us-1e7a9fd37711872f?_gl=1*10j3qt0*_gcl_au*MTIyNjU0NDcxMC4xNzgwNTA3OTgy*_ga*MTcyMTg0MTE2LjE3ODA1MDc4MzE.*_ga_H13X3PYC36*czE3ODA1MDc4MzEkbzEkZzEkdDE3ODA1MDc5ODEkajYwJGwwJGgw",
"job_id": "registered-dental-hygienist-in-austin-tx-us-1e7a9fd37711872f",
"application_url": "https://www.breezeoralcare.com/careers/",
"posted_at": null,
"workplace_type": "onsite",
"extracted_at": "2026-10-27T10:57:57.268Z",
"confidence": 0.6000000000000001,
"relevance": null,
"ats_system": null,
"ats_supported_by_csj": false,
"application_ats": null,
"ats_tenant": null,
"ats_url": null,
"career_page_url": "https://www.breezeoralcare.com/?utm_campaign=gmb",
"extraction_method": "llm",
"description_md": null,
"posting_format": null,
"full_text_url": null,
"expires_at": null,
"application_deadline": null,
"salary_text": null,
"salary_min": null,
"salary_max": null,
"salary_currency": null,
"salary_period": null,
"salary_source": null,
"workload_min": null,
"workload_max": null,
"contact_name": null,
"contact_email": null,
"contact_phone": null,
"remote_option": null,
"languages": null,
"hiring_organization": null,
"reference_number": null,
"apply_url": null,
"is_easy_apply": null,
"skills": null,
"postal_code": null,
"street_address": null,
"working_hours": null,
"job_url_is_synthetic": false
}Priced at $0.0120 per job (managed llm). 10 job (managed llm)s ≈ $0.12, 100 ≈ $1.20, 1,000 ≈ $12.00. The first runs land inside Apify's $5/mo free-tier credit — pay only for what you extract, no monthly subscription.
B2B sales and lead generation teams use this actor to detect hiring intent at the exact moment a company posts a new role. A company posting 5 new sales engineer roles is a live buying signal for CRM, HR tech, and benefits vendors, and this actor surfaces it directly from the company's own website before it appears on public job boards.
Recruitment analytics platforms building competitive intelligence feeds combine this actor with the Google Maps Scraper to discover companies by location, then automatically extract their open jobs for sector-level hiring trend dashboards.
Niche job board operators covering specific industries use the skipAtsExtraction: true mode to route Personio, Greenhouse, and Lever portals into the Career Site Jobs Scraper for structured API-level extraction, while the LLM handles the remaining custom career pages, all in one pipeline.
Click Open on Apify above to run website-job-extractor 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~website-job-extractor/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/website-job-extractor').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/website-job-extractor').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/website-job-extractor").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/website-job-extractor").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/website-job-extractorExample prompt once connected:
"Use <code>website-job-extractor</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/website-job-extractor.https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN.application/json.https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN, method POST, body raw JSON.https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN.steps.http.$return_value in subsequent steps.https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN, body type JSON.$12.00 / 1,000 job (managed llm), 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.