Workopolis Jobs Scraper avatar

Workopolis Jobs Scraper

Pricing

from $0.95 / 1,000 results

Go to Apify Store
Workopolis Jobs Scraper

Workopolis Jobs Scraper

[πŸ’° $0.95 / 1K] Extract job listings from Workopolis. Search by keyword and location, filter by date posted, employment type, and work setting, and get titles, companies, salaries, descriptions, and direct apply links.

Pricing

from $0.95 / 1,000 results

Rating

0.0

(0)

Developer

SolidCode

SolidCode

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

3 days ago

Last modified

Share

Pull job postings from Workopolis at scale β€” titles, employers, salaries, full descriptions, employment types, work settings, posted dates, and direct apply links for every job across Canada. Search by keyword and city, or paste a Workopolis search URL and scrape it exactly as you set it up on the site. Built for recruiters, job-market researchers, and job-search platforms who need fresh Canadian hiring data without copying postings one page at a time.

Why This Scraper?

  • Every job across Canada, province or city level β€” search "Toronto", "Vancouver", or a whole province like "Ontario", or leave the location empty to sweep the entire country.
  • Up to 2,000 jobs per keyword, many keywords per run β€” run 50 keywords in a single invocation; results merge into one dataset and de-duplicate by job ID so the same posting never lands twice.
  • 9 employment-type filters β€” Full-time, Part-time, Permanent, Contract, Fixed-term, Temporary, Internship/Co-op, Casual, and Freelance.
  • Remote and hybrid roles isolated by tag β€” Workopolis labels postings Remote or Hybrid, and you can filter to either one, or to everything it labels neither way when you want desk-based roles.
  • 5 date-posted windows β€” Any time, last 24 hours, last 7 days, last 14 days, or last 30 days to catch only the freshest openings.
  • Pay as numbers, not a string to unpick β€” roughly 8 in 10 Canadian postings quote pay (about 80% across a broad sweep, ranging from 53% to 92% depending on the role and city), and each one arrives as a separate minimum, maximum, and pay period (hourly, daily, weekly, monthly, or yearly), down to the cent. Sort and average straight away, no text to unpick; the currency code comes with full job details.
  • Full job descriptions in plain text, HTML, or both β€” choose the format per run, with listed benefits captured alongside the description.
  • Direct apply links on every row β€” each job carries its canonical apply URL, so recruiters and candidates go straight to the source.
  • One-click full-detail enrichment β€” turn on Fetch Full Job Details to pull the complete description, the posting's exact pay record with its currency code, work setting, and benefits from each job's own page.

Use Cases

Recruitment & Sourcing

  • Build candidate-facing job feeds for a niche, city, or province
  • Track which employers are hiring for a given role across Canada
  • Monitor brand-new postings every day with the 24-hour date filter
  • Surface direct apply links for fast outreach to active openings

Job-Market Research

  • Measure hiring demand for a skill or title across Canadian cities
  • Compare full-time vs. contract vs. freelance mix in a sector
  • Track remote and hybrid availability over time
  • Map employment trends by province for labour-market reports

Salary Benchmarking

  • Collect posted salary ranges by title, city, and employment type
  • Build compensation bands from minimum/maximum salary fields
  • Benchmark pay for the same role across regions
  • Track salary movement for a role over weeks of fresh postings

Job Aggregators & Platforms

  • Power a Canadian job board with continuously refreshed listings
  • Feed structured postings into a job-matching or alerting product
  • Enrich an existing listings database with descriptions and benefits
  • Keep apply links current as postings rotate

Lead Generation

  • Identify companies actively expanding in a market
  • Build employer contact lists from companies posting roles
  • Spot hiring surges that signal growth or new funding

Getting Started

The simplest run β€” one keyword in one city:

{
"searchQueries": ["software engineer"],
"location": "Toronto",
"maxResults": 50
}

Recent, remote, full-time roles only:

{
"searchQueries": ["registered nurse", "nurse practitioner"],
"location": "Ontario",
"datePosted": "7",
"employmentType": "fulltime",
"workSetting": "remote",
"maxResults": 200
}

Advanced β€” Direct URLs + Full Detail

Paste search URLs dialed in on the Workopolis site and pull the full detail for every job:

{
"startUrls": [
"https://www.workopolis.com/search?q=data+analyst&l=Vancouver%2C+BC"
],
"searchQueries": ["data analyst"],
"location": "Vancouver",
"datePosted": "14",
"maxResults": 500,
"includeJobDetails": true,
"descriptionFormat": "both"
}

Input Reference

ParameterTypeDefaultDescription
searchQueriesstring[]["software engineer"]Job titles or keywords to search. Each keyword runs its own search; results merge and de-duplicate. Up to 50 keywords per run. Leave empty to use only the direct URLs below.
locationstring"Toronto"City or region within Canada (e.g. "Toronto", "Vancouver", "Ontario"). Leave empty to search all of Canada.
startUrlsstring[][]Paste full Workopolis search-result URLs to scrape them exactly as-is. Any filters baked into the URL are honored and pagination is automatic. Up to 50 URLs per run.

Filters & Limits

ParameterTypeDefaultDescription
datePostedselectAny timeOnly show jobs posted within Any time, Last 24 hours, Last 7 days, Last 14 days, or Last 30 days.
employmentTypeselectAnyFilter by type: Full-time, Part-time, Permanent, Contract, Fixed term contract, Temporary, Internship / Co-op, Casual, or Freelance.
workSettingselectAnyFilter by where the work happens: Remote, Hybrid, or everything Workopolis tags neither way (the closest match to on-site).
maxResultsinteger100Maximum jobs per keyword (1–2,000). The last page is kept in full, so the final count can slightly overshoot.

Advanced

ParameterTypeDefaultDescription
includeJobDetailsbooleantrueFetch the full description, the posting's exact pay record with its currency code, work setting, and benefits from each job's detail page. Turn off for faster, lighter scans.
descriptionFormatselectPlain textHow to return the description: Plain text, HTML (keeps formatting), or Both in their own fields.

Output

Each job is one flat row. Here's a representative result with full details enabled:

{
"title": "Senior Software Engineer",
"company": "Maple Tech Inc.",
"location": "Toronto, ON",
"salary": "$110,000–$140,000 a year",
"salaryMin": 110000,
"salaryMax": 140000,
"salaryCurrency": "CAD",
"salaryPeriod": "year",
"employmentType": "Full-time",
"workSetting": "Hybrid work",
"postedDate": "2026-06-12",
"snippet": "We are looking for a senior engineer to join our platform team...",
"description": "About the role\nWe are looking for a senior engineer to join our platform team. You will design and ship backend services...",
"descriptionHtml": "<p>About the role</p><p>We are looking for a senior engineer...</p>",
"benefits": "Dental care, Extended health care, RRSP match, Paid time off",
"jobUrl": "https://www.workopolis.com/jobsearch/viewjob/abc123def456",
"jobId": "abc123def456",
"searchQuery": "software engineer",
"searchLocation": "Toronto, ON",
"scrapedAt": "2026-06-20T14:30:00Z"
}

Core Fields

FieldTypeDescription
titlestringJob title
companystringHiring company or employer name
locationstringJob location (city, province)
jobUrlstringCanonical job/apply URL
jobIdstringUnique job identifier (used for de-duplication)
postedDatestringDate the job was posted (ISO format)

Compensation & Role

FieldTypeDescription
salarystringPay exactly as the posting displays it, e.g. $41.15–$58.98 an hour. Blank when the posting doesn't quote pay.
salaryMinnumberLower bound of the posted pay, to the cent. Filled on 98% of postings that quote pay; blank only on the few worded "Up to $X", which name no floor.
salaryMaxnumberUpper bound. Matches salaryMin when a posting quotes a single figure, and is blank on the 13% worded "From $X", which name no ceiling.
salaryCurrencystringCurrency code the employer filed the pay under, e.g. CAD. Arrives with Fetch Full Job Details on.
salaryPeriodstringWhat the minimum and maximum are per: hour, day, week, month, or year.
employmentTypestringFull-time, Part-time, Contract, etc.
workSettingstringRemote, Hybrid work, or both β€” blank when the posting carries no work-setting label. Workopolis labels only remote and hybrid roles, so desk-based jobs are simply left unlabelled.
benefitsstringListed benefits and perks (when published)

Description & Metadata

FieldTypeDescription
snippetstringShort search-result preview text
descriptionstringFull plain-text description (when descriptionFormat includes text)
descriptionHtmlstringFull HTML description (when descriptionFormat includes html)
searchQuerystringThe keyword that produced this row
searchLocationstringThe location used for the search
scrapedAtstringISO timestamp of extraction

Tips for Best Results

  • Mirror an exact search with a URL β€” set up the search you want on the Workopolis website, copy the address bar into startUrls, and the run reproduces it filter-for-filter, including any options not exposed as inputs here.
  • Keep Fetch Full Job Details on for the richest data β€” it's the only way to get the complete description, the currency code on the pay record, work setting, and benefits. The pay minimum, maximum, and period come through either way, so a fast scan still gives you numbers to sort on.
  • Remote is the most efficient work-setting filter β€” remote roles are isolated directly at search time, while Hybrid and the not-tagged-either-way option are matched as each job is read, so very specific combinations may take a little longer to fill on markets where few jobs match.
  • Read a blank work setting as "unlabelled", not "on-site" β€” Workopolis only ever labels a posting Remote or Hybrid, so most desk-based jobs come through with the field blank. Filter on it to find remote and hybrid roles; don't treat a blank as a confirmed on-site listing.
  • Run several keywords at once β€” list every title you track in searchQueries; they share one run and de-duplicate automatically, so a posting found by two keywords appears only once.
  • Start small, then scale β€” try maxResults of 25–50 to confirm the data fits your needs, then raise it up to 2,000 per keyword for deep coverage.
  • Pick the description format you'll actually use β€” choose Plain text for clean analysis, HTML to preserve formatting, or Both to keep every option open.
  • Use the 24-hour window for daily monitoring β€” schedule a run with datePosted set to Last 24 hours to capture only brand-new postings each day.

Pricing

From $0.95 per 1,000 results β€” the lowest-cost way to collect Canadian job listings at scale. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows the total cost at each discount tier.

ResultsNo discountBronzeSilverGold
100$0.11$0.11$0.10$0.10
1,000$1.10$1.05$1.00$0.95
10,000$11.00$10.50$10.00$9.50
100,000$110.00$105.00$100.00$95.00

A "result" is any job row in the output dataset. No compute or time-based charges β€” you pay per result, plus a small fixed per-run start fee.

Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

  • Zapier / Make / n8n β€” Workflow automation
  • Google Sheets β€” Direct spreadsheet export
  • Slack / Email β€” Notifications on new results
  • Webhooks β€” Trigger custom APIs on run completion
  • Apify API β€” Full programmatic access

This actor is designed for legitimate recruitment research, labour-market analysis, and job-feed aggregation. Users are responsible for complying with applicable laws and Workopolis's terms of service. Do not use extracted data for spam, harassment, or any illegal purpose, and handle any personal data in line with applicable privacy regulations.