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:
https://workwithus.pinpointhq.comin Pinpoint career URLs. 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
Export job postings from public Pinpoint career boards. Compare complete snapshots to see new, changed and removed postings. Use the results for job boards, recruiting research and hiring alerts.
Who uses it
Small job boards
Add Pinpoint jobs with title, place and link.
Remote job hunters
Keep only remote roles from companies you like.
Pay researchers
Collect published salary ranges from known employers.
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.03 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Posting saved | $0.00135 | One job posting saved to the default dataset. Unchanged postings skipped by changesOnly are not charged. |
Examples
- One job: about $0.03.
- 1,000 jobs: about $1.38.
- Every day 100 jobs, for 30 days: about $4.95 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,600 jobs.
Prices checked on 24 October 2026. See the current price on Apify.
Questions
Does it find every Pinpoint employer?
No. You add known board links. The tool does not search for employers.
How many postings can I save?
Up to 30 postings from up to 5 boards per run.
Are descriptions in HTML?
No. They are plain text. Pay fields stay empty when the board gives none.
Can I use a custom careers domain?
No. Use the pinpointhq.com board link.
Why do two rows have the same job_id?
One vacancy can have multiple publications. Use board plus posting_id to identify a publication.
Does “removed” mean the job is closed?
It means that a publication ID disappeared from a complete scan. Verify the parent vacancy before making that claim.
Can I use a board URL with a locale path?
Yes, for accepted paths. The feed is normalized to English; this Actor does not export other translations.
Details
Step by step on Apify
- Open Input.
- Keep
careerUrlsashttps://workwithus.pinpointhq.com, or add your employer's Pinpoint board. - Keep
modeasscrapeandmaxResultsas30. - Set a maximum run charge of
$0.20, then click Start. - Open Output to view postings. Check
RUN_SUMMARYfor board status and saved row count.
Use cases
| Task | Input | Key fields |
|---|---|---|
| Fill a small job board | careerUrls, scrape | title, job_url, location, description |
| Check remote hiring | remoteOnly, query | workplace_type, department, title |
| Track published pay | careerUrls | compensation, compensation_minimum, compensation_maximum |
| Track changes | monitor, previousSnapshot, changesOnly | posting_id, fingerprint, change and CHANGES |
Tips for better results
- Turn on remote only to keep roles marked remote.
- Use changes only in monitor mode. Unchanged rows have no result fee.
- Use board plus posting_id as the key. One job can have several postings.
Limits and good to know
The Actor accepts 5 boards and saves up to 30 postings. A live five-board test read 32 postings and saved 30, then correctly returned partial with no accepted snapshot. Each board feed is limited to 300 publications and 2 MiB. Total response data is limited to 10 MiB; there are at most 15 HTTP attempts. Runtime scan and writes stop after 55 seconds, with a 75-second Cloud timeout and 256 MB memory.
complete: all boards read and all eligible rows saved. Zero matches can be completepartial: a board failed, an item was invalid, or a save/time/charge limit stopped outputnot_found: all requested boards returned 404error: invalid input, all source reads failed or output failed before a row was saved
Troubleshooting
| Symptom | Likely cause | Check and action |
|---|---|---|
| Zero rows and complete | Board is empty, query has no match, or monitor found no change | Read scannedPostings, matchedPostings and CHANGES. Try an empty query. |
| not_found | Wrong or removed board | Open the board root and correct careerUrls. |
| partial with MAX_RESULTS | More than maxResults matched | Use a narrower filter or raise the limit, up to 30. Keep the old snapshot. |
| partial with source error | Timeout, access block or changed feed | Read the board reason and retry later. |
| error before scan | Invalid URL, type or snapshot scope | Use the exact input keys and matching board roots. |
| Snapshot is null | Scan or output was partial | Keep your last complete snapshot. |
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.
{
"job_id": "https://workwithus.pinpointhq.com/jobs/562609",
"posting_id": "559663",
"title": "Founding Legal Counsel",
"company": null,
"department": "Operations",
"employment_type": "Full Time",
"location": "Remote",
"workplace_type": "remote",
"compensation": null,
"reporting_to": "Chief Operating Officer",
"published_at": null,
"job_url": "https://workwithus.pinpointhq.com/en/postings/ce6c9e5c-a2d3-42b0-a01e-9edeae315b04",
"source_feed": "https://workwithus.pinpointhq.com/postings.json",
"source": "pinpoint",
"scraped_at": "2026-10-03T23:50:21.151Z",
"board": "https://workwithus.pinpointhq.com",
"source_job_id": "562609",
"employment_type_code": "full_time",
"compensation_minimum": null,
"compensation_maximum": null,
"compensation_currency": null,
"compensation_frequency": null,
"deadline_at": null,
"fingerprint": "dad145f28b5c1017484dc6b4a02cafc85f8f1175e7c7b4c93e18104b0660e8fe",
"change": "current",
"description": null
}Use it from code
Actor ID: cliqtomedia/pinpoint-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/pinpoint-jobs-monitor-scraper").call(run_input={
"careerUrls": [
"https://workwithus.pinpointhq.com"
],
"query": ""
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~pinpoint-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"careerUrls": ["https://workwithus.pinpointhq.com"], "query": ""}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/pinpoint-jobs-monitor-scraper")
result = tool.invoke({"run_input": {"careerUrls": ["https://workwithus.pinpointhq.com"], "query": ""}})
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 (26)
| Field | Type |
|---|---|
job_id | string |
posting_id | string |
title | string |
company | string |
department | string |
employment_type | string |
location | string |
workplace_type | string |
compensation | string |
reporting_to | string |
published_at | string |
description | string |
job_url | string |
source_feed | string |
source | string |
scraped_at | string |
board | string |
source_job_id | string |
employment_type_code | string |
compensation_minimum | number |
compensation_maximum | number |
compensation_currency | string |
compensation_frequency | string |
deadline_at | string |
fingerprint | string |
change | string |
Input settings (8)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Pinpoint career URLs | careerUrls | array | ["https://workwithus.pinpointhq.com"] |
| Keyword filter | query | string | "" |
| Remote roles only | remoteOnly | boolean | false |
| Include full description | includeDescription | boolean | true |
| Maximum saved postings | maxResults | integer | 30 |
| Run mode | mode | string | "scrape" |
| Save only new or changed postings | changesOnly | boolean | false |
| Previous complete snapshot | previousSnapshot | object |
