SmartRecruiters Job Scraper — Visa, Tesla & McDonald's API avatar

SmartRecruiters Job Scraper — Visa, Tesla & McDonald's API

Pricing

from $1.45 / 1,000 jobs

Go to Apify Store
SmartRecruiters Job Scraper — Visa, Tesla & McDonald's API

SmartRecruiters Job Scraper — Visa, Tesla & McDonald's API

Scrape job postings from any SmartRecruiters-powered company board via the public API. Get title, location, seniority, remote_type, department, employment_type, descriptions, and parse_confidence. Multi-company batch, keyword filters, zero auth, zero proxy.

Pricing

from $1.45 / 1,000 jobs

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

3

Monthly active users

4 days ago

Last modified

Share

For enterprise talent teams and job aggregators scraping Fortune 500 companies that use SmartRecruiters — Visa, Tesla, McDonald's, CEVA Logistics, and thousands more.

Pay per result — $1.50 / 1,000 jobs. Official API. No proxy. No login. No browser. Batch mode for 100+ companies.

Scrape job postings from any SmartRecruiters-powered company careers page. Returns structured job data — title, location, seniority, remote type, department, employment type, descriptions, and parse_confidence — via the official zero-auth SmartRecruiters public API.

What you get

FieldDescription
titleJob title
companyCompany slug used to fetch
locationFull location string (city, region, country)
remote_typeremote / hybrid / onsite / null (from API flags)
seniorityInferred: executive / vp / director / manager / principal / staff / lead / senior / entry / intern / mid
salarynull — SmartRecruiters public API does not expose salary
departmentDepartment or function label
employment_typeFull-time / Part-time / Contract / etc.
posted_atISO-8601 release date
urlCanonical job posting URL
apply_urlDirect apply URL
job_idSmartRecruiters internal job ID
global_idStable dedup key: smartrecruiters:<company>:<job_id>
description_textPlain-text description (when includeDescriptions=true)
description_htmlHTML description — jobDescription + qualifications + additionalInformation sections
parse_confidenceFloat 0–1: data quality signal. 1.0 = all expected fields present
warningsList of machine-readable quality codes (empty when confidence=1.0)
scraped_atISO-8601 scrape timestamp

Why this scraper

  • Official API, zero proxy — SmartRecruiters public API is open and stable; no browser automation, no residential proxy cost, no bans.
  • Seniority enrichment — 11-level title-regex classification with SmartRecruiters native experienceLevel as fallback.
  • Authoritative remote_type — reads the structured location.remote and location.hybrid boolean flags, not just text keywords.
  • parse_confidence — every record carries a data-quality score so you can filter or alert on drift without manual inspection.
  • Batch + filter — scrape 10, 100, or 1000 companies in one run with keyword and remote filters applied server-side.

Input

{
"companies": ["Ubisoft2", "ServiceNow", "Experian"],
"titleKeyword": "engineer",
"locationKeyword": "Austin",
"remoteOnly": false,
"maxJobsPerCompany": 50,
"includeDescriptions": false
}

Finding the slug: the slug is the company identifier in the SmartRecruiters URL. For jobs.smartrecruiters.com/Visa the slug is Visa. Slugs are case-sensitive — use the exact casing from the URL.

includeDescriptions: disabled by default because descriptions require one extra API call per job. Enable only when you need full text for AI/NLP pipelines.

Pricing

Pay-per-result: $1.50 / 1,000 jobs ($0.0015 per record). You pay only for jobs returned — nothing for companies that come back empty.

Worked example: 3 companies × 50 jobs = 150 results = $0.23. 20 companies × 100 jobs = 2,000 results = $3.00.

Output sample

{
"title": "Senior Software Engineer",
"company": "Visa",
"location": "Austin, Texas, United States of America",
"remote_type": null,
"seniority": "senior",
"department": "Engineering",
"employment_type": "Full-time",
"posted_at": "2026-05-01T00:00:00+00:00",
"url": "https://jobs.smartrecruiters.com/Visa/12345678-senior-software-engineer",
"job_id": "12345678",
"global_id": "smartrecruiters:Visa:12345678",
"parse_confidence": 1.0,
"warnings": []
}

FAQ

Do I need an API key or proxy? No. SmartRecruiters' public careers API is open — no auth, no proxy cost, no bans.

What output formats are available? JSON, JSONL, CSV, and Excel via the Apify dataset export, plus the Apify REST API.

Can I schedule daily runs? Yes — use Apify Scheduler. Use global_id (smartrecruiters:<company>:<job_id>) as a stable key for deduplication across runs.

What if includeDescriptions is enabled and a job returns no description? The actor still pushes the job — description fields are null and parse_confidence is slightly reduced. The run never crashes on missing optional data.

Vs competitor comparison

FeatureThis scraperTypical SmartRecruiters scrapers
parse_confidence scoreYesNo
Seniority enrichment (11 levels + native experienceLevel fallback)YesRarely
Remote type from native API flags (not text parsing)YesNo
Multi-company batchYesSome
Employment type fieldYesSome
Price$1.50/1kvaries

parse_confidence (0.0–1.0) and warnings in every record — data quality signal so your pipeline detects schema drift before output breaks.

Note on includeDescriptions: disabled by default because SmartRecruiters descriptions require one extra API call per job (unlike most ATS platforms where descriptions are inline). Enable only when you need full text for AI/NLP pipelines.

Use with AI agents (MCP)

This actor is MCP-compatible. Use it as a data source in n8n, Make, or any LLM agent pipeline.

https://mcp.apify.com/?tools=bovi/smartrecruiters-job-scraper

The flat schema with global_id (smartrecruiters:<company>:<job_id>) is drop-in-ready for vector databases, job-matching LLMs, and automated sourcing workflows. Need Greenhouse, Lever, Ashby, Recruitee and Personio in the same pipeline? Use the flagship Multi-ATS Job Scraper — 6 ATS, one unified schema.

Integrations

Built for enterprise talent teams and job aggregators scraping Fortune 500 hiring pipelines at scale — the JSON/dataset output drops into the tools you already run, no glue code:

  • n8n / Make / Zapier — trigger a run or pipe every new dataset item into 500+ apps (Google Sheets, Airtable, Slack, HubSpot, your database) with no code: n8n, Make, Zapier.
  • Webhooks — fire your own endpoint the moment a run finishes, to push results straight into your pipeline (docs).
  • MCP server — expose this actor as a tool to Claude, Cursor, or any MCP client so an AI agent can pull this data mid-conversation (guide).
  • API & SDKs — fetch the dataset as JSON, CSV, or Excel through the Apify REST API or the Python / JS SDKs.

See all Apify integrations.

Not affiliated with SmartRecruiters

This actor uses the publicly accessible SmartRecruiters careers API. It is not endorsed by or affiliated with SmartRecruiters Inc.

Usage statistics

This Actor creates a small, content-free summary at the end of each run. It is used only to monitor reliability and improve this Actor. A copy is saved as USAGE_STATS in your own Apify key-value store, so you can see the exact record created for your run.

Set disableUsageStats to true in the input to opt out. Nothing is sent then; your USAGE_STATS record only says that statistics were disabled.

Only these fields are recorded:

  • schema version, Actor name and build number;
  • UTC start and finish hour (not a precise timestamp);
  • run duration, number of results and time to the first result, each as a coarse range;
  • whether the result was empty, the end status, and an error type from a fixed list;
  • memory setting and counts of charged events;
  • names of the input fields you set, never their values;
  • the selected option for input fields that offer a fixed list of choices (for example a sort order).

We do not collect input text, search terms, URLs, domains, usernames, email addresses, names, proxy credentials, tokens, scraped records, output items, raw error messages, stack traces, or hashes of any of those values. Records are kept for no longer than 13 months, used only as aggregated operational statistics, and never sold or shared.

Additional fields (Phase 2)

This Actor also records your Apify user ID, whether Apify marks the account as paying, the size range of list inputs, the selected country when the input offers a fixed list of countries, and one category from a fixed Actor taxonomy. We use these fields only for aggregate reliability, repeat-use and cross-Actor analysis; reports suppress any cell with fewer than five distinct users.

The same disableUsageStats: true input flag turns these fields off too. The user ID is removed after 13 months; we do not export, sell, share, or attempt to re-identify this data.

Run-outcome signals (v2)

To learn whether a run did what it was asked to do, the record also holds a few more coarse ranges and yes/no flags. None of them contains content:

  • the result limit you asked for (a range, when the input has one) and what share of it was delivered;
  • results delivered per input item you listed (a range);
  • output quality as ranges: how fully the result fields were filled, the share of rows that look like errors, the share of duplicate rows, and how many different fields appeared. These are counted in memory while results are saved; no result content is kept;
  • how the run was started (console, API, schedule, webhook, another Actor);
  • how it ended: stopped by you, timed out, reached the requested limit, stopped by the charge limit, and how many times the platform moved the run;
  • if this Actor reports it: how many items to process worked or failed (ranges) and one failure reason from a fixed list;
  • a short code made from the names of the input fields you set, never their values.

Repeat-run fingerprint (v2)

When your Apify user ID is recorded (see above), the record also holds an 8-character one-way code made from your input (proxy settings left out) and this Actor's name. It only lets us see that the same account ran the same input again soon after an unsatisfying run; we never see the input itself. It is stored only in the database, never published, and reports use it in aggregate with the same five-user minimum. It is the one exception to the statement above that no hashes are collected, and disableUsageStats: true turns it off.