How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
utilityin Rippling job boards. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Read public Rippling job boards and build a clear record of hiring activity. This Actor returns job titles, locations, dates, pay ranges and optional full descriptions. It can also save new, changed and closed listings from repeat scans.
Who uses it
Job feed builders
Collect jobs from a known list of Rippling employers.
Sales and investors
Track hiring activity at companies you follow.
Pay researchers
Read stated yearly pay ranges where companies give them.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.035 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Saved job row | $0.0016 | One current or expired job row saved to the default Dataset. |
Examples
- One job: about $0.04.
- 1,000 jobs: about $1.64.
- Every day 100 jobs, for 30 days: about $5.85 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 3,000 jobs.
Prices checked on 24 October 2026. See the current price on Apify.
Questions
Do I need a Rippling login or API key?
No. The tool reads public job data. It does not send applications.
How many boards can I add?
Up to 10 boards and up to 300 saved jobs per run.
Does monitor mode see pay changes?
No. It compares title, department and locations only.
Are contact details in the job text?
No. Emails, phone numbers and profile links are removed from descriptions.
Details
Step by step on Apify
- Open Input. The form has
utilityin Rippling job boards as a prefill. - Keep Maximum saved jobs at
100. Leave monitor mode off for your first run. - Use
256 MBmemory and a timeout of180 seconds. Set a maximum charge such as$0.30. - Click Start.
- Open Output → Jobs. Check
title,company.name,postedAtandurl. - Open Scan summary. Check
status,rowCountand the board statuses.
Use cases
- Build a job feed from a known list of employers. Use
sourceJobIdandboardSlugto join rows across scans. - Track company hiring activity. Read titles, departments, country codes and stated pay.
- Watch new roles and closed listings. Use incremental mode and act on
changeType. - Review role text. Turn on
includeDescriptionand keep null values for missing facts.
Tips for better results
- Board names are case sensitive. Copy them from a real apply link.
- Mix filters: title keywords, locations and departments work together.
- Use a new state key when you change boards or filters.
Limits and good to know
The live acceptance scan read 10 boards and saved 300 unique jobs. The source had more matches, so the result was correctly marked partial. The highest live test with full descriptions is 10 jobs. Larger runs with descriptions can meet byte or time limits sooner. These are measured samples, not a promise of fixed time for every board.
Troubleshooting
| Symptom | Likely reason | Check and action |
|---|---|---|
| Zero jobs, complete | Filters found no matches, board is empty, or monitor saw no changes | Check matched/uniqueJobs and CHANGES; try without filters |
| Zero jobs, not_found | Board name or case is wrong, or board closed | Copy a current apply link |
| partial | A cap or source problem | Read reason and boards/errors; reduce boards or raise a cap within its allowed range |
| STATE_SCOPE_OR_STORAGE_ERROR | Same monitor name with different boards/filters, or storage unavailable | Use a new stateKey for a new scope |
| RUNTIME_LIMITS | More than 256 MB memory or no finite positive timeout | Use 256 MB and 180 seconds |
| INVALID_INPUT | Unknown key, wrong type or out-of-range value | Use an example above and check the field table |
| Description is null | Setting off or details unavailable | Turn on includeDescription and read row errors |
| Date or salary is null | Source has no fact or detail failed | Keep null; check the public job page |
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"schemaVersion": "job.v1",
"id": "rippling:global:71035fd3-bff0-4450-b213-281637a07e6c",
"source": "rippling",
"market": "global",
"sourceJobId": "71035fd3-bff0-4450-b213-281637a07e6c",
"url": "https://ats.rippling.com/utility/jobs/71035fd3-bff0-4450-b213-281637a07e6c",
"title": "Director of AI",
"company": {
"name": "UTILITY",
"sourceCompanyId": "utility",
"url": "https://ats.rippling.com/utility/jobs"
},
"advertiser": {
"name": "UTILITY",
"sourceAdvertiserId": "utility"
},
"location": {
"raw": "Remote (United States)",
"suburb": null,
"city": "New York",
"region": "New York",
"postcode": null,
"country": "US"
},
"locations": [
{
"name": "Remote (United States)",
"city": "New York",
"state": "New York",
"country": "United States",
"countryCode": "US",
"workplaceType": "HYBRID"
}
],
"workArrangement": "hybrid",
"employmentTypes": [
"full_time"
],
"salary": {
"raw": null,
"min": null,
"max": null,
"currency": null,
"period": null,
"includesSuper": null
},
"classifications": [
{
"category": "Engineering",
"subcategory": null
}
],
"teaser": null,
"bulletPoints": [],
"postedAt": "2025-08-28T14:44:37.790Z",
"updatedAt": null,
"expiresAt": null,
"isPromoted": false,
"description": null
}Use it from code
Actor ID: cliqtomedia/rippling-jobs-monitor-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/rippling-jobs-monitor-scraper").call(run_input={
"boards": [
"utility"
],
"keywords": []
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~rippling-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"boards": ["utility"], "keywords": []}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/rippling-jobs-monitor-scraper")
result = tool.invoke({"run_input": {"boards": ["utility"], "keywords": []}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (29)
| Field | Type |
|---|---|
schemaVersion | string |
id | string |
source | string |
market | string |
sourceJobId | string |
url | string |
title | string |
contentHash | string |
scrapedAt | string |
boardSlug | string |
company | object |
advertiser | object |
location | object |
locations | array |
workArrangement | string |
employmentTypes | array |
salary | object |
classifications | array |
teaser | string |
bulletPoints | array |
postedAt | string |
updatedAt | string |
expiresAt | string |
isPromoted | boolean |
description | object |
changeType | string |
firstSeenAt | string |
status | string |
errors | array |
Input settings (12)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Rippling job boards required | boards | array | ["utility"] |
| Title keywords | keywords | array | [] |
| Locations | locations | array | [] |
| Departments | departments | array | [] |
| Maximum saved jobs | maxResults | integer | 100 |
| Include descriptions | includeDescription | boolean | false |
| Monitor changes | incremental | boolean | false |
| Monitor name | stateKey | string | "" |
| Save expired jobs | emitExpired | boolean | true |
| Save unchanged jobs | emitUnchanged | boolean | false |
| Maximum HTTP requests | maxRequests | integer | 320 |
| Maximum scan seconds | maxSeconds | integer | 120 |
