
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Scrape remote jobs from We Work Remotely: title, company, category, job type, salary, countries, skills, full description, dates and badges. Filter by category, keyword, country, salary, type and date. No login needed.
Get every remote job listed on We Work Remotely as clean, structured data: title, company, category, job type, salary, countries, skills, the full description, posted and apply-before dates and the site's badges. The whole board (about 460 live jobs when we tested) comes back in under 20 seconds, with no login and no browser, for $3 per 1,000 jobs.
| Field | What it does |
|---|---|
categories | Categories to read, for example full-stack-programming, design, sales-and-marketing. |
searchTerms | Keep jobs whose title, company or skills contain any of these words. |
startUrls | Category, search, company, skill or single job links from weworkremotely.com. |
maxResults | Maximum jobs to save, newest first (0 = all). |
countries | ISO codes or names, for example US, GB, Germany. |
salaryRanges | 10000, 25000, 50000, 75000, 100000 (the site's yearly USD brackets). |
jobTypes | full-time, part-time, contract. |
timeFilter | 24h, 7d, 14d, 30d. |
jobTags | featured, top100, hot, boosted. |
onlyWithSalary / excludeKeywords | Skip jobs without a salary, or whose title contains a word. |
includeDescription | Full description as text and HTML (on by default). |
includeDetails | Also open each job page (extra charge, see Pricing). |
{
"categories": ["full-stack-programming", "back-end-programming"],
"searchTerms": ["python", "data engineer"],
"countries": ["US"],
"timeFilter": "14d",
"maxResults": 50
}
| Field | Example |
|---|---|
title, url, id | Senior Data Engineer, job link, job slug |
companyName, companySlug, companyProfileUrl, companyLogoUrl | Company and its We Work Remotely profile |
companyHeadquarters, companyWebsite | As given by the employer |
category, jobType | Full-Stack Programming, Full-Time |
salary, salaryMin, salaryMax, salaryCurrency, salaryPeriod | $50,000 - $74,999 USD → 50000 / 74999 / USD / year |
region, countries, countryCodes, location | Anywhere in the World, or the countries the job names |
skills | Skills tagged on the job |
postedAt, postedAgo, expiresAt | Posted date, the list's age label and the apply-before date |
isFeatured, isTop100, isHot, isBoosted | The site's badges |
description, descriptionHtml | Full job description |
jobId, applyUrl, applyNeedsAccount, applicantCountryCodes, companyJobsCount | Only with Include job page details |
Example item from a test run (description shortened):
{
"id": "growth-minded-senior-data-engineer",
"url": "https://weworkremotely.com/remote-jobs/growth-minded-senior-data-engineer",
"title": "Senior Data Engineer",
"companyName": "Growth Minded",
"companySlug": "growth-minded",
"companyProfileUrl": "https://weworkremotely.com/company/growth-minded",
"companyHeadquarters": "Remote",
"companyWebsite": "https://growthminded.co",
"category": "Full-Stack Programming",
"jobType": "Full-Time",
"salary": "$50,000 - $74,999 USD",
"salaryMin": 50000,
"salaryMax": 74999,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"region": "Anywhere in the World",
"countries": [],
"location": "Anywhere in the World",
"skills": ["Data Analysis", "Database", "PostgreSQL", "Python", "BigQuery"],
"postedAt": "2026-10-19T12:47:58Z",
"postedAgo": "2d",
"expiresAt": "2026-11-18T12:47:58Z",
"isFeatured": true,
"isTop100": false,
"isHot": true,
"isBoosted": false,
"description": "About the role\n\nYou'll own the data layer underneath InsightsOS and EngageOS...",
"scrapedAt": "2026-10-21T04:08:56Z"
}
Examples: 20 jobs ≈ $0.06; the whole board of 460 jobs ≈ $1.38 + $0.003 usage; 1,000 jobs = $3.00 + usage.
Is it legal to scrape We Work Remotely? The scraper only reads public job pages and feeds that anyone can open without an account. Check the site's terms and your local laws for your use case, especially before republishing content.
Do I need a login or my own proxy? No. No account is used, and the default datacenter proxy works well for this site.
How many results can I get? Every job the site lists in the categories you pick. The board had about 460 live jobs when we tested; a run with Max results 0 returns all of them.
Why is a field empty?
Employers fill different fields. Salary, countries, skills and logos are only present when the employer added them. The apply link of most jobs is shown by the site only to signed-in job seekers, so applyUrl is filled only when it is public (applyNeedsAccount tells you which).
Can I schedule it or use the API? Yes. Schedule daily runs in the console, or start runs and read the dataset through the API, webhooks or integrations.
I used another We Work Remotely scraper. Can I keep my input?
Mostly yes: categories, countries, salaryRanges, timeFilter, maxResults and includeDetails use the same names, and engagementType (full_time / contract) is accepted too.
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.
categoriesarrayOptionalCategories
Job categories to read. Leave categories, keywords and links empty to get every job on We Work Remotely.
searchTermsarrayOptionalKeywords
Keep jobs whose title, company or skills contain any of these words, for example python, react or account executive. Works inside the categories above (all categories when none is picked).
startUrlsarrayOptionalWe Work Remotely links
Pages to scrape: category pages (weworkremotely.com/categories/remote-design-jobs), search links with their filters (weworkremotely.com/remote-jobs/search?term=react), company pages (weworkremotely.com/company/toptal), skill pages (weworkremotely.com/remote-jobs-python) or single job links.
maxResultsintegerOptionaldefault 20Max results
Maximum number of jobs to save, newest first. Use 0 for every matching job.
All filters are optional and combine with AND. They apply to categories, keywords and links (not to single job links).
countriesarrayOptionalCountries
Keep jobs that name one of these countries, as ISO codes or names (US, GB, Germany). Jobs open worldwide without a country list are left out when this is set, like on the site.
salaryRangesarrayOptionalSalary ranges
Keep jobs in one of these yearly salary brackets.
jobTypesarrayOptionalJob types
Keep jobs of these types. Full-Time/Part-Time jobs match both.
timeFilterenumOptionalPosted within
Keep jobs posted in this period.
jobTagsarrayOptionalJob tags
Keep jobs that carry any of these site tags.
onlyWithSalarybooleanOptionaldefault falseOnly jobs with a salary
Skip jobs that do not show a salary.
excludeKeywordsarrayOptionalExclude title keywords
Skip jobs whose title contains any of these words, for example intern or junior.
includeDescriptionbooleanOptionaldefault trueInclude description
Save the full job description as text and HTML. Included in the job price.
includeDetailsbooleanOptionaldefault falseInclude job page details
Also open each job page for the apply link (when the employer shows it publicly), the site's job id, the company's job count and the applicant country codes. Charged as an extra event per job.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies work well for We Work Remotely.
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 | Job slug on We Work Remotely |
| url | string | null | Job page |
| title | string | null | Job title |
| companyName | string | null | Company name |
| companySlug | string | null | Company slug on We Work Remotely |
| companyProfileUrl | string | null | Company profile on We Work Remotely |
| companyLogoUrl | string | null | Company logo |
| companyHeadquarters | string | null | Company headquarters as given by the employer |
| companyWebsite | string | null | Company website |
| category | string | null | Job category |
| jobType | string | null | Full-Time, Contract, Full-Time/Part-Time ... |
| salary | string | null | Salary as shown on the site, for example $100,000 or more USD |
| salaryMin | number | null | Lower end of the salary |
| salaryMax | number | null | Upper end of the salary |
| salaryCurrency | string | null | Salary currency |
| salaryPeriod | string | null | year or hour |
| region | string | null | Region, for example Anywhere in the World or North America Only |
| countries | array | null | Countries named in the job |
| countryCodes | array | null | ISO codes of those countries |
| location | string | null | Countries, or the region when no country is named |
| skills | array | null | Skills tagged on the job |
| postedAt | string | null | When the job was posted (UTC) |
| postedAgo | string | null | Age label as shown on the list, for example New or 3d |
| expiresAt | string | null | Apply-before date (UTC) |
| isFeatured | boolean | null | Featured listing |
| isTop100 | boolean | null | Top 100 remote company |
| isHot | boolean | null | Hot job |
| isBoosted | boolean | null | Boosted listing |
| description | string | null | Full description as plain text |
| descriptionHtml | string | null | Full description as HTML |
| jobId | string | null | Numeric job id (job page details) |
| applyUrl | string | null | Employer's apply link when it is public (job page details) |
| applyNeedsAccount | boolean | null | The site shows the apply link only to signed-in job seekers (job page details) |
| applicantCountryCodes | array | null | Countries the employer accepts applicants from (job page details) |
| companyJobsCount | number | null | Jobs the company has posted on We Work Remotely (job page details) |
| detailsScraped | boolean | null | Job page details were added |
| scrapedAt | string | null | When the row was scraped (UTC) |
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 We Work Remotely job with its full description | $0.003 |
| Job page details | Extra per job when Include job page details is on (apply link, job id, company job count, applicant countries) | $0.01 |
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/weworkremotely-scraper').call({
"categories": [
"full-stack-programming"
],
"searchTerms": [],
"startUrls": [],
"maxResults": 20,
"countries": [],
"excludeKeywords": [],
"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/weworkremotely-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/weworkremotely-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.
Keyword search across every category, newest first.
Jobs that name the United States as an allowed country.
Jobs that name the United Kingdom as an allowed country.
Adds apply link, job id, company job count and applicant countries.
A category page and a search link pasted as URLs.
Category with job type, date and excluded-word filters.
Scrape.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.