APIs / Job Scraper API
Execution in developmentJob Scraper API.
See the records first.
Explore a structured job listing sample. Prepare your query, understand the cost and keep your draft in your workspace.
Accounts are available. Collection and payments are not open.
Fixed sample output
Succeeded3 fictional records for inspecting the format.
| Title / company | Location | Source / collected at |
|---|---|---|
| Software Engineer Example North | Remote, United States | Example board A 2026-09-19T12:00:00Z |
| Backend Engineer Example Studio | New York, United States | Example board A 2026-09-19T12:00:00Z |
| Platform Engineer Example Works | Austin, United States | Example board B 2026-09-19T12:00:00Z |
Fixed fictional listings. Editing the query does not change this sample or retrieve live vacancies.
Useful records, with context.
Title, company, location and source URL describe a listing. postedAt is the source's publication date; collectedAt is collection time. Missing publication dates remain null, never replaced with collection time.
Know what is covered.
The sample uses fictional boards. Indeed, LinkedIn and Glassdoor are research candidates; no collection source is enabled yet. Filters and availability will be published for each released source.
Sample links do not lead to real vacancies. Cross-source deduplication rules, cached-data timestamps and expiry checks are still being defined. Do not treat these examples as a complete or continuously refreshed jobs database.
Pay per delivered record.
The standard candidate rate is 1 credit per eligible job record. Source-specific detail operations may differ. Your credit budget is a ceiling; internal retries will not add a separate fee.
Explore credit packs →Built for workflows and agents.
REST execution and MCP connections are still in development. You can create an account and prepare a configuration today.
Read the API design reference →Plan your integration
Understand the request.
The sample uses this draft request shape. Production validation rules and final defaults will be published with the API.
| Parameter | Purpose | Example / boundary |
|---|---|---|
query | Job keywords | Software engineer |
country | Country scope | US; coverage depends on the selected source. |
limit | Total requested result ceiling | 3 across sources, not 3 per source; not a delivery guarantee. |
maxCredits | Spending ceiling | 3 illustrative credits; this does not establish a source rate. |
Fields with context.
Listing
Title, company, location and source URL identify the returned opportunity. Unavailable values stay null.
Provenance
Source and collection time distinguish where a record came from and when it was collected. Publication dates may have limited precision.
Outcomes and usage
Task status, source outcomes and credits charged explain partial delivery. A failed source is different from a completed search with no matches.
Source filters are not interchangeable.
This candidate matrix reflects design research, not verified production coverage. All three sources remain unavailable.
| Candidate | Remote filter | Difference to account for | Release status |
|---|---|---|---|
| Indeed | Candidate | Date and remote filters cannot be combined in the researched implementation. Do not silently discard either filter. | Not enabled |
| Candidate | Distance uses discrete source options. Unsupported radii need an explicit decision, not silent rounding. | Not enabled | |
| Glassdoor | Not in the researched implementation | A remote-only request must not imply that this source applied a remote filter. | Not enabled |
Prepare a payload in your language.
These integration drafts follow the inputs above. Execution is not open: use environment variables for the API key and operation URL only after the contract is published. No request runs on this page.
# Integration draft: execution is not open. Bash example.
# Set the operation URL only after its contract is published.
curl --fail-with-body --max-time 60 "${TRUEFETCH_OPERATION_URL:?Set the published operation URL}" \
-H "Authorization: Bearer ${TRUEFETCH_API_KEY:?Set your API key}" \
-H 'Content-Type: application/json' \
--data-binary @- <<'TRUEFETCH_JSON'
{
"query": "Software engineer",
"country": "US",
"limit": 3,
"maxCredits": 3
}
TRUEFETCH_JSON# Integration draft: execution is not open.
# Set the operation URL only after its contract is published.
import json
import os
import requests
response = requests.post(
os.environ["TRUEFETCH_OPERATION_URL"],
headers={"Authorization": "Bearer " + os.environ["TRUEFETCH_API_KEY"]},
json=json.loads("{\n \"query\": \"Software engineer\",\n \"country\": \"US\",\n \"limit\": 3,\n \"maxCredits\": 3\n}"),
timeout=60,
)
response.raise_for_status()
print(response.json())// Integration draft: execution is not open.
// Set the operation URL only after its contract is published.
const url = process.env.TRUEFETCH_OPERATION_URL;
const key = process.env.TRUEFETCH_API_KEY;
if (!url || !key) throw new Error('Set the published operation URL and your API key.');
const response = await fetch(url, {
method: 'POST',
headers: { Authorization: 'Bearer ' + key, 'Content-Type': 'application/json' },
body: JSON.stringify({
"query": "Software engineer",
"country": "US",
"limit": 3,
"maxCredits": 3
}),
signal: AbortSignal.timeout(60000),
});
if (!response.ok) throw new Error('Request failed: ' + response.status);
console.log(await response.json());