Workopolis Job Scraper avatar

Workopolis Job Scraper

Pricing

Pay per event

Go to Apify Store
Workopolis Job Scraper

Workopolis Job Scraper

Search public Workopolis Canada jobs by keyword, location, recency, or URL and extract employer, salary, requirements, dates, and full descriptions.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Categories

Share

Collect public Canadian vacancies from Workopolis as structured, integration-ready data. Search by job keyword, location, posting recency, or a Workopolis search URL, then export normalized job records with employer, compensation, requirements, and full descriptions.

This Actor is designed for recruiters, staffing firms, job aggregators, compensation analysts, and labor-market researchers who need a repeatable Workopolis feed without manually copying search results.

What does Workopolis Job Scraper do?

Workopolis Job Scraper turns one or more public Workopolis searches into a default Apify dataset. It supports:

  • keyword and employer searches;
  • Canadian city, province, or nationwide location filters;
  • 24-hour, 7-day, and 30-day posting filters;
  • direct Workopolis /search and /jobsearch/find-jobs URLs;
  • cursor pagination with a hard maxItems limit;
  • stable deduplication by Workopolis job key;
  • optional full-description enrichment;
  • optional Apify proxy configuration for challenged requests.

The Actor uses Workopolis' public Next.js data surfaces over HTTP. It does not require a Workopolis login, user cookies, or a browser.

Who is it for?

  • Recruiters: monitor new roles by title, employer, or Canadian market.
  • Staffing firms: build daily candidate-sourcing and client-demand feeds.
  • Job aggregators: add normalized Workopolis records to a broader jobs index.
  • Compensation analysts: collect vacancies where salary text is available.
  • Labor-market researchers: compare hiring activity by city, role, or date.
  • Automation teams: send new vacancies to Sheets, Airtable, webhooks, or a database.

Why use this Actor?

  • Structured records are easier to analyze than rendered search cards.
  • Full descriptions are available as both sanitized HTML and plain text.
  • Missing salary or benefit information remains null instead of being invented.
  • The same limits and filters apply to keyword searches and explicit search URLs.
  • Challenge pages are treated as errors, not as successful empty searches.
  • HTTP-only extraction keeps memory and runtime lower than browser automation.

What Workopolis data can I extract?

FieldMeaning
urlCanonical public Workopolis job URL
jobKeyStable source key for deduplication
titleJob title
companyEmployer name, when supplied
locationDisplayed Canadian location
salaryCompensation text, when supplied
employmentTypeFull-time, part-time, contract, or other type
workSettingRemote, hybrid, or in-person indicator when available
datePostedPosting date normalized to YYYY-MM-DD when parseable
snippetShort source summary
requirementsRequirements or skills supplied by Workopolis
benefitsBenefits supplied by Workopolis
descriptionHtmlSanitized semantic job-description HTML
descriptionTextPlain-text description or snippet fallback
sourceQueryKeyword used for discovery
sourceUrlNormalized search URL
scrapedAtISO timestamp when the item was produced

Source fields are not equally complete for every vacancy. Optional fields are nullable by design.

How to scrape Workopolis jobs

  1. Click Try for free in Apify Console.
  2. Enter a job keyword such as software developer.
  3. Optionally add a location such as Toronto, ON.
  4. Select a posting recency filter.
  5. Set the maximum jobs and pages.
  6. Keep Fetch full descriptions enabled when descriptions are needed.
  7. Start the Actor and open the Workopolis jobs dataset view.
  8. Export the records as JSON, CSV, Excel, XML, or connect an integration.

A useful first input is:

{
"keyword": "software developer",
"location": "Toronto, ON",
"postedWithin": "7d",
"maxItems": 20,
"maxPages": 3,
"includeDetails": true
}

Input parameters

ParameterTypeDefaultDescription
keywordstringsoftware developerJob title, skill, or employer keyword
locationstringemptyCanadian city, province, or location
postedWithinenumanytimeanytime, 24h, 7d, or 30d
startUrlsarrayemptyWorkopolis search URLs; URL filters override matching fields
maxItemsinteger50Global maximum unique jobs, from 1 to 10,000
maxPagesinteger10Maximum cursor pages per search, from 1 to 100
includeDetailsbooleantrueFetch full job descriptions and detail backfills
proxyConfigurationobjectdisabledOptional Apify proxy configuration

Provide either keyword or at least one supported Workopolis search URL. Unsupported hosts and paths fail validation before scraping.

Use a Workopolis search URL

Copy a public Workopolis search URL into startUrls:

{
"startUrls": [
{
"url": "https://www.workopolis.com/search?q=nurse&l=Toronto%2C+ON"
}
],
"maxItems": 15,
"includeDetails": true
}

Legacy Workopolis /jobsearch/find-jobs?ak=...&l=... search URLs are also accepted. Job-detail URLs are output records, not search inputs.

Output example

The default dataset contains one object per unique vacancy. This abbreviated shape is based on current Workopolis output:

{
"url": "https://www.workopolis.com/jobsearch/viewjob/LXUTAcCfY9wWQtDXbGOM9tJTWXdXE6pen3EQaIgbAqeg9RGtNXyvfc4vBhfJsMf2",
"jobKey": "LXUTAcCfY9wWQtDXbGOM9tJTWXdXE6pen3EQaIgbAqeg9RGtNXyvfc4vBhfJsMf2",
"title": "Registered Nurse - Casual",
"company": "Sienna Senior Living",
"location": "Toronto, ON",
"salary": "$36.06–$54.59 an hour",
"employmentType": "Part-time",
"workSetting": "In person",
"datePosted": "2026-07-18",
"snippet": "Provide resident-centered nursing care.",
"requirements": "Nursing, Communication skills",
"benefits": null,
"descriptionHtml": "<p>Provide resident-centered nursing care...</p>",
"descriptionText": "Provide resident-centered nursing care...",
"sourceQuery": "nurse",
"sourceUrl": "https://www.workopolis.com/search?q=nurse&l=Toronto%2C+ON",
"scrapedAt": "2026-07-28T04:30:00.000Z"
}

How much does it cost to scrape Workopolis jobs?

The Actor uses pay-per-event pricing:

  • $0.005 per run for the Actor start event.
  • $0.000041071 per saved job on the Free tier.
  • Lower per-job rates apply on higher Apify subscription tiers, down to $0.00001 per job on Diamond.
  • Full descriptions are included in the saved-job event and have no separate event charge.

Examples on the Free tier:

Saved jobsEstimated Actor price
10$0.00541
100$0.00911
1,000$0.0461

Examples are start fee plus successful saved-job events, rounded to cents where shown. Infrastructure usage and optional proxy traffic are measured separately by Apify and may vary by run.

Build a recurring hiring monitor

Schedule a daily run with postedWithin set to 24h. Use jobKey as the stable key in your database or automation to avoid notifying twice. Common workflows include:

  1. Workopolis → Apify dataset → Google Sheets.
  2. Workopolis → webhook → ATS or recruiting CRM.
  3. Workopolis → database → employer hiring dashboard.
  4. Workopolis → description text → skills or salary classifier.
  5. Workopolis → daily diff → Slack or email alert.

Apify schedules and integrations can run these workflows without keeping a server online.

Tips for reliable results

  • Start with 20–50 jobs while validating a new search.
  • Disable includeDetails when listing metadata is enough and speed matters most.
  • Keep page limits conservative for frequent schedules.
  • Use exact Canadian locations such as Vancouver, BC for focused feeds.
  • Deduplicate downstream on jobKey, not title.
  • Enable an Apify proxy only after a run reports a Workopolis challenge.
  • Do not treat a nullable salary as zero compensation; it means the source omitted a structured value.

Limits and failure behavior

Workopolis can change its Next.js data shape or present Cloudflare challenges. The Actor retries transient challenge, timeout, 429, and 5xx responses a bounded number of times. It fails non-zero when it cannot recognize or access the source, so monitoring systems can distinguish a source failure from a genuine no-result search.

A valid search with no current matches succeeds with an empty dataset. Detail failures preserve useful listing fields and log the affected job key. The Actor does not scrape private applications, candidate data, or account-only pages.

Run Workopolis Job Scraper with the Apify API

Replace YOUR_APIFY_TOKEN with your token.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~workopolis-job-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keyword":"data analyst","location":"Canada","postedWithin":"24h","maxItems":50}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/workopolis-job-scraper').call({
keyword: 'data analyst',
location: 'Canada',
postedWithin: '24h',
maxItems: 50,
includeDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("automation-lab/workopolis-job-scraper").call(run_input={
"keyword": "data analyst",
"location": "Canada",
"postedWithin": "24h",
"maxItems": 50,
"includeDetails": True,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use Workopolis Job Scraper through MCP

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/workopolis-job-scraper"

Claude Desktop, Cursor, and VS Code setup

Claude Desktop, Cursor, and VS Code clients can use this HTTP MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/workopolis-job-scraper"
}
}
}

Example prompts:

  • “Find up to 30 Workopolis nurse jobs in Toronto posted in the last 7 days.”
  • “Collect new Canadian data analyst vacancies with salary and full descriptions.”
  • “Export this Workopolis search URL as normalized job records.”

This Actor accesses publicly available Workopolis vacancy data. You are responsible for complying with applicable laws, Workopolis terms, robots directives, privacy requirements, and the rules that apply to your use case. Do not use the Actor to collect personal data unnecessarily, bypass account controls, spam employers, or make automated employment decisions without appropriate review. Store and retain only the data you need.

FAQ

Does it require a Workopolis account?

No. The supported scope uses public job search and detail data.

Can it scrape multiple searches?

Yes. Add multiple supported search URLs. maxItems remains a global limit and duplicate job keys are saved once.

Why is salary sometimes null?

Many employers do not publish structured compensation. The Actor preserves null instead of estimating a salary.

Why did my run report a challenge?

Workopolis sometimes challenges HTTP traffic. Retry later or enable an appropriate Apify proxy in proxyConfiguration. Avoid high-frequency schedules and very large page limits.

Can I skip full descriptions?

Yes. Set includeDetails to false for a faster listing feed. The snippet remains available when supplied by Workopolis.

How do I detect newly posted jobs?

Schedule the Actor with postedWithin: "24h" and compare the stable jobKey with keys already stored downstream.

  • Canada Job Bank Scraper — collect vacancies from the Canadian government Job Bank as a distinct complementary source.
  • LinkedIn Jobs Scraper — add broader professional-network job coverage to a multi-source pipeline.

Workopolis remains a separate source with its own employers, listings, and source keys; merging sources downstream can improve coverage.

Support

If a run fails, include the public run URL, sanitized input, and whether a proxy was enabled when reporting the issue. Do not include your Apify token, private credentials, or candidate data.