
Google Ads Scraper
scrape.ly/store/querystone/google-ads-scraperLead generationSEO tools
4 monthly users

Scrape faculty, staff and executive jobs from HigherEdJobs.com by keyword and the site's filters, or from search and job URLs. Get title, institution, location, salary range, category, position type, posting date, listing end date, apply link and the full description.
Scrape faculty, staff and executive job postings from HigherEdJobs.com, the higher-education job board for colleges and universities. Search by keyword or the site's own filters and get each job's title, institution, location, salary, category, posting date, listing end date, apply link and the full description, ready to export. No login, no API key, and 1,000 jobs cost about $1.
computer science, nursing, dean), or paste HigherEdJobs search or job URLs from your browser.| Field | What it does |
|---|---|
keywords | Job titles, disciplines or departments to search for; each keyword is its own search. |
startUrls | HigherEdJobs search URLs (keyword, category, remote or today's jobs pages) or job URLs; a bare JobCode works too. |
maxItems | Maximum jobs to save in the run (default 20, 0 = all). |
maxItemsPerSearch | Optional cap for each keyword or URL. |
includeDetails | Open each job page for the description, apply link, department and exact dates (default on). |
postedWithinDays | Only jobs posted in the last N days. |
categoryGroups | faculty, administrative, executive. |
categories | HigherEdJobs categories by name or number, e.g. Nursing, Computer Science, 116. |
positionTypes | full_time, part_time (adjunct / part-time). |
institutionTypes | four_year, two_year, outside_higher_ed. |
remoteOnly | Only online / remote jobs. |
states / countries | US states or Canadian provinces (CA, New York, ON) and institution countries (Saudi Arabia, China). |
titleOnly | Match keywords in job titles only. |
sortBy | newest (default), priority (site default), institution, location, title, category. |
{
"keywords": ["computer science"],
"categoryGroups": ["faculty"],
"positionTypes": ["full_time"],
"postedWithinDays": 7,
"maxItems": 100,
"includeDetails": true
}
One row per job posting.
| Field | Description |
|---|---|
jobId, url | HigherEdJobs JobCode and job page link. |
title, institution, department | Job title, hiring institution and department (when the posting names it). |
location, city, state, country, countryCode, remote | Where the job is (state for US and Canadian jobs, country name and ISO code); remote is true for online / remote jobs. |
category, categories, categoryGroup | HigherEdJobs categories and job type (Faculty, Administrative, Executive). |
positionType, employmentType | Full-Time or Adjunct/Part-Time, and FULL_TIME / PART_TIME. |
salary, salaryMin, salaryMax, salaryCurrency, salaryPeriod | Salary text as posted and the parsed range. |
postedDate, postedAt, postedText, expiresAt | Posting date, exact posting time (site time, US Eastern), the site's "Posted ..." label and the listing end date. |
applyUrl, applyEmail, institutionWebsite, logoUrl | Apply link (the employer's page, or the HigherEdJobs apply page), the application email when the posting gives one, institution website and logo. |
description, descriptionHtml | Full job description as text and HTML. |
highlights, industries | Site badges such as Priority, and the posting's industries. |
searchQuery, scrapedAt | The search that found the job and when it was scraped. |
Fields that need the job page (description, apply link, department, exact dates, position type) are empty when Include full job details is off.
Example row from a test run (description shortened):
{
"jobId": "179595284",
"title": "One Stop Navigator",
"institution": "Texas State University",
"location": "San Marcos, TX",
"city": "San Marcos",
"state": "TX",
"country": "United States",
"countryCode": "US",
"category": "Admissions and Enrollment",
"categories": ["Admissions and Enrollment", "Financial Aid"],
"categoryGroup": "Administrative",
"positionType": "Full-Time",
"employmentType": "FULL_TIME",
"remote": false,
"salary": "$3,833.33",
"salaryMin": 3833.33,
"salaryMax": null,
"salaryCurrency": "USD",
"salaryPeriod": null,
"department": "TXST One Stop",
"postedDate": "2026-10-21",
"postedAt": "2026-10-21T21:49:35",
"postedText": "Posted Today",
"expiresAt": "2028-04-13T23:59:59",
"institutionWebsite": "http://www.txstate.edu",
"logoUrl": "https://images.higheredjobs.com/images/AccountImages/9718_5.jpg",
"applyUrl": "https://apptrkr.com/9911748",
"url": "https://www.higheredjobs.com/search/details.cfm?JobCode=179595284",
"description": "San Marcos, TX\n\nTexas State University\n\nOne Stop Navigator\n\nPosting Number: 2027114\n\nLocation: San Marcos\n\nDepartment: TXST One Stop ...",
"industries": ["Academic/Education", "Education"],
"searchQuery": "history",
"scrapedAt": "2026-10-22T02:42:19.723Z"
}
$1.00 per 1,000 jobs ($0.001 per saved job). You pay only for jobs saved to the dataset; empty searches, removed jobs and failed pages are free.
Platform usage (compute and proxy traffic) is billed on top. In our tests a run of 1,000 jobs with full details used about $0.03 of platform usage, so 1,000 jobs ≈ $1.03 in total. Without job details it is even less.
Is it legal to scrape HigherEdJobs? The actor only collects job postings that anyone can see on higheredjobs.com without an account. Check the site's terms and your local rules for how you use the data.
Do I need an account, login or proxy? No account or login. The default proxy setting works; the actor handles the site's bot protection and moves to US residential exits by itself when needed.
How many jobs can I get? As many as the search matches; set Max jobs to 0 for all. A search without a keyword runs once per job type, so you can list every open job on the site (tens of thousands).
Why is a field empty? The posting does not give it (many jobs have no salary or department), or Include full job details is off. Salary period is only set when the posting says per year, month, hour, course or credit.
Can I schedule it or use it through the API? Yes. Schedule daily runs with Posted within (days) set to 1 for a feed of new jobs, and start runs or read datasets through the API.
I used a similar actor on another platform. Can I keep my input?
Mostly: keyword, category (1 faculty, 2 administrative, 3 executive), positionType, institutionType, remoteOnly, dateWithinDays, includeDescription, startUrls and maxItems are read too.
postedDate without job details comes from the site's "Posted N days ago" label, so it is a date, not a time.salary text.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.
keywordsarrayOptionalKeywords
Job titles, disciplines or departments to search for, one per line, e.g. computer science, nursing, dean, postdoctoral. Each keyword is a separate search. Leave empty to list all jobs that match the filters below.
startUrlsarrayOptionalHigherEdJobs search or job URLs
Pages copied from your browser: search results (https://www.higheredjobs.com/search/advanced_action.cfm?Keyword=nursing, category pages such as https://www.higheredjobs.com/faculty/search.cfm?JobCat=116, remote or today's jobs) or single jobs (https://www.higheredjobs.com/search/details.cfm?JobCode=179592979). A bare JobCode such as 179592979 works too. The filters below are added to search URLs.
maxItemsintegerOptionaldefault 20Max jobs
Maximum number of jobs to save in this run, across all keywords and URLs. 0 means all matching jobs.
maxItemsPerSearchintegerOptionalMax jobs per search
Optional cap for each keyword or search URL, so one broad keyword does not use up 'Max jobs'. Empty or 0 means no per-search cap.
includeDetailsbooleanOptionaldefault trueInclude full job details
Open each job page for the full description (text and HTML), exact posting time, listing end date, apply link, department, position type, institution website and logo. Turn off for a faster list of titles, institutions, locations, salaries and categories only.
postedWithinDaysintegerOptionalPosted within (days)
Only jobs posted in the last N days, e.g. 7 for the last week. Leave empty or 0 for any time. The run sorts newest first so it can stop early.
categoryGroupsarrayOptionalJob type
Only faculty, administrative (staff) or executive jobs. Empty means all.
categoriesarrayOptionalCategories
HigherEdJobs categories by name or number, e.g. Nursing, Computer Science, Academic Advising, Athletics - Coaching, 116. A partial name matches every category that contains it. Empty means all.
positionTypesarrayOptionalPosition type
Full-time or adjunct/part-time jobs. Empty means both.
institutionTypesarrayOptionalInstitution type
Four-year universities, two-year community colleges or employers outside higher education. Empty means all.
remoteOnlybooleanOptionaldefault falseOnline / remote jobs only
Only jobs HigherEdJobs lists as online or remote.
statesarrayOptionalUS states or Canadian provinces
2-letter codes or names, e.g. CA, New York, TX, ON. Use NN for institutions outside the US and Canada. Empty means all.
countriesarrayOptionalCountries
Institution countries as HigherEdJobs lists them, e.g. United States, Canada, China, Saudi Arabia, United Arab Emirates, Hong Kong, India. Empty means all.
titleOnlybooleanOptionaldefault falseMatch keywords in job titles only
Only jobs whose title contains the keyword, instead of the site's full-text match.
sortByenumOptionaldefault "newest"Sort by
Order of the results, as on the site.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Proxy used to reach HigherEdJobs. With the default datacenter exits, any request the site's bot protection refuses is retried at once on US residential exits, and the whole run moves there if refusals keep coming. Choose residential to use it for every request.
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 |
|---|---|---|
| jobId | string | null | |
| title | string | null | |
| institution | string | null | |
| location | string | null | |
| city | string | null | |
| state | string | null | |
| country | string | null | |
| countryCode | string | null | |
| category | string | null | |
| categories | array | null | |
| categoryGroup | string | null | |
| positionType | string | null | |
| employmentType | string | null | |
| remote | boolean | null | |
| salary | string | null | |
| salaryMin | number | null | |
| salaryMax | number | null | |
| salaryCurrency | string | null | |
| salaryPeriod | string | null | |
| department | string | null | |
| postedDate | string | null | |
| postedAt | string | null | |
| postedText | string | null | |
| expiresAt | string | null | |
| highlights | array | null | |
| institutionWebsite | string | null | |
| logoUrl | string | null | |
| applyUrl | string | null | |
| applyEmail | string | null | |
| url | string | null | |
| description | string | null | |
| descriptionHtml | string | null | |
| industries | array | null | |
| searchQuery | string | null | |
| scrapedAt | string | null |
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 HigherEdJobs job posting (full posting included when job details are on). | $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/higheredjobs-scraper').call({
"keywords": [
"computer science"
],
"maxItems": 20,
"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/higheredjobs-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/higheredjobs-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.
Keyword search with job type and position type filters, full job details
A HigherEdJobs category page pasted as a URL
Category, state and posting date filters
Remote-only filter with full job details
Institutions outside the US, filtered by country
No keyword; list mode without job pages, 50 jobs

Scrape Google Maps places for any search term and city, with no code or with one API call. A real run, its output, its log and its exact cost, plus the limits and the legal side.
Read the article
Paste an Amazon search or product URL into a ready-made Actor and get one row per product with price, ASIN, rating and review count. This guide covers the no-code steps, the API, ZIP code pricing, a real run and its cost.
Read the article
Scrape Google search results by query and country and get each results page as JSON: organic results with positions, People Also Ask and related searches. Run it without code or from Python, with a real run, the cost per page and Google's terms.
Read the articleScrape.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.