How to scrape jobs data from WorkBC using the Minexa API
- Minexa.ai

- 6 days ago
- 3 min read
WorkBC publishes one of the most complete public job boards in British Columbia, covering roles across every sector, employment type, and region. For developers building labour market tools, recruitment pipelines, or regional salary datasets, that listing page is a structured data source waiting to be tapped.
This guide shows how to extract that data at scale using the Minexa API. Train a scraper once via the Chrome extension, then call the API programmatically against any volume of URLs.
Watch the full tutorial first
Watch on YouTube.
What data WorkBC exposes per listing
Each job card on the WorkBC search page surfaces a consistent set of fields. Here is what Minexa extracts automatically once the scraper is trained:
job_title: the role name as posted, e.g. 'carpenter' or 'early childhood educator'
employer_name: the hiring organization
salary_range: fixed hourly, annual, or negotiated range as written on the page
job_location: city and employment type bundled as a nested object
job_number: a unique identifier per listing, useful for deduplication
listing_status: expiry countdown or posted status, e.g. 'Expires in 15 days'
view_count: how many times the listing has been viewed
posted_date: the date the listing went live
job_print_link: a direct print URL per listing for downstream archiving
job_description: a nested object containing all structured content per card
The listing_attribute field is worth noting separately. It captures the CSS class applied to each listing card, which distinguishes between listings showing an expiry countdown and those showing only a posted date. This lets you filter by listing freshness without parsing date strings.
Training the scraper
Open workbc.ca/search-and-prepare-job/find-jobs in Chrome with the Minexa extension installed.
Click the extension icon and confirm you are on the right page.
Minexa detects the pagination structure on the page. Review the detected pages and click Continue.
Select your scraping mode. For this listing page, the default list mode works correctly.
Hover over the job listing container and click to select it. Minexa highlights the full data block automatically.
All extracted data points are identified and displayed. Click through to complete configuration.
The scraper is now saved. Click 'API Request' in the top right to get your pre-generated Python code with your scraper_id already filled in.
Sample extracted data
Below are two records from a real extraction run against the WorkBC listing page:
[
{
"job_title": "carpenter",
"employer_name": "Castores Builders Ltd.",
"salary_range": "$37.00 hourly",
"job_location": "Burnaby",
"job_number": "Job Number: 49679791",
"listing_status": "Expires in 15 days",
"view_count": "4 views",
"posted_date": "June 9, 2026"
},
{
"job_title": "office manager",
"employer_name": "Q Pizza",
"salary_range": "$27.50 to $37.50 hourly (to be negotiated)",
"job_location": "Victoria",
"job_number": "Job Number: 49679345",
"listing_status": "Expires in 22 days",
"view_count": "11 views",
"posted_date": "June 9, 2026"
}
]API request structure
Once the scraper is trained, pass your target URLs to the Minexa API. The scraper_id stays fixed; only the URLs change per run.
import requests
url = "https://api.minexa.ai/data/"
api_key = "YOUR_API_KEY"
data = {
"batches": [{
"scraper_id": 4721,
"columns": ["top_30"],
"urls": ["https://www.workbc.ca/search-and-prepare-job/find-jobs"],
"scraping": {
"js_render": True,
"timeout": 30,
"proxy": "verified",
"retry": 3
}
}],
"threads": 5
}
headers = {"Content-Type": "application/json", "api-key": api_key}
response = requests.post(url, json=data, headers=headers)
print(response.json())WorkBC renders its job listings via JavaScript, so js_render: true is required. If you find the default proxy settings are not returning full page content, try switching to a residential proxy or increasing the timeout value. The extension's API Request dropdown includes pre-built scenarios you can copy directly.
The job_number field is the most reliable deduplication key across runs. Combined with posted_date and listing_status, it gives you a complete picture of listing lifecycle without any additional parsing.
Ready to start extracting WorkBC data? Install the Minexa Chrome extension, train your scraper in a few minutes, and the API handles the rest. Full documentation is available at minexa.stoplight.io.

Comments