KitaLulus APIkitalulus.com ↗
Access KitaLulus job listings via API. Filter by job type, location policy, education level, and specialization. Get full job details including benefits and company info.
What is the KitaLulus API?
The KitaLulus API provides access to Indonesian job listings through 2 endpoints, returning job summaries and full position details sourced from kitalulus.com. The list_jobs endpoint supports filtering by employment type, work location policy, education requirement, and job specialization, while get_job_detail returns complete information including company profile, benefits array, working hours, skill tags, and candidate requirements for any specific posting.
curl -X GET 'https://api.parse.bot/scraper/1c83c9c3-9388-4a9b-a738-88d6f9094a69/list_jobs?page=0&limit=5&sort_by=updatedAt' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace kitalulus-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
KitaLulus Job Listings API — browse Indonesian job openings and drill into details.
"""
from parse_apis.KitaLulus_Job_Listings_API import (
KitaLulus,
JobSpecialization,
SortBy,
JobNotFound,
)
client = KitaLulus()
# List recent job summaries sorted by last update
for job_summary in client.job_summaries.list(
sort_by=SortBy.UPDATED_AT,
job_specialization=JobSpecialization.IT,
limit=3,
):
print(job_summary.position_name, job_summary.city, job_summary.salary_lower_bound)
# Drill into the first job's full details
job_summary = client.job_summaries.list(sort_by=SortBy.UPDATED_AT, limit=1).first()
if job_summary:
detail = job_summary.details()
print(detail.position_name, detail.job_type, detail.education_level)
for skill in detail.skill_tags:
print(skill)
# Fetch a job directly by slug and handle not-found
try:
job = client.jobs.get(slug="nonexistent-job-slug-xxxx")
print(job.position_name, job.company.name if job.company else "N/A")
except JobNotFound as exc:
print(f"Job not found: {exc}")
print("exercised: job_summaries.list / job_summary.details / jobs.get / JobNotFound")
List available job openings with optional filters and pagination. Returns jobs sorted by the specified criteria. When no filters are applied, returns the most recently updated jobs across all categories. Paginates via zero-based page number. Each job summary includes slug, position name, salary bounds, location, company info, and job type.
| Param | Type | Description |
|---|---|---|
| page | integer | Zero-based page number for pagination. |
| limit | integer | Number of jobs per page, between 1 and 100. |
| sort_by | string | Sort order for results. |
| job_type | string | Filter by employment type. |
| location_site | string | Filter by work location policy. |
| education_level | string | Filter by minimum education level. |
| job_specialization | string | Filter by job specialization category. |
{
"type": "object",
"fields": {
"jobs": "array of job summary objects containing id, slug, position_name, salary bounds, location, company info, and job type",
"page": "integer, current page number",
"count": "integer, number of jobs returned on this page",
"limit": "integer, page size used"
},
"sample": {
"data": {
"jobs": [
{
"id": "xUYxWZUUsBw",
"city": "Kota Makassar",
"slug": "kitchen-staff-2xxq",
"job_type": "Full-Time",
"province": "Sulawesi Selatan",
"updated_at": 1781130638000000,
"company_name": "March Coffee To Go",
"company_slug": "march-coffee-siz1",
"location_site": "Kerja dari kantor (WFO)",
"position_name": "Kitchen Staff",
"is_highlighted": false,
"updated_at_str": "Terakhir diperbarui 0 hari yang lalu",
"education_level": "Minimal SMA/SMK/Sederajat",
"company_logo_url": "",
"salary_lower_bound": 0,
"salary_upper_bound": 0
}
],
"page": 0,
"count": 5,
"limit": 5
},
"status": "success"
}
}About the KitaLulus API
Browsing and Filtering Job Listings
The list_jobs endpoint returns paginated job summaries from KitaLulus, Indonesia's job platform. Pagination uses a zero-based page parameter alongside a limit (1–100 results per page). Results can be sorted by updatedAt or isHighlighted. Without filters, the endpoint returns the most recently updated jobs across all categories. Each job object in the returned jobs array carries enough information to identify a position and construct a slug for further lookup.
Filtering by Type, Location, Education, and Specialization
Four filter parameters narrow results significantly. job_type accepts FREELANCE, FULL_TIME, PART_TIME, INTERNSHIP, or CONTRACT. location_site filters by work arrangement: REMOTE, ON_SITE, REMOTE_PARTIAL, or FIELDWORK. education_level sets a minimum qualification from MIDDLE_SCHOOL through BACHELOR and MASTER. job_specialization targets sectors such as IT, Sales, Akuntansi, Guru, Driver, and others — using the Indonesian-language category names as they appear on the platform.
Retrieving Full Job Details
The get_job_detail endpoint accepts a slug (e.g. admin-ar-jakarta-djti) obtained from list_jobs results. The response includes id, city, slug, job_role, job_type, gender, max_age, a company object with employer details, and a benefits array listing perks by name. This endpoint is the primary way to retrieve the full job description, requirements, and skill tags for a specific posting.
The KitaLulus API is a managed, monitored endpoint for kitalulus.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when kitalulus.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official kitalulus.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate Indonesian remote job listings by filtering
location_site=REMOTEand syncing to a local database - Build a job alert system that polls
list_jobssorted byupdatedAtto surface newly posted positions - Filter internship opportunities by
job_type=INTERNSHIPandeducation_level=BACHELORfor student-facing apps - Display company-specific job counts and benefit summaries using the
companyobject andbenefitsarray fromget_job_detail - Power a job recommendation engine by matching user-preferred specializations against the
job_specializationfilter - Track how many highlighted jobs exist in a given category by combining
sort_by=isHighlightedwith a specialization filter - Populate a freelance marketplace feed by continuously fetching
job_type=FREELANCElistings with pagination
| 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 | 100 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 KitaLulus have an official public developer API?+
What does `get_job_detail` return beyond what `list_jobs` provides?+
get_job_detail returns the full job record: the company object with employer details, a benefits array of perk names, gender and max_age candidate requirements, job_role, job_type, city, and skill tags. The list_jobs endpoint returns summary objects sufficient for browsing and slug extraction, but not the complete description or requirements.Are there limitations on how `job_specialization` values are expressed?+
job_specialization filter uses Indonesian-language category names as they appear on the platform (e.g. Akuntansi for accounting, Guru for teaching). Passing English translations or variations not in the accepted list will not match any results. Use only the exact enumerated values when constructing requests.Does the API support searching jobs by keyword or company name?+
list_jobs endpoint filters by job_type, location_site, education_level, and job_specialization, but does not accept a free-text keyword or company name parameter. You can fork this API on Parse and revise it to add a keyword search endpoint.Does the API expose salary or compensation data for job listings?+
get_job_detail cover benefits, job_role, job_type, company, city, max_age, and gender, but do not include a dedicated salary or compensation field. Many KitaLulus listings omit salary details on the platform itself. You can fork this API on Parse and revise it to surface any salary fields that are present in individual listings.