Goodmoves.org Jobs Scraper avatar

Goodmoves.org Jobs Scraper

Pricing

from $2.90 / 1,000 results

Go to Apify Store
Goodmoves.org Jobs Scraper

Goodmoves.org Jobs Scraper

Scrape Scottish charity-sector job postings from Goodmoves.org — title, salary, workplace type, employer, posted/closing dates with time, full description, real lat/lng coordinates, OSCR charity number and apply email or apply URL. Works with any listing or vacancy URL. JSON or CSV out.

Pricing

from $2.90 / 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

Share

Goodmoves.org Scraper

Turn Goodmoves.org into structured Scottish charity-sector job data. Scrape every vacancy from any Goodmoves listing URL — title, salary band, workplace type, employer, posted/closing dates with time, full description, location with real lat/long coordinates, OSCR charity number, apply email + apply URL — straight out of the page. JSON or CSV out, no compute charge per run, just per result.

How it works

How Goodmoves Scraper works

✨ Why use this scraper?

Tracking Scottish third-sector hiring? Building salary benchmarks across SCVO-listed charities? Need a clean dataset of charity vacancies without scrolling Goodmoves manually?

  • 🎯 Two starting points. Paste a Goodmoves listing URL (/jobs-in/{location}, /search?..., /browse/...) or a direct vacancy URL — both classified automatically.
  • 📋 JSON-LD–backed accuracy. Title, salary, location, dates, employment type, full description, and the org's address all come from the page's application/ld+json block — same data Google reads.
  • 📍 Real coordinates, not just postcodes. Each row carries coordinates.latitude + coordinates.longitude parsed directly from the embedded map marker.
  • 🏛 OSCR charity numbers. Each row includes the Scottish Charity Register number (e.g. SC039119) — perfect for joining to OSCR's open dataset.
  • 📧 Apply email + apply URL captured. The "Application notes" section yields the recruiter's mailto and any outbound application page — no resolver step needed.
  • 🧰 No anti-bot, no auth, no pagination. A Goodmoves listing returns every match in one HTTP call. Listings + 80 vacancy pages typically scrape in well under a minute.
  • 📤 Clean exports. One row per vacancy with org enrichment merged in. No duplicate rows. JSON + CSV exported automatically.

🎯 Use cases

TeamWhat they build
Scottish recruitment / agenciesDaily new-vacancy feeds for the SCVO/Goodmoves audience, sliced by region or sector
Charity-sector analystsHiring-trend dashboards for Scotland's third sector
Compensation & benefitsSalary benchmarks for charity roles by region, contract type, and employer size
Talent acquisition (in-house)Competitive intelligence on what other Scottish charities are paying
Researchers / journalistsDatasets on workforce shifts in the Scottish voluntary sector
OSCR data joinersVacancy data joined to the Scottish Charity Register via oscrCharityNumber

📥 Supported inputs

You can pass two kinds of URL in startUrls. Each URL is classified automatically.

URL patternBehaviour
https://goodmoves.org/jobs-in/{location}Listing — extracts every vacancy link in one HTTP call (no pagination)
https://goodmoves.org/search?keywords=...&location=...Listing (search results)
https://goodmoves.org/browse/...Listing (any browse facet)
https://goodmoves.org/vacancy/{salesforce-id}/{slug}Vacancy detail — routed straight to the parser

Easiest workflow: apply your filters on goodmoves.org in the browser (location, sector, contract type, salary, workplace), copy the URL out of the address bar, paste into startUrls.

Not supported:

  • Organisation profile URLs as a starting point (they're fetched automatically as enrichment when org enrichment is on)
  • Hosts outside goodmoves.org / www.goodmoves.org

🔄 How it works

  1. Classify each startUrl as a listing URL or a single vacancy URL.
  2. Fetch each listing — Goodmoves returns every match on one page, so no pagination loop.
  3. Fetch each vacancy detail page in parallel via a global sliding window.
  4. Parse the JSON-LD JobPosting block for the bulk of structured data, and the page's "Application notes" section for the apply email + apply URL.
  5. Optionally enrich each unique organisation by fetching /organisation/{id}/{slug} once for the company website, domain, and OSCR charity number. Cached per slug — every job for that org reuses the same fetch.
  6. Push one merged row per vacancy to the dataset and export data.csv + data.json at the end.

⚙️ Input parameters

ParameterTypeDefaultDescription
startUrlsarray["https://goodmoves.org/jobs-in/glasgow"]Goodmoves listing URLs and/or vacancy URLs. Mix both freely.
enrichOrganisationbooleantrueFetch each unique organisation profile once for companyWebsite, companyDomain, and oscrCharityNumber. The vacancy JSON-LD already contains the company description, so disable this if you want maximum speed and don't need website/domain/OSCR.
maxItemsinteger1000Hard cap on jobs collected. Goodmoves listings often return 80+ vacancies in one page; this cap limits billing.
maxConcurrency / minConcurrencyinteger10 / 1Parallel HTTP request limits.
maxRequestRetriesinteger5Retries before a request is given up.
proxyobjectApify residentialApify proxy configuration. Goodmoves has no anti-bot, so a small pool (or no proxy) usually works.

📊 Output overview

Each scraped vacancy is one single dataset row of type: "job". When enrichOrganisation is true, the organisation's website, domain and OSCR charity number are merged into the same row — no separate organisation rows, so the dataset row count equals the job count exactly.

📦 Output sample

One merged row per vacancy (trimmed to the most useful fields):

{
"type": "job",
"jobId": "a4sP1000001g24rIAA",
"salesforceId": "a4sP1000001g24rIAA",
"jobUrl": "https://goodmoves.org/vacancy/a4sP1000001g24rIAA/head-of-communications",
"title": "Head of Communications",
"companyName": "Sistema Scotland",
"companyProfileUrl": "https://goodmoves.org/organisation/0010N000044qNHSQA2/sistema-scotland",
"organisationSlug": "sistema-scotland",
"logoUrl": "https://storage.googleapis.com/elasticsauce.appspot.com/goodmoves-files/...png",
"location": "Hybrid working between our Big Noise centres and home working ...",
"streetAddress": "Big Noise centre",
"postcode": "FK8 1RD",
"addressLocality": "Stirling",
"addressRegion": "Stirling",
"country": "Scotland",
"coordinates": { "latitude": 56.129547, "longitude": -3.945531 },
"workplaceType": "Hybrid",
"salary": {
"currency": "GBP",
"min": 50296,
"max": 54266,
"value": "£50296 – £54266 pro-rata",
"unit": "YEAR",
"raw": "£50,296 – £54,266 pro-rata"
},
"employmentType": ["Part time"],
"workHours": "(new staff start on the bottom point of the scale) 21 hours per week.",
"qualifications": null,
"responsibilities": null,
"skills": null,
"industry": ["Marketing/PR", "Communications"],
"occupationalCategory": ["Communications", "Marketing"],
"postedDate": "2026-04-27T13:51:34",
"closingDate": "2026-05-11T22:59:00",
"closingDateLabel": "Closing 11th May 2026",
"description": "Sistema Scotland's vision is to improve lives and strengthen communities... (full text)",
"applicationNotes": "<p>Please apply by ...</p> ... (HTML)",
"applyType": "email",
"applyUrl": "https://goodmoves.org/vacancy/a4sP1000001g24rIAA/head-of-communications",
"applyEmail": "recruitment@sistemascotland.org.uk",
"externalApplyUrl": "http://www.makeabignoise.org.uk/work-with-us",
"companyDescription": "Sistema Scotland is a registered charity working to transform...",
"companyHeadquarters": { "postcode": "FK8 1RD", "country": "Scotland" },
"companyWebsite": "https://www.makeabignoise.org.uk/sistema-scotland/",
"companyDomain": "makeabignoise.org.uk",
"oscrCharityNumber": "SC039119",
"ogImage": "https://storage.googleapis.com/elasticsauce.appspot.com/goodmoves-files/...png",
"scrapedAt": "2026-05-08T22:11:14.221Z"
}

🗂 Key output fields

GroupFields
Identifierstype, jobId / salesforceId (Goodmoves' own 18-char Salesforce ID), jobUrl, scrapedAt
Roletitle, description (plain text), applicationNotes (HTML), industry[], occupationalCategory[]
DatespostedDate (ISO datetime), closingDate (ISO datetime including time of day), closingDateLabel (human-readable)
EmployercompanyName, companyProfileUrl, organisationSlug, organisationSalesforceId, logoUrl
Locationlocation (display string), streetAddress, postcode, addressLocality, addressRegion, country, coordinates.{latitude,longitude}, workplaceType (On-site / Hybrid / Remote)
Compensationsalary.{currency,min,max,value,unit,raw}, employmentType[], workHours
Apply flowapplyType (email / external / unknown), applyUrl (the Goodmoves page), applyEmail (recruiter mailto when present), externalApplyUrl (recruiter site when present)
Company enrichment (merged into the same row when enrichOrganisation: true)companyDescription, companyWebsite, companyDomain, companyHeadquarters.{postcode,country}, oscrCharityNumber (Scottish Charity Register, e.g. SC039119)

❓ FAQ

Which Goodmoves URLs are supported? Listing URLs (/jobs-in/..., /search?..., /browse/...) and direct vacancy URLs (/vacancy/{id}/{slug}). Organisation pages used as starting points and any host outside goodmoves.org are skipped.

Why are most jobs applyType: "email" or "external" and never "internal"? Goodmoves doesn't host applications itself — every vacancy directs candidates either to the recruiter's email (most common in the Scottish charity sector) or to the recruiter's own careers page. The actor captures both.

What's oscrCharityNumber and where does it come from? It's the official Scottish Charity Register identifier (e.g. SC012838). Goodmoves links each org's profile to OSCR's register, and we extract the number from that link. You can join it to OSCR's open dataset for accreditation, financials, and trustees.

Do I need to paginate? No. Goodmoves returns every matching vacancy on a single listing page, so the actor makes one HTTP call per listing URL plus one per vacancy detail.

Can I scrape private pages or applicant data? No. The scraper accesses only publicly available pages — no logged-in content, no recruiter-only views, no candidate data.

How do I limit results? Set maxItems. The actor stops queuing new vacancies as soon as the cap is reached.

💬 Support

🛠 Additional services

  • Custom output shape, additional fields, or one-off datasets: muhamed.didovic@gmail.com
  • Need a similar scraper for other UK or regional job boards (CharityJob, S1 Jobs, TotalJobs, etc.)? Drop an email.
  • For API access (no Apify fee, just a usage fee for the API): muhamed.didovic@gmail.com

🔎 Explore more scrapers

If this Goodmoves Scraper was useful, see other scrapers and actors 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 Goodmoves, the Scottish Council for Voluntary Organisations (SCVO), or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available vacancy and organisation-profile pages on goodmoves.org — no authenticated endpoints, recruiter-only features, or content behind a Goodmoves login. Users are responsible for ensuring their use complies with goodmoves.org's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organisation.


SEO Keywords

goodmoves scraper, scrape goodmoves, goodmoves api, goodmoves.org scraper, Apify goodmoves, scottish charity jobs scraper, scotland charity jobs api, scvo jobs scraper, third sector scotland scraper, scottish nonprofit jobs data, charity sector scotland hiring data, scottish voluntary sector jobs, oscr charity register data, scottish charity jobs salary benchmark, scotland third sector recruitment, scottish nonprofit talent pipeline, scottish charity vacancies, glasgow charity jobs scraper, edinburgh charity jobs scraper, charityjob alternative scraper, s1 jobs alternative scraper