York CVS Jobs Scraper avatar

York CVS Jobs Scraper

Pricing

from $1.99 / 1,000 results

Go to Apify Store
York CVS Jobs Scraper

York CVS Jobs Scraper

Scrape yorkcvs.livevacancies.co.uk — Vue SPA hosted by hireful, but NO browser needed. Actor reverse-engineered the public JSON API. Each row: title, salary, location, full description HTML, ISO closing date, region, contract type, hours. JSON or CSV out.

Pricing

from $1.99 / 1,000 results

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Scrape the York CVS jobs board at yorkcvs.livevacancies.co.uk — even though it's a Vue SPA. No browser automation needed. The actor reverse-engineered the hireful SaaS bundle and hits the public JSON API directly with a single HTTP call. Each row carries title, salary, location, full description HTML, ISO closing date, region, contract type, hours, employer brand info, and PDF attachments. JSON or CSV out, no compute charge per run, just per result.

How it works

How York CVS Scraper works

✨ Why use this scraper?

York CVS hosts its job board through hireful — a SaaS Applicant Tracking System with a Vue SPA front-end. Tracking who's hiring at York-area charities? Building a North Yorkshire voluntary-sector dashboard? Want a structured feed without firing up a headless browser?

  • 🚀 No browser, no Playwright. We reverse-engineered hireful's SPA bundle and found the public JSON API: https://api.core-easywebats.com/v1/job/all. The only auth is the Origin header — the API maps Origin → company internally.
  • One HTTP call, full payload. The list endpoint returns EVERY job with EVERY field (title, salary, location, full description HTML, ISO closing date, region, contract type, hours, employer brand info, PDF attachments) — no per-job detail fetch needed.
  • 🎯 Two starting points. The hireful API URL directly, or any yorkcvs.livevacancies.co.uk SPA URL (auto-redirected to the API).
  • 🆔 Stable identifiers. Both job_number (sequential) and id (UUID) preserved per row.
  • 🇬🇧 York / North Yorkshire focus. Social prescribers, support workers, project coordinators — charity-sector roles at York-area orgs.
  • 📤 Clean exports. One row per vacancy with all fields inline. JSON + CSV exported automatically.

🎯 Use cases

TeamWhat they build
York-area CVS networkCross-borough nonprofit hiring intelligence
Social-care recruitersDaily new-vacancy feeds for York charity sector
ResearchersYork labour-market datasets across charity / public-sector roles
Workforce strategySalary intelligence with structured {currency, min, max}
ATS / aggregator buildershireful-API integration reference (any livevacancies.co.uk tenant works with the same pattern, just swap the Origin header)

📥 Supported inputs

URL patternBehaviour
https://api.core-easywebats.com/v1/job/allDirect API call (default)
https://yorkcvs.livevacancies.co.uk/SPA root — auto-routes to the API call
https://yorkcvs.livevacancies.co.uk/#/jobs/<number>SPA detail URL — also routes to the full list (and the row matching <number> is included)

Leave startUrls empty for the default.

Not supported: other hireful tenants (the actor is wired to York CVS's Origin specifically — drop us an email if you want a different tenant).

🔄 How it works

  1. Send GET to https://api.core-easywebats.com/v1/job/all with:
    • Origin: https://yorkcvs.livevacancies.co.uk
    • Referer: https://yorkcvs.livevacancies.co.uk/
  2. Parse the JSON array — every job is a complete record (no pagination, no detail fetch).
  3. For each item, normalise into our standard JobRecord shape:
    • Concat description[].description blocks → single HTML body
    • Parse salary string → {currency, min, max, raw}
    • Extract apply email/URL from description body via regex
  4. Push one row per job to the dataset.

⚙️ Input parameters

ParameterTypeDefaultDescription
startUrlsarray["https://api.core-easywebats.com/v1/job/all"]Hireful API URL or any yorkcvs.livevacancies.co.uk URL. Empty = default.
postedWithinHoursinteger(none)Only return rows posted in the last N hours (24 = last day, 72 = last 3 days). Empty/0 = all. Ideal for daily monitoring runs that only want fresh postings.
maxItemsinteger1000Hard cap on rows pushed.
maxConcurrency / minConcurrencyinteger5 / 1Reserved — single-call design.
maxRequestRetriesinteger5Retries before the API call is given up.
proxyobjectNo proxyAPI has no anti-bot — proxy optional.

📊 Output overview

Each scraped vacancy is one single dataset row of type: "job". No detail-page enrichment needed — the hireful list endpoint is the data source AND the detail source.

📦 Output sample

{
"type": "job",
"source": "yorkcvs.livevacancies.co.uk",
"sourceProvider": "hireful",
"jobId": "22",
"jobUuid": "160de6e5-b0f9-4b21-bfbb-9c5df157283f",
"slug": "22",
"jobUrl": "https://yorkcvs.livevacancies.co.uk/#/jobs/22",
"apiUrl": "https://api.core-easywebats.com/v1/job/22",
"title": "Social Prescriber – Respiratory - COPD",
"description": "<p><strong>Job Role: Social Prescriber</strong></p><p>…</p>",
"descriptionText": "Job Role: Social Prescriber\nProject: Respiratory - COPD\n…",
"companyId": "83252488-8c92-49cc-95ea-ecc0ebf13fbc",
"companyName": null,
"location": "York",
"city": "York",
"county": null,
"country": "United Kingdom",
"region": "Yorkshire and the Humber",
"internalRegion": null,
"salary": {
"currency": "GBP",
"min": 29768,
"max": 29768,
"raw": "£29,768"
},
"salaryRaw": "£29,768",
"contractType": null,
"hours": "37",
"department": null,
"positions": "1",
"categories": [],
"employmentTypes": [],
"status": "publish",
"postedDate": "2026-04-12T09:00:00.000Z",
"closingDate": "2026-06-02T17:00:00.000Z",
"modifiedDate": "2026-05-15T14:22:00.000Z",
"applyType": "email",
"applyUrl": "https://yorkcvs.livevacancies.co.uk/#/jobs/22",
"applyEmail": "socialprescribing@yorkcvs.org.uk",
"externalApplyUrl": null,
"customApplyUrl": null,
"brandInfo": { },
"jobFiles": [],
"customFields": { "string": {}, "integer": {} },
"scrapedAt": "2026-05-22T19:42:00.000Z"
}

🗂 Key output fields

GroupFields
Identifierstype, source, sourceProvider (hireful), jobId (numeric ref), jobUuid (hireful UUID), slug, jobUrl, apiUrl, scrapedAt
Contenttitle, description (HTML), descriptionText (plain)
DatespostedDate (ISO), closingDate (ISO), modifiedDate (ISO)
EmployercompanyId, companyName, brandInfo (raw block), companyLogoUrl (when in jobFiles)
Locationlocation, addressLine1, addressLine2, city, county, country, region, internalRegion
Compensationsalary.{currency, min, max, raw}, salaryRaw, hours
Work patterncontractType, hours, positions, department
Apply flowapplyType, applyUrl (SPA URL), applyEmail, externalApplyUrl, customApplyUrl
hireful-specificjobFiles[] (PDF attachments), customFields.{string,integer} (recruiter-defined fields)

❓ FAQ

Wait — no browser? How? The hireful SaaS bundles a Vue SPA that talks to a public JSON API. The bundle's URL-template strings revealed the API base (api.core-easywebats.com) and the list path (v1/job/all). The API authenticates by the request's Origin header — when we send Origin: https://yorkcvs.livevacancies.co.uk, it returns York CVS's jobs.

Why is companyName sometimes null? hireful doesn't enforce company_name in brand_info — it's an optional recruiter-side label. The description HTML almost always names the employer in the body. Use companyId (UUID) as the stable join key.

Could you scrape other hireful tenants? Yes — every {tenant}.livevacancies.co.uk site uses the same API + the same Origin-based auth. Drop us an email to wire up a different tenant.

Can I scrape private pages or applicant data? No. The actor only hits the public job-listing endpoint that any visitor's browser would fetch.

How do I limit results? Set maxItems. Currently only 1 vacancy is live; the cap mostly matters for tenants with high volumes.

💬 Support

🛠 Additional services

  • Custom output shape, additional fields, or one-off datasets: muhamed.didovic@gmail.com
  • Build a similar actor for any other *.livevacancies.co.uk tenant (one-day turnaround): drop an email.
  • For API access (no Apify fee, just usage): muhamed.didovic@gmail.com

🔎 Explore more scrapers

See other scrapers at memo23's Apify profile — covering job boards, real estate, social media, and more.


⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by York CVS, hireful, EasyWebats Ltd, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only the publicly available JSON API endpoint that the hireful SPA itself calls — no authenticated endpoints, recruiter-only features, or content behind a login. Users are responsible for ensuring their use complies with yorkcvs.livevacancies.co.uk's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organisation.


SEO Keywords

york cvs scraper, scrape yorkcvs.livevacancies.co.uk, hireful api scraper, hireful jobs api, livevacancies.co.uk scraper, livevacancies api, easywebats api scraper, york charity jobs scraper, north yorkshire voluntary sector jobs api, Apify york cvs, vue spa scraper without browser, spa scraper without playwright, reverse-engineered job board api, charityjob alternative scraper, communityfirstyorkshire alternative scraper, vassheffield alternative scraper, uk cvs jobs scraper, hireful tenant scraper, ats api scraper, third sector jobs api