offerzen.com APIwww.offerzen.com ↗
Search and retrieve tech job listings from OfferZen. Access structured data on skills, company info, locations, workplace policy, and full job descriptions via 2 endpoints.
curl -X GET 'https://api.parse.bot/scraper/390fe52d-3d8b-4db8-b1fc-068499f61ab5/search_jobs?page=1&max_pages=1&search_string=React' \ -H 'X-API-Key: $PARSE_API_KEY'
Search and list job listings with optional search string filter and pagination. Returns structured job data including skills, company info, locations, and experience requirements. Each page contains up to 12 jobs.
| Param | Type | Description |
|---|---|---|
| page | integer | Starting page number (1-based). |
| max_pages | integer | Maximum number of pages to fetch (up to 12 jobs per page). |
| search_string | string | Search keyword to filter jobs (e.g. 'Python', 'React', 'Data Engineer'). Omitting returns all jobs. |
| workplace_policy | string | Filter by workplace policy: 'remote', 'hybrid', or 'office'. Omitting returns all policies. |
{
"type": "object",
"fields": {
"jobs": "array of job objects with id, name, primary_role, workplace_policy, years_experience, employment_type, locations, must_have_skills, nice_to_have_skills, other_roles, company, and detail_url",
"start_page": "integer - the starting page number",
"total_jobs": "integer - total number of matching jobs",
"total_pages": "integer - total number of pages available",
"pages_fetched": "integer - number of pages actually fetched in this request"
},
"sample": {
"data": {
"jobs": [
{
"id": "6a0432249ffd14d2e1dcabec",
"name": "Mobile Developer",
"company": {
"id": "67f3868349c2a7dfffa796a1",
"name": "Exaze",
"logo_url": "https://d3qdc2zh3mwabb.cloudfront.net/media/...",
"tech_stack": [
"Amazon S3",
"Amazon EC2",
"Amazon VPC"
],
"brand_color": ""
},
"locations": [
{
"city": "Johannesburg",
"country": "South Africa",
"display_address": "Johannesburg, South Africa"
}
],
"detail_url": "https://www.offerzen.com/job/6a0432249ffd14d2e1dcabec",
"updated_at": "2026-05-13T10:17:48.308+02:00",
"other_roles": [],
"primary_role": "Mobile engineer",
"published_at": "2026-05-13T10:17:48.307+02:00",
"currency_code": "zar",
"employment_type": "permanent",
"must_have_skills": [
{
"skill": "React Native",
"years_experience": null
}
],
"workplace_policy": "office",
"years_experience": 4,
"nice_to_have_skills": [],
"remuneration_period": "month",
"visa_sponsorship_available": null,
"requires_work_authorisation": null
}
],
"start_page": 1,
"total_jobs": 35,
"total_pages": 3,
"pages_fetched": 1
},
"status": "success"
}
}About the offerzen.com API
The OfferZen API provides 2 endpoints to search and retrieve developer job listings from OfferZen's South African tech job marketplace. The search_jobs endpoint returns structured arrays of job objects including required skills, workplace policy, years of experience, employment type, and location — with support for keyword filtering and pagination across up to 12 jobs per page. The get_job_details endpoint returns the full job description, company metadata, and structured page sections for a specific listing.
Search Jobs
The search_jobs endpoint accepts optional parameters including search_string (e.g. 'Python', 'React', 'Data Engineer'), workplace_policy ('remote', 'hybrid', or 'office'), and pagination controls page and max_pages. Each result object in the jobs array includes id, name, primary_role, workplace_policy, years_experience, employment_type, locations, and must_have_skills. The response also carries total_jobs, total_pages, and pages_fetched so you can paginate efficiently without extra calls.
Job Details
The get_job_details endpoint takes a job_id from search_jobs results and returns the full record for that listing. Fields include title, description (full role text), primary_role, other_roles, and a company object containing id, name, logo_url, brand_color, and tech_stack. The sections object surfaces key structured content blocks from the listing page — for example 'Skills and experience' and 'Location and salary' — as text strings. The locations array provides city, country, and display_address per location, and detail_url links directly to the canonical listing page.
Coverage and Pagination
Search results are paginated at 12 jobs per page. The total_jobs field in search_jobs reflects the count of listings matching your filters at call time. Omitting search_string and workplace_policy returns all active listings. Filtering by workplace_policy narrows results to one of three categories OfferZen exposes: remote, hybrid, or office-based roles.
- Aggregate South African developer job listings filtered by skill keyword (e.g. 'Go', 'Kubernetes') for a job aggregator site.
- Monitor OfferZen for new remote or hybrid roles matching a specific
primary_rolecategory. - Extract
must_have_skillsarrays across all listings to analyze demand trends for specific technologies. - Pull
company.tech_stackdata fromget_job_detailsto research the tooling used by hiring companies. - Build a salary and location comparison tool using the 'Location and salary' section returned in
sections. - Feed structured job data into a recruitment CRM by polling
search_jobswithworkplace_policyandsearch_stringfilters.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does OfferZen have an official public developer API?+
What does the `sections` field in `get_job_details` contain?+
sections field is an object (or null if unavailable) whose keys are named content blocks from the job listing page — for example 'Skills and experience' and 'Location and salary'. Each key maps to a text string with the content of that block. Not every listing will populate all sections.Can I filter jobs by salary range or specific city?+
search_jobs endpoint filters by search_string and workplace_policy only; there is no salary-range or city parameter. Location data is returned per result but is not a filterable input. You can fork this API on Parse and revise it to add city or salary filtering if the source supports it.Is there a way to retrieve company profiles or candidate-facing data beyond what job listings expose?+
name, logo_url, brand_color, tech_stack). Standalone company profiles, candidate profiles, or application data are not included. You can fork it on Parse and revise to add a company-profile endpoint.How fresh are the job listings returned by `search_jobs`?+
posted_date field in the response, so recency filtering based on date is not currently available in the search results.