You need to programmatically fetch full job details (title, employer, description, application links, and salary context) from a reliable source and ship it this week. By the end of this article, you’ll be able to search jobs, pull a job’s detailed profile by ID, and fetch estimated salaries around a location using a single key via Zyla API Hub.
What you can build with this API
The JSearch API aggregates jobs from the web (including Google for Jobs) and exposes:
- Search: query for jobs with extensive filtering options available on Google for Jobs.
- Job Details: expand a job_id into full details, including additional apply options, employer reviews context, and estimated salaries for similar roles.
- Estimated Salary: get pay ranges for a job title around a location.
Teams use this to power job boards, recruiting automation, applicant tracking integrations, and internal sourcing tools.
Getting started on Zyla API Hub
Open the JSearch API page on Zyla API Hub and subscribe. The hub uses a subscription with quota (not pay-per-call). For a first integration, you can start a 7-day trial or 50 requests depending on availability. You’ll receive a single API key that authorizes calls to this and any other API you subscribe to on the hub.
Start 7-day trial on JSearch API
Authentication
Send your key in the Authorization header for each request:
- Authorization: Bearer YOUR_API_KEY
Endpoints
1) Search
Search for jobs posted on job sites across the web on the largest job aggregate in the world (Google for Jobs). URL and method:
- Method: GET
- URL: https://zylalabs.com/api/2526/jsearch-api/2516/search
Required query parameter:
- query (string): for example, “javascript developer”
cURL example (copy/paste):
curl -s -X GET "https://zylalabs.com/api/2526/jsearch-api/2516/search?query=javascript+developer" \
-H "Authorization: Bearer YOUR_API_KEY"
Sample JSON response:
{
"status": "OK",
"request_id": "9d5b1504-e1c0-43dc-ba08-7cd4ef1de4a6",
"parameters": {
"query": "javascript developer",
"page": 1,
"num_pages": 1,
"country": "us",
"language": "en"
},
"data": [
{
"job_id": "NWFBUzhCZkdmOVBVbVdKYUFBQUFBQT09OkVzc0JDb3dCUVVwcFZEUjBTMnBvWlhWUk1qUkdSRmx5TUVKNWNUSTBSRmhLTVZBdGRXeFRMVWd0ZUdwUmRtVnlNVXRYYUVOM2JIRk9jWE16ZUVka2F6a3dORmRWV2xVNFYzbHhSRGRaV1VrdE0wbFdkMHBIZGxoaU5UTkNUazVxUmpOUE5XVmlYM0E0ZEZWQk1sWnlRbWwwV2tSMGMxcE1RVTFEYUdoblVteGpTRUpXVGtjNVNtazFUMmhZUVc1R1dYb1NGbEo0TlRkaGRXbExRbEJEYTJ0UVNWQTVjVVJLU1ZFYUlrRkVjM0k1WmxJdFlsSkpkbVJRY204MFV6UTVjSEJTTkhCcmJXd3lRbU41YkVF",
"job_title": "Full Stack JavaScript Developer - Top Secret Clearance",
"employer_name": "Metric5",
"employer_logo": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRTpqtlYyQWQ7NZ_F3cBFi24PFec2gdiTaCd_CJ&s=0",
"employer_website": "https://www.metric5.com",
"job_publisher": "LinkedIn",
"job_employment_type": "Full-time",
"job_employment_types": [
"FULLTIME"
],
"job_apply_link": "https://www.linkedin.com/jobs/view/full-stack-javascript-developer-top-secret-clearance-at-metric5-4447358729",
"job_apply_is_direct": false,
"apply_options": [
{
"apply_link": "https://www.linkedin.com/jobs/view/full-stack-javascript-developer-top-secret-clearance-at-metric5-4447358729",
"is_direct": false,
"publisher": "LinkedIn"
}
],
"job_description": "Location: Springfield, VA - onsite\n\nMetric5 is looking for a motivated Full Stack JavaScript Developer for work on a highly visible project for our NGA/DoD customer.\n\nThe ideal Full Stack JavaScript Developer has hands-on experience working in a true Agile environment performing software engineering tasks across multiple teams, with expertise spanning front-end and back-end development. Our software engineers serve in critical roles to design, build, test, and maintain software products to ensure strong functionality and optimization.\n\nAs a software engineer at Metric5, you will be responsible for the technical design, development, documentation, and engineering of software solutions using React, NestJS, Node.js, TypeScript, and Vite within a modern cloud-native ecosystem. Your resp…
What to use:
- data[].job_id: pass this to Job Details to expand a listing.
- data[].job_title, employer_name: show in your UI list.
- data[].job_apply_link and apply_options: build “Apply” buttons.
- parameters: useful for logging and pagination logic where applicable.
Python example for Search
This snippet searches for “javascript developer” and prints key fields you’ll show in a results page, then captures a job_id for details.
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://zylalabs.com/api/2526/jsearch-api/2516/search"
headers = {
"Authorization": f"Bearer {API_KEY}"
}
params = {
"query": "javascript developer"
}
resp = requests.get(BASE_URL, headers=headers, params=params, timeout=30)
resp.raise_for_status()
payload = resp.json()
print("Status:", payload.get("status"))
for i, job in enumerate(payload.get("data", []), start=1):
print(f"{i}. {job.get('job_title')} — {job.get('employer_name')}")
print(" Apply:", job.get("job_apply_link"))
print(" Publisher:", job.get("job_publisher"))
print()
# Capture a job_id to fetch details later
first_job_id = payload.get("data", [{}])[0].get("job_id")
print("First job_id for details:", first_job_id)
2) Job Details
Get all job details, including additional application options/links, employer reviews context, and estimated salaries for similar jobs.
- Method: GET
- URL: https://zylalabs.com/api/2526/jsearch-api/2517/job-details
Required query parameter:
- job_id (string)
cURL example:
Sample JSON response excerpt:
What to use:
- data[].job_uid and data[].job_id: stable identifiers for deduplication and storage.
- Full description and additional apply options to render your detail page.
3) Estimated Salary
Get estimated salaries for a job around a location.
- Method: GET
- URL: https://zylalabs.com/api/2526/jsearch-api/2518/estimated-salary
Parameters:
- job_title (string, required)
- location (string, required)
- radius (string, optional)
cURL example:
Sample JSON response:
What to use:
- median_salary: quick benchmark for comp bands.
- salary_period and salary_currency: show correct units (annual USD in this example).
- salaries_updated_at: timestamp you can display or use for cache invalidation. Timestamp is ISO 8601.
End-to-end flow: search to details to salary
- Call Search with a text query to get a list of jobs and job_id values.
- Pick a job_id and call Job Details to enrich your detail page with full content and application options.
- Optionally call Estimated Salary for the role and location the user is viewing to add comp context.
Store job_id and job_uid to avoid duplicates. The Search response includes a “parameters” block you can log to trace the query context. Consider caching Search and Salary responses for a short TTL to reduce redundant calls and keep your UX snappy.
Practical implementation notes
- Authorization: always “Authorization: Bearer YOUR_API_KEY”.
- Units and currency: Estimated Salary returns salary_period (e.g., YEAR) and salary_currency (e.g., USD). Display both with amounts.
- Timestamps: salaries_updated_at is ISO 8601; convert to local display format in your UI if needed.
- Quota model: Zyla uses subscription + quota, not pay-per-call. For first use, expect a 7-day trial or 50 requests depending on availability. Check the API page for current access options and pricing.
- Pagination and filtering: the Search example response includes page and num_pages; follow the API page for additional filtering options supported on Google for Jobs.
- Error handling: check status and HTTP codes; log request_id to correlate issues with support.
Calling the API from AI agents via MCP
Every API on Zyla can also be called from AI agents and IDE copilots that support the Model Context Protocol (MCP). Point your client to:
https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY
Once connected, tools like Claude Code, Cursor, and Windsurf can call the JSearch API using your same key. For client setup details, see the MCP endpoint information.
Real-world use cases
- Job board search: implement a “JavaScript Developer” feed by calling Search and rendering job_title, employer_name, and job_apply_link.
- ATS enrichment: given a scraped job link, search by role keywords, then call Job Details to normalize fields and store job_uid for dedupe.
- Comp bands: call Estimated Salary by job_title and user-chosen city to set expectations next to the application CTA.
- Alerts and digests: run scheduled Search queries and send personalized email digests with job_apply_link and employer_website.
Production checklist
- Securely store the API key; never commit it to source control.
- Log request_id and parameters for observability and audits.
- Respect the subscription quota; implement exponential backoff on retries.
- Cache Estimated Salary responses per (job_title, location, radius) for a few hours.
- Normalize employer names and persist job_uid to prevent duplicates across runs.
FAQ
How do I get a job_id to call Job Details?
Use the Search endpoint first. Each item in data[] includes a job_id you can pass to Job Details.
Can I filter Search beyond the query string?
The Search endpoint supports extensive filtering similar to Google for Jobs. Refer to the API page on Zyla for the full set of supported parameters.
What currency and units do salaries use?
Estimated Salary returns salary_currency and salary_period per record. In the example above, values are annual USD.
Is there a free plan?
No. Zyla uses subscription + quota. Check the API page for current access options. For first use, you can start a 7-day trial or 50 requests depending on availability.
Can I call these endpoints from an IDE agent?
Yes. Use the MCP endpoint at https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY with your IDE or agent that supports MCP.
Ready to ship your integration? Subscribe and get your API key on the JSearch API page, then plug in the Search, Job Details, and Estimated Salary endpoints to power your job feeds and detail pages. Start 7-day trial on JSearch API