Goodmoves Jobs Scraper avatar

Goodmoves Jobs Scraper

Pricing

Pay per event

Go to Apify Store
Goodmoves Jobs Scraper

Goodmoves Jobs Scraper

Scrape public Goodmoves charity and nonprofit job vacancies. Export titles, employers, salaries, locations, dates, apply links, descriptions and organisation metadata.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Scrape public Scottish charity and nonprofit job vacancies from Goodmoves.org.

Goodmoves Jobs Scraper turns Goodmoves search pages, browse pages, organisation pages, and direct vacancy URLs into clean structured job data.

It is built for recruiters, charity operations teams, labour-market researchers, salary benchmarkers, and automation teams that need Goodmoves data in CSV, JSON, Excel, Google Sheets, dashboards, or an API pipeline.

What does Goodmoves Jobs Scraper do?

It collects public vacancy data from Goodmoves.

It saves one dataset row per vacancy.

It can start from a Goodmoves URL that you already use in your browser.

It can also build a simple search URL from keywords and location.

It extracts listing-card fields and, when enabled, opens each vacancy detail page for richer data.

Who is it for?

🧑‍💼 Recruiters use it to monitor Scottish charity-sector hiring.

📊 Salary analysts use it to compare pay bands across employers and locations.

🏢 Nonprofit leaders use it to track competing vacancies and closing dates.

🧑‍🔬 Researchers use it to build repeatable labour-market datasets.

🤖 Automation teams use it to feed alerts, spreadsheets, CRMs, or BI tools.

Why use it?

Goodmoves is a focused source for charity, nonprofit, social care, housing, youth, fundraising, policy, and third-sector vacancies in Scotland.

Manual copying is slow.

Search results change frequently.

Vacancy pages contain useful structured metadata such as JobPosting JSON-LD.

This actor lets you schedule the same search and export normalized vacancy rows.

What data can it extract?

FieldDescription
vacancyIdGoodmoves vacancy identifier when visible
titleVacancy title
employerHiring organisation
salaryRaw salary text
salaryMin / salaryMaxParsed salary bounds from JSON-LD when available
locationPublic location text or address fields
workplaceTypeHybrid, remote, onsite, or related text when visible
employmentTypeFull time, part time, contract, or similar
postedDateAdvertised date from vacancy metadata
closingDateClosing date/time
detailUrlGoodmoves vacancy URL
applyUrlPublic apply URL when exposed
applyEmailPublic apply email when exposed
descriptionHtmlDescription HTML
descriptionTextClean description text
organisationProfileUrlGoodmoves organisation profile URL
organisationWebsitePublic organisation website when exposed
oscrCharityNumberScottish charity number when exposed
categoriesIndustry/category tags from JobPosting metadata
sourceUrlListing/search URL that produced the row
scrapedAtTimestamp for the scrape

How much does it cost to scrape Goodmoves jobs?

This Actor uses pay-per-event pricing.

There is a small $0.005 run start event and a per-vacancy event.

Apify plan tierPrice per vacancyApprox. cost per 1,000 vacancies
Free$0.00023286$0.23
Bronze$0.00020249$0.20
Silver$0.00015794$0.16
Gold$0.00012149$0.12
Platinum$0.000080996$0.08
Diamond$0.000056697$0.06

Small test runs are inexpensive because you can keep maxItems low.

How to scrape Goodmoves jobs

  1. Open a Goodmoves search page in your browser.

  2. Copy the URL.

  3. Paste it into startUrls.

  4. Set maxItems to the number of vacancies you need.

  5. Keep includeDetails enabled if you want descriptions, posted dates, apply metadata, and organisation fields.

  6. Run the actor.

  7. Export the dataset as CSV, JSON, Excel, or via API.

Input options

startUrls

Goodmoves search, browse, organisation, location, or direct vacancy URLs.

Examples:

  • https://goodmoves.org/search?keywords=fundraising
  • https://goodmoves.org/search?keywords=policy
  • https://goodmoves.org/vacancy/a4sP1000001jSh7IAE/fundraising-communications-manager

keywords

Optional keyword text.

The actor builds a Goodmoves search URL for you.

location

Optional location text.

Use this when you want the actor to build a Goodmoves search URL.

maxItems

Maximum vacancy rows to save.

Use a small value for your first run.

maxPages

Maximum listing pages to scan.

This prevents accidental large crawls.

includeDetails

When true, the actor opens each vacancy page for full detail extraction.

Example input

{
"startUrls": [
{ "url": "https://goodmoves.org/search?keywords=fundraising" }
],
"maxItems": 25,
"maxPages": 3,
"includeDetails": true
}

Example output

{
"vacancyId": "a4sP1000001jSh7IAE",
"title": "Fundraising & Communications Manager",
"employer": "The Rock Trust",
"salary": "£38,716 – £43,600",
"location": "Edinburgh North and Leith, City of Edinburgh, EH1 3QY",
"employmentType": "Full time",
"postedDate": "2026-05-27T14:43:12",
"closingDate": "2026-06-10T22:59:00",
"detailUrl": "https://goodmoves.org/vacancy/a4sP1000001jSh7IAE/fundraising-communications-manager",
"descriptionText": "Mission Statement...",
"sourceUrl": "https://goodmoves.org/search?keywords=fundraising",
"scrapedAt": "2026-06-06T10:00:00.000Z"
}

Tips for best results

Use Goodmoves URLs for advanced filters.

Keep includeDetails on for richer data.

Increase maxPages only when you need deeper result sets.

Schedule recurring runs for market monitoring.

Export CSV when sharing results with recruiting or operations teams.

Integrations

Send vacancies to Google Sheets for weekly hiring dashboards.

Load JSON into a data warehouse for salary benchmarking.

Trigger alerts when new jobs match fundraising, policy, finance, or support-worker keywords.

Connect the Apify dataset API to a CRM or Airtable base.

Use webhooks to start downstream workflows after each run.

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/goodmoves-jobs-scraper').call({
startUrls: [{ url: 'https://goodmoves.org/search?keywords=fundraising' }],
maxItems: 25,
maxPages: 3,
includeDetails: true,
});
console.log(run.defaultDatasetId);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient('MY-APIFY-TOKEN')
run = client.actor('automation-lab/goodmoves-jobs-scraper').call(run_input={
'startUrls': [{'url': 'https://goodmoves.org/search?keywords=fundraising'}],
'maxItems': 25,
'maxPages': 3,
'includeDetails': True,
})
print(run['defaultDatasetId'])

API usage with cURL

curl -X POST 'https://api.apify.com/v2/acts/automation-lab~goodmoves-jobs-scraper/runs?token=MY-APIFY-TOKEN' \
-H 'Content-Type: application/json' \
-d '{"startUrls":[{"url":"https://goodmoves.org/search?keywords=fundraising"}],"maxItems":25,"maxPages":3,"includeDetails":true}'

MCP usage

Use this actor from Claude Desktop, Claude Code, or another MCP client through Apify MCP.

MCP URL:

https://mcp.apify.com/?tools=automation-lab/goodmoves-jobs-scraper

Claude Code setup:

$claude mcp add apify-goodmoves "https://mcp.apify.com/?tools=automation-lab/goodmoves-jobs-scraper"

Claude Desktop JSON config:

{
"mcpServers": {
"apify-goodmoves": {
"url": "https://mcp.apify.com/?tools=automation-lab/goodmoves-jobs-scraper"
}
}
}

Example prompts:

  • "Run the Goodmoves Jobs Scraper for fundraising vacancies and summarize salary bands."
  • "Find Goodmoves policy jobs in Edinburgh and export the dataset URL."
  • "Compare employers and closing dates from the latest Goodmoves scrape."

Scheduling

Create a schedule in Apify Console for recurring monitoring.

A daily or weekly schedule is useful for job-board changes.

Keep maxItems aligned with the volume you expect.

Data quality notes

Goodmoves pages vary by employer and vacancy.

Some jobs expose apply email, some expose only an external apply URL, and some route through Goodmoves.

OSCR charity numbers are saved only when visible in public page content.

Salary min and max are parsed from structured metadata when available.

FAQ

Can I scrape any Goodmoves search URL?

Yes. Paste a public Goodmoves search, browse, organisation, location, or vacancy URL into startUrls.

Does this actor need a proxy?

No proxy is configured for the MVP because Goodmoves returns public server-rendered HTML to normal HTTP requests.

Does it return one row per job?

Yes. Organisation metadata is merged into the vacancy row so CSV exports remain easy to use.

Troubleshooting

Why did I get fewer rows than maxItems?

The Goodmoves query may have fewer public vacancies, or maxPages may be too low.

Increase maxPages or provide a broader search URL.

Why are apply fields empty?

Some vacancies do not publish a direct apply email or external apply URL in public HTML.

The actor leaves those fields null instead of guessing.

Why is the location different from the visible card?

Detail pages may expose richer structured address fields than listing cards.

The actor prefers structured detail metadata when includeDetails is enabled.

Legality

This actor extracts publicly available Goodmoves pages.

You are responsible for using the data lawfully and respecting applicable terms, privacy rules, and data-protection obligations.

Do not scrape private accounts or use the data for prohibited purposes.

Explore other automation-lab actors for recruiting, jobs, lead generation, company data, and web monitoring.

Use related Apify actors when you need LinkedIn Jobs, Indeed-style job boards, company websites, or broader lead discovery.

Changelog

Initial version supports Goodmoves search/listing/direct vacancy URLs, keyword and location filters, pagination limits, vacancy detail enrichment, and one-row-per-job output.