
Google Ads Scraper
scrape.ly/store/querystone/google-ads-scraperLead generationSEO tools
4 monthly users

Scrape job listings from Workable: search jobs.workable.com by keyword and location, or pull every open role from any company's apply.workable.com career page. Title, company, location, remote or hybrid, job type, experience, full description, requirements, benefits and apply link.
Collect job listings from Workable, one of the most used applicant tracking systems: search the Workable job board (jobs.workable.com) by keyword and location, or pull every open role from any company's career page on apply.workable.com. You get clean rows with title, company, location, remote or hybrid, employment type, department, posting date, full description, requirements, benefits and the apply link. No login and no browser: the actor reads Workable's public job data directly, so 1,000 jobs take under 30 seconds.
software engineer) and a Location (United States, London, Greece or Remote), orhuggingface for apply.workable.com/huggingface/).| Field | What it does |
|---|---|
queries | Keywords to search on jobs.workable.com, one search each. |
location | City, region or country for the searches. Remote finds remote jobs anywhere. |
startUrls | Workable links: search, company page, job page, career page or career-page job. |
companies | Career-page names (huggingface, netguru) or apply.workable.com links. Every open job is saved. |
maxResults | Total jobs to save across all inputs (0 means no limit). |
postedWithin | anytime, 24h, 7d or 30d. |
workplaceTypes | on_site, hybrid, remote. |
employmentTypes | full_time, part_time, contract, temporary, other. |
experienceLevels | internship, entry_level, associate, mid_senior_level, director, executive. |
titleKeywords / excludeKeywords | Keep or drop jobs by words in the title. |
maxResultsPerSource | Cap per search, URL or company so one source does not take the whole limit. |
includeDescription / includeHtml | Description, requirements and benefits as text, and optionally as HTML. |
includeSalary | Open each search result once more for the salary range and the employer's own apply link. |
{
"queries": ["software engineer", "data analyst"],
"location": "United States",
"companies": ["huggingface"],
"postedWithin": "7d",
"workplaceTypes": ["remote", "hybrid"],
"maxResults": 100
}
| Field | Description |
|---|---|
title, company_title | Job title and hiring company. |
location, location_city, location_subregion, location_country, locations | Main location, its parts and every location of the job (Remote included). |
workplace_type, is_remote | on_site, hybrid or remote. |
employment_type, job_types, department | Full-time, Part-time, Contract and so on, plus the department. |
experience, job_function, industry, education | Seniority and classification, on career-page jobs when the company sets them. |
date_posted, date_updated | ISO 8601 dates. |
url, apply_url, linkout_url | Job page, apply page and the employer's own apply link when there is one. |
company_id, company_slug, company_website, company_url, company_image, company_description | Company details. |
salary_from, salary_to, salary_currency, salary_period, salary_text | Salary, when the job publishes one (search jobs need includeSalary). |
description_text, requirements, benefits (+ _html) | Full job content. |
source, source_list_url, source_query_keyword, source_query_location | Which input produced the job. |
Example (one job from a test run, long texts shortened):
{
"id": "53b8b643-5ede-423d-8158-5aa9b8987192",
"title": "Software Engineer",
"company_title": "MLabs",
"location": "San Francisco, California, United States",
"location_city": "San Francisco",
"location_subregion": "California",
"location_country": "United States",
"locations": ["San Francisco, California, United States"],
"workplace_type": "hybrid",
"is_remote": false,
"department": "Direct Client",
"date_posted": "2026-10-16T09:05:43.000Z",
"url": "https://jobs.workable.com/view/bkC1Ko8scSiZxREBMNRVmN/hybrid-software-engineer-in-san-francisco-at-mlabs",
"apply_url": "https://jobs.workable.com/view/bkC1Ko8scSiZxREBMNRVmN/hybrid-software-engineer-in-san-francisco-at-mlabs",
"state": "published",
"language": "en",
"is_featured": false,
"company_id": "509c11ac-966f-4b08-84ce-f0645ef456b6",
"company_website": "https://mlabs.city",
"company_url": "https://jobs.workable.com/company/aXkkfKkxeQ2nQEvBbRPCPq/jobs-at-mlabs",
"company_image": "https://workablehr.s3.amazonaws.com/uploads/account/logo/490522/logo",
"description_text": "Software Engineer (Generalist)\n\nLocation: San Francisco, CA (Hybrid / Onsite options)\n\nType: Full-time\n\nLevel: Mid to Senior\n\nAbout the Role ...",
"requirements": "What You’ll Do\n\n- End-to-End Ownership: Design, build, test, and deploy features across the entire stack ...",
"source": "search",
"source_list_url": "https://jobs.workable.com/search?query=software+engineer&location=United+States",
"source_query_keyword": "software engineer",
"source_query_location": "United States",
"scraped_at": "2026-10-22T03:32:50.000Z"
}
You pay $0.70 per 1,000 jobs saved ($0.0007 per job), plus the small platform usage of the run (compute and datacenter proxy traffic). Example: 1,000 jobs with descriptions cost $0.70 in job fees plus less than a cent of usage (about $0.003 in our tests), so about $0.70 in total. Jobs removed by your filters are not charged, and the run stops cleanly when it reaches your maximum total charge.
Is it legal? The actor reads only public job postings that employers publish on Workable for anyone to see. It collects no candidate data. Check your own use case against local law and the site's terms.
Do I need a Workable account, login or proxy? No. All data comes from public job pages. The default datacenter proxy is enough.
How many jobs can I get? As many as Workable lists for your input. A broad search such as software in the United States returns thousands of jobs; set maxResults to 0 to collect all of them. Career pages return every open job of the company.
Why is a field empty? Workable fields are optional. Department, salary, benefits, experience level and the employer's own apply link only appear when the company fills them in. Experience, function, industry and education come from career pages only.
How do I find a company's career page name? Open one of its job links: apply.workable.com/huggingface/j/.... Old links like huggingface.workable.com work too.
Can I schedule it or use the API? Yes. Schedule daily runs (for example with postedWithin: 24h) and read the dataset through the API, webhooks or integrations.
includeSalary, which opens every job once more and makes the run slower.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
queriesarrayOptionalSearch keywords
Job titles or skills to search on jobs.workable.com, one search per line (for example software engineer, data analyst, nurse). Leave empty to scrape only URLs or career pages.
locationstringOptionalLocation
City, region or country for the keyword searches (for example London, Berlin, Greece, United States). Remote finds remote jobs anywhere. Leave empty to search worldwide.
startUrlsarrayOptionalWorkable URLs
Any Workable link: a jobs.workable.com search (https://jobs.workable.com/search?query=analyst&location=London), a company page (https://jobs.workable.com/company/...), a job page (https://jobs.workable.com/view/...), a career page (https://apply.workable.com/huggingface/) or a single career-page job (https://apply.workable.com/huggingface/j/81B46579FE/).
companiesarrayOptionalCompany career pages
Company names as they appear in Workable career-page links, the part after apply.workable.com/ (for example huggingface or netguru), or a full career-page link. Every open job of the company is saved.
maxResultsintegerOptionaldefault 20Max results
Maximum number of jobs to save across all searches, URLs and companies. Use 0 for no limit (every matching job).
All filters are optional and combine with AND. Within one filter, any selected value matches.
postedWithinenumOptionaldefault "anytime"Date posted
Keep only jobs posted in this period.
workplaceTypesarrayOptionalWorkplace type
Keep only on-site, hybrid or remote jobs. Leave empty for all.
employmentTypesarrayOptionalEmployment type
Keep only these employment types. Leave empty for all.
experienceLevelsarrayOptionalExperience level
Keep only these seniority levels. Leave empty for all. Career pages that do not state a level keep their jobs.
titleKeywordsarrayOptionalTitle must contain
Keep jobs whose title contains any of these words (word-start match, so engineer also matches engineering). Handy to narrow a career page.
excludeKeywordsarrayOptionalExclude title words
Drop jobs whose title contains any of these words, for example senior or intern.
maxResultsPerSourceintegerOptionaldefault 0Max results per search or company
Cap the jobs saved per keyword search, URL or company, so one large source does not use up the whole limit. 0 means no per-source cap.
includeDescriptionbooleanOptionaldefault trueInclude job descriptions
Save the full description, requirements, benefits and company description as plain text. Turn off for a lighter dataset.
includeHtmlbooleanOptionaldefault trueInclude description HTML
Also save the description, requirements and benefits as HTML, ready to display. Needs job descriptions to be on.
includeSalarybooleanOptionaldefault falseFetch salary and external apply link
For keyword searches and jobs.workable.com links, open each job once more to read the salary range and the employer's own apply link. Few Workable jobs publish a salary, and it makes runs slower.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are the default and work well for Workable's public job pages.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | null | Workable job id |
| shortcode | string | null | Career-page job code (apply.workable.com jobs) |
| title | string | null | Job title |
| company_title | string | null | Hiring company |
| location | string | null | Main location |
| location_city | string | null | City |
| location_subregion | string | null | State, province or region |
| location_country | string | null | Country |
| location_country_code | string | null | Two-letter country code (career pages) |
| locations | array | Every location of the job, Remote included |
| workplace_type | string | null | on_site, hybrid or remote |
| is_remote | boolean | null | Open to remote work |
| employment_type | string | null | Employment type, for example Full-time |
| job_types | array | Employment types as a list |
| department | string | null | Department |
| experience | string | null | Experience level (career pages) |
| job_function | string | null | Job function (career pages) |
| industry | string | null | Industry (career pages) |
| education | string | null | Required education (career pages) |
| date_posted | string | null | Posting date (ISO 8601) |
| date_updated | string | null | Last update (ISO 8601) |
| url | string | null | Job page |
| apply_url | string | null | Where to apply |
| linkout_url | string | null | Employer's own apply link, when the job has one |
| state | string | null | Publication state |
| language | string | null | Language of the posting |
| is_featured | boolean | null | Featured on the Workable job search |
| company_id | string | null | Workable company id |
| company_slug | string | null | Career-page name (apply.workable.com/) |
| company_website | string | null | Company website |
| company_url | string | null | Company page on Workable |
| company_image | string | null | Company logo |
| company_description | string | null | About the company, plain text |
| salary_from | number | null | Lowest salary |
| salary_to | number | null | Highest salary |
| salary_currency | string | null | Salary currency |
| salary_period | string | null | Salary period, for example year |
| salary_text | string | null | Salary as text |
| social_sharing_description | string | null | Short summary |
| description_text | string | null | Job description, plain text |
| requirements | string | null | Requirements, plain text |
| benefits | string | null | Benefits, plain text |
| description_html | string | null | Job description, HTML |
| requirements_html | string | null | Requirements, HTML |
| benefits_html | string | null | Benefits, HTML |
| source | string | null | search, company, job or career-page |
| source_list_url | string | null | Search, page or career page the job came from |
| source_query_keyword | string | null | Search keyword |
| source_query_location | string | null | Search location |
| scraped_at | string | null | When the job was saved |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Job | One saved Workable job listing. | $0.0007 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('openrole/workable-jobs-scraper').call({
"queries": [
"software engineer"
],
"location": "United States",
"maxResults": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run openrole/workable-jobs-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=openrole/workable-jobs-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
All open roles from apply.workable.com/huggingface and /netguru.
Remote roles only, posted in the last month.
Paste any jobs.workable.com or apply.workable.com link.
A non-US market with the workplace filter.
A lighter dataset: job metadata only.
Opens each job once more for the salary range and the employer's apply link.

Scrape Google Maps places for any search term and city, with no code or with one API call. A real run, its output, its log and its exact cost, plus the limits and the legal side.
Read the article
Paste an Amazon search or product URL into a ready-made Actor and get one row per product with price, ASIN, rating and review count. This guide covers the no-code steps, the API, ZIP code pricing, a real run and its cost.
Read the article
Scrape Google search results by query and country and get each results page as JSON: organic results with positions, People Also Ask and related searches. Run it without code or from Python, with a real run, the cost per page and Google's terms.
Read the articleScrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.