Jobvision APIjobvision.ir ↗
Search and filter Iranian job postings from Jobvision.ir. Get job titles, company info, salary ranges, locations, and categories via 3 structured endpoints.
What is the Jobvision API?
The Jobvision.ir API provides access to Iran's largest job board through 3 endpoints covering job search, category catalogs, and location catalogs. The list_jobs endpoint returns paginated job postings with up to 50 results per page, each including title, company details, salary range, work type, seniority level, and job categories. Two catalog endpoints supply the slugs needed to filter searches by category and location.
curl -X GET 'https://api.parse.bot/scraper/b99f8df0-7a93-45ee-badc-56494249fa3a/list_jobs?sort=newest&job_type=full-time&page_size=3' \ -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 jobvision-ir-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.
"""Walkthrough: Jobvision Iran job search — bounded, re-runnable."""
from parse_apis.jobvision_ir_api import Jobvision, JobSort, JobType, InputNotFound
client = Jobvision()
# Browse the category catalog and pick the first slug for a filtered search.
category = client.categories.list(limit=5).first()
if category is not None:
print(category.slug, category.title_en)
# Use the discovered slug to search jobs in that category, sorted by salary.
for job in client.jobs.list(
category=category.slug,
sort=JobSort.HIGHEST_SALARY,
page_size=5,
limit=10,
):
print(job.title, job.company_name_en, job.salary_text)
# Browse provinces and drill into locations for the first one.
province = client.provinces.list(limit=3).first()
if province is not None:
print(province.province, [loc.title for loc in province.locations[:3]])
# Use the first location slug to filter jobs by location.
if province.locations:
loc_slug = province.locations[0].slug
try:
first_job = client.jobs.list(
location=loc_slug,
job_type=JobType.FULL_TIME,
limit=1,
).first()
except InputNotFound:
print("location slug no longer valid:", loc_slug)
else:
if first_job is not None:
print(first_job.title, first_job.city, first_job.is_remote)
print("exercised: categories.list / jobs.list / provinces.list")
Search and list job postings on Jobvision.ir. One upstream request per call returns one page of jobs (each with id, url — a direct link to the job's page on jobvision.ir — title, company info, location, salary range, work type, seniority level and job categories) together with total_count and an applied_filters echo showing how the site resolved the category and location filters. Filters combine: keyword (title/company text), category (a category slug from list_job_categories), location (a location slug from list_locations, e.g. a whole province or a single city), job_type (one employment type) and sort. An unknown category or location slug is rejected as stale_input (the site would otherwise silently ignore it). Pagination is controlled by page and page_size; omitting them returns the first page of 20. A valid filter combination with no matches returns an empty jobs array with total_count 0. When the site's own search backend fails for a request (observed for keyword searches during an outage), the call returns an upstream error rather than results.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-indexed). |
| sort | string | Result ordering. |
| keyword | string | Job title or company name search query (e.g. 'python', 'حسابدار'). Omitting returns all jobs. |
| category | string | Job category slug, as returned by list_job_categories.categories[*].slug (one shape: 'network'). Omitting does not restrict by category. |
| job_type | string | Employment type filter. Omitting returns all types. |
| location | string | Location slug, as returned by list_locations.provinces[*].locations[*].slug; a province-wide slug has the form 'all-cities-of-<province>', a city slug is the city name (one shape: 'all-cities-of-tehran'). Omitting does not restrict by location. |
| page_size | integer | Number of results per page, between 1 and 50. |
{
"type": "object",
"fields": {
"jobs": "array of job objects with id, url (string, absolute link to the job's page on jobvision.ir, shareable as-is), title, company info, location, salary, work type, categories",
"page_size": "integer, results per page",
"total_count": "integer, total number of matching jobs",
"current_page": "integer, current page number",
"applied_filters": "object echoing the resolved filters: category (Persian category title or null), location (Persian location title or null), job_type (the requested type or null), sort"
},
"sample": {
"data": {
"jobs": [
{
"id": 1517025,
"url": "https://jobvision.ir/jobs/1517025",
"city": "تهران",
"title": "کارمند اداری - خانم",
"industry": "آموزش / پژوهش",
"province": "تهران",
"is_remote": false,
"is_urgent": false,
"work_type": "Full Time",
"company_id": 64954,
"salary_max": 25,
"salary_min": 20,
"salary_text": "20 - 25 میلیون تومان",
"company_name": "آموزشگاه زبان های خارجه ملل",
"is_internship": false,
"job_categories": [
"مسئول دفتر / کارمند اداری و ثبت اطلاعات / تایپیست"
],
"activation_date": "2026-09-09T08:57:50Z",
"company_name_en": "melalinstitute",
"seniority_level": "Employee"
}
],
"page_size": 3,
"total_count": 52541,
"current_page": 1,
"applied_filters": {
"sort": "newest",
"category": null,
"job_type": "full-time",
"location": null
}
},
"status": "success"
}
}About the Jobvision API
Job Search and Filtering
The list_jobs endpoint accepts keyword, category, location, job_type, sort, page, and page_size parameters. Keywords can be in Persian or English — for example, 'python' or 'حسابدار' (accountant). The response includes a jobs array where each object carries an id, title, company name and logo, location string, salary range, work type, seniority level, and an array of associated job categories. The total_count field tells you how many postings match across all pages, and applied_filters echoes back the resolved Persian-language labels for the filters you passed, so you can display human-readable filter state without a second lookup.
Category and Location Catalogs
list_job_categories returns the full catalog of job categories in a single call — each entry has a slug (used as the category param in list_jobs), a numeric id, a Persian title, and an English title_en. The catalog is small (under 100 entries) and stable enough to cache. list_locations returns all provinces, each containing an array of location objects with a slug and Persian title. The first location in each province array is the province-wide slug (covering all cities in that province); subsequent entries are individual cities, and Tehran also includes district-level slugs.
Pagination and Result Size
list_jobs is paginated with 1-based page numbering. The page_size parameter accepts values between 1 and 50. A single API call returns one page of results along with current_page and total_count, giving you everything needed to walk through multi-page result sets or display pagination controls.
The Jobvision API is a managed, monitored endpoint for jobvision.ir — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when jobvision.ir 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 jobvision.ir 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 Persian-language job postings filtered by city or province using location slugs from
list_locations - Build a salary-range tracker across categories by harvesting the salary field from
list_jobsresponses over time - Populate a category-faceted job search UI using slugs and Persian titles from
list_job_categories - Monitor how many open roles a specific company has by querying
list_jobswith the company name as the keyword - Feed a labor-market analytics dashboard with seniority level and work type distributions across Iranian cities
- Alert users to new postings in a target category and location by comparing
total_countbetween polling intervals
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Jobvision.ir have an official developer API?+
What does the `applied_filters` field in `list_jobs` responses contain?+
applied_filters is an object echoing the resolved filters from your request. It includes the Persian-language category title (or null if no category was passed), the Persian-language location title (or null), and the job type. This lets you display human-readable filter labels in a UI without performing a separate lookup against the catalog endpoints.Does the API return individual job detail pages, such as full job descriptions or application URLs?+
list_jobs returns listing-level fields: title, company info, location, salary range, work type, seniority level, and categories. Full job descriptions, requirements text, and application links are not included in the current response shape. You can fork this API on Parse and revise it to add a job-detail endpoint that fetches those fields.How fresh is the job data, and how many results can I retrieve per request?+
list_jobs reflects the current state of Jobvision.ir at call time. Each request returns one page of up to 50 results (set via page_size). Use total_count and current_page together to paginate through the full result set.Can I filter jobs by multiple categories or locations simultaneously?+
list_jobs call accepts a single category slug and a single location slug. Filtering by multiple categories or locations in one call is not supported. You can fork the API on Parse and revise it to combine results from parallel filtered calls or add multi-value filter support.