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

Scrape every open job from any company's SmartRecruiters career site: title, department, function, location, remote or hybrid, employment type, experience level, salary (parsed from the ad), full description and apply link. Filter by keyword, country, workplace type and more.
Pull every open job from any company that hires through SmartRecruiters, the applicant tracking system behind career sites like careers.smartrecruiters.com/ServiceNow and jobs.smartrecruiters.com/<company>. Paste company identifiers or SmartRecruiters links and get clean, structured rows: title, department, function, location, remote or hybrid, employment type, experience level, salary range, full job ad and apply link. No login and no browser: it reads SmartRecruiters' public job feed directly.
ServiceNow, a career page like https://careers.smartrecruiters.com/Ubisoft2, a single job link, or an API link such as https://api.smartrecruiters.com/v1/companies/BoschGroup/postings?country=de.The company identifier is the first part of the path on the career site: https://careers.smartrecruiters.com/ServiceNow. It is not case-sensitive.
| Field | What it does |
|---|---|
companies | SmartRecruiters identifiers or URLs (career page, jobs page, single job, or api.smartrecruiters.com postings URL). |
maxResults | Total jobs to save across all companies (0 means no limit, up to 100,000). |
keywords / excludeKeywords | Keep or drop jobs by words in the title. searchInDescription keeps full-text matches in the job ad too. |
countries / locations | Two-letter country codes (US, DE) or names, and whole-word place matches (London, CA, Bavaria). |
workplaceTypes | remote, hybrid, onsite. |
departments / commitments / experienceLevels | Words in the department or function, the employment type (Full-time, Intern) or the experience level (Entry, Director). |
languages | Job ad languages as codes (en, de). |
postedWithinDays | Only jobs released in the last N days. |
onlyWithSalary | Only jobs whose ad states a pay range or rate. |
maxResultsPerCompany | Cap per company, so one big employer does not fill the whole run. |
includeDescription / includeHtml | Turn job ads or the HTML copy off for a faster, lighter dataset. |
{
"companies": ["ServiceNow", "https://careers.smartrecruiters.com/Ubisoft2", "BoschGroup"],
"maxResults": 200,
"keywords": ["engineer", "data"],
"countries": ["US", "DE"],
"workplaceTypes": ["remote", "hybrid"],
"postedWithinDays": 30,
"maxResultsPerCompany": 50
}
One row per open job.
| Field | Description |
|---|---|
title, company, companySlug, companyLogo | Job title and employer. |
location, city, region, country, postalCode, address | Where the job is (country as a two-letter code). |
workplaceType, isRemote, hybridDescription | remote, hybrid or onsite, plus the office attendance note when given. |
department, function, industry, commitment, level | Department, job function, industry, employment type and experience level. |
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText | Pay range read from the job ad, when the employer publishes one. |
postedAt | Release date (ISO 8601, UTC). |
jobUrl, applyUrl | Public job page and direct apply link. |
refNumber, language, customFields | Requisition number, ad language and the employer's custom fields. |
descriptionText, sections, descriptionHtml | Full job ad as text, as titled sections, and as HTML. |
companyDescription, jobDescriptionText, qualificationsText, additionalText | Each job ad section on its own. |
id, uuid, jobAdId, source, scrapedAt | Identifiers and when the row was saved. |
Example (long texts shortened):
{
"id": "744000155548089",
"title": "Sr. iOS Software Engineer - Infrastructure Team",
"company": "LinkedIn",
"companySlug": "LinkedIn3",
"location": "Mountain View, CA, United States",
"city": "Mountain View",
"region": "CA",
"country": "US",
"workplaceType": "hybrid",
"isRemote": false,
"department": "Engineering",
"industry": "Internet",
"commitment": "Full-time",
"level": "Mid-Senior Level",
"refNumber": "REQ25428",
"language": "en",
"salaryMin": 129000,
"salaryMax": 212000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"salaryText": "The pay range for this role is $129,000 to $212,000.",
"postedAt": "2026-10-14T15:18:29.000Z",
"jobUrl": "https://jobs.smartrecruiters.com/LinkedIn3/744000155548089-sr-ios-software-engineer-infrastructure-team",
"applyUrl": "https://jobs.smartrecruiters.com/LinkedIn3/744000155548089-sr-ios-software-engineer-infrastructure-team?oga=true",
"customFields": [{ "label": "Employee Type", "value": "Employee" }],
"descriptionText": "Company Description\nLinkedIn is the world's largest professional network, ...",
"sections": [{ "title": "Qualifications", "text": "Basic Qualifications\n\n- BA/BS in Computer Science or related technical field ..." }],
"source": "smartrecruiters",
"scrapedAt": "2026-10-14T19:38:48.000Z"
}
You pay $1.00 per 1,000 saved jobs ($0.001 per job), full job ad included. Platform usage (compute and the default datacenter proxy) is billed separately and is small: in our tests 1,000 jobs with full descriptions took about 35 seconds and under 0.01 GB of datacenter traffic. Example: 1,000 jobs ≈ $1.00 in results plus less than one cent of usage. You are never charged for jobs that a filter drops.
Is it legal? The scraper reads only public job postings that employers publish for everyone through SmartRecruiters' public Posting API. No personal data about candidates is collected. Check your own use case against local law and the site's terms.
Do I need a login or a proxy? No login. The default datacenter proxy is enough.
How many results can I get? Every open job of each company you list (large employers have several thousand). SmartRecruiters has no public search across all companies, so list the companies you want.
How do I find a company's identifier? Open the company's job page on SmartRecruiters and copy the first part of the path, or just paste the whole URL. Companies that use their own career site domain still have an identifier in the SmartRecruiters links of their job ads.
Why is a salary field empty? SmartRecruiters has no structured pay field, so the salary comes from the ad text. Many employers outside pay-transparency regions do not publish pay at all.
Can I schedule it or use the API? Yes. Schedule runs (for example daily with postedWithinDays: 1) and read results through the API or integrations.
salaryText for the original wording.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.
companiesarrayOptionalCompanies (identifiers or SmartRecruiters URLs)
SmartRecruiters company identifiers (the part after careers.smartrecruiters.com/ or jobs.smartrecruiters.com/, like ServiceNow) or any SmartRecruiters link: a career page (https://careers.smartrecruiters.com/Ubisoft2), a jobs page, a single job page (https://jobs.smartrecruiters.com//-) or an api.smartrecruiters.com postings URL. Identifiers are not case-sensitive.
maxResultsintegerOptionaldefault 20Max results
Maximum number of jobs to save across all companies. Use 0 for no limit (up to 100,000).
All filters are optional and combine with AND. Within one filter, any listed value matches. Matching ignores case.
keywordsarrayOptionalKeywords
Keep jobs whose title contains any of these words or phrases (word-start match, so engineer also matches engineering). Each keyword is also sent to the SmartRecruiters search, so filtered runs stay fast.
searchInDescriptionbooleanOptionaldefault falseAlso search keywords in the description
Keep every job that SmartRecruiters' full-text search returns for the keyword, including matches in the job ad text, not only in the title.
excludeKeywordsarrayOptionalExclude keywords
Drop jobs whose title contains any of these words, for example intern or senior.
countriesarrayOptionalCountries
Keep jobs in these countries. Two-letter codes (US, DE, GB) are searched on SmartRecruiters directly; full names (Germany) are matched against the job location.
locationsarrayOptionalLocations
Keep jobs in any of these places (city, state or region, country). Matched as whole words against the job's location, for example London, CA, Bavaria, Remote.
workplaceTypesarrayOptionalWorkplace type
Keep only remote, hybrid or on-site jobs. Leave empty for all.
departmentsarrayOptionalDepartments or functions
Keep jobs whose department or job function contains any of these words, for example Engineering, Sales, Marketing.
commitmentsarrayOptionalEmployment type
Keep jobs whose employment type contains any of these words, for example Full-time, Part-time, Contract, Intern, Temporary.
experienceLevelsarrayOptionalExperience level
Keep jobs whose experience level contains any of these words, for example Entry, Associate, Mid-Senior, Director, Executive, Internship.
languagesarrayOptionalJob ad languages
Keep job ads written in these languages, as two-letter codes (en, de, fr).
postedWithinDaysintegerOptionalPosted within the last N days
Keep jobs released in the last N days. Leave empty for any date.
onlyWithSalarybooleanOptionaldefault falseOnly jobs with a salary
Keep only jobs whose ad states a pay range or rate (read from the job ad text).
maxResultsPerCompanyintegerOptionaldefault 0Max results per company
Cap the number of jobs saved per company, so one large employer does not use up the whole limit. 0 means no per-company cap.
includeDescriptionbooleanOptionaldefault trueInclude job descriptions
Open each job ad and save the full description (company, job, qualifications and additional information sections), apply link and the salary parsed from the ad. Turn off for a faster, lighter metadata-only dataset.
includeHtmlbooleanOptionaldefault trueInclude description HTML
Also save the description as HTML, ready to display. Needs job descriptions to be on.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are the default and work well for SmartRecruiters' public job API.
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 | SmartRecruiters posting id |
| title | string | Job title |
| company | string | Employer name |
| companySlug | string | SmartRecruiters company identifier |
| companyLogo | string | null | Logo image from the company's career page |
| location | string | null | Location as shown on the job |
| allLocations | array | All locations of the job |
| city | string | null | City |
| region | string | null | State, province or region |
| country | string | null | Two-letter country code |
| postalCode | string | null | Postal code |
| address | string | null | Street address when published |
| latitude | number | null | Latitude when published |
| longitude | number | null | Longitude when published |
| workplaceType | string | null | remote, hybrid or onsite |
| isRemote | boolean | True when the job is fully remote |
| hybridDescription | string | null | Office attendance note for hybrid jobs |
| department | string | null | Department |
| function | string | null | Job function |
| industry | string | null | Industry |
| commitment | string | null | Employment type |
| level | string | null | Experience level |
| refNumber | string | null | Employer's requisition number |
| language | string | null | Language of the job ad |
| salaryMin | number | null | Lowest pay, parsed from the job ad |
| salaryMax | number | null | Highest pay, parsed from the job ad |
| salaryCurrency | string | null | Pay currency |
| salaryPeriod | string | null | hour, day, week, month or year |
| salaryText | string | null | The sentence the pay was read from |
| postedAt | string | null | Release date (ISO 8601, UTC) |
| jobUrl | string | Public job page |
| applyUrl | string | Direct apply link |
| customFields | array | Employer-defined fields (label and value) |
| uuid | string | null | Posting UUID |
| jobAdId | string | null | Job ad id |
| source | string | Always smartrecruiters |
| descriptionText | string | null | Full job ad as plain text |
| sections | array | null | Job ad sections (title and text) |
| companyDescription | string | null | Company description section |
| jobDescriptionText | string | null | Job description section |
| qualificationsText | string | null | Qualifications section |
| additionalText | string | null | Additional information section |
| descriptionHtml | string | null | Full job ad as HTML |
| scrapedAt | string | 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 SmartRecruiters job posting. | $0.001 |
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/smartrecruiters-jobs-scraper').call({
"companies": [
"ServiceNow",
"https://careers.smartrecruiters.com/Ubisoft2"
],
"maxResults": 20,
"keywords": [],
"excludeKeywords": [],
"countries": [],
"locations": [],
"departments": [],
"commitments": [],
"experienceLevels": [],
"languages": [],
"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/smartrecruiters-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/smartrecruiters-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.
Jobs from two companies filtered by keyword.
Job list with plain text descriptions.
Jobs from a SmartRecruiters careers URL.
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.