CV APIcv.lv ↗
Access CV.lv job listings, detailed vacancy descriptions, employer profiles, categories, and location data via 6 structured API endpoints.
What is the CV API?
The CV.lv API provides access to Latvia's leading job board through 6 endpoints, covering vacancy search, full job descriptions, employer profiles, and reference data. The search_jobs endpoint returns vacancy arrays with salary ranges, work time codes, and facet counts for categories, towns, and languages. The get_job_details endpoint delivers HTML-formatted job content, contact details, and similar listings for any vacancy ID.
curl -X GET 'https://api.parse.bot/scraper/b83ed2d4-356d-497c-a5ab-501d3b188023/search_jobs?limit=5&towns=543&offset=0&sorting=RELEVANCE&is_hourly=false&is_remote=false&categories=ADMINISTRATION&work_times=FULL_TIME&salary_type=MONTHLY' \ -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 cv-lv-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: CV.lv Job Board SDK — search vacancies, drill into details, browse reference data."""
from parse_apis.CV_lv_Job_Board_API import CVlv, Category, Sorting, DirectoryType, VacancyNotFound
client = CVlv()
# Search for IT jobs sorted by salary, capped at 5 results
for vacancy in client.vacancies.search(categories=Category.INFORMATION_TECHNOLOGY, sorting=Sorting.SALARY, limit=5):
print(vacancy.position_title, vacancy.employer_name, vacancy.salary_from, vacancy.publish_date)
# Drill into the first vacancy's full details
vacancy = client.vacancies.search(categories=Category.SALES, limit=1).first()
if vacancy:
detail = vacancy.details()
print(detail.position, detail.highlights.salary_from, detail.highlights.rate_per)
print(detail.contacts.first_name, detail.contacts.email)
for section in detail.details.standard_details[:2]:
print(section.id, section.title)
# Browse directory items by location type
for item in client.directory_items.list(type=DirectoryType.LOCATION, limit=3):
print(item.id, item.type, item.target_type, item.count, item.display_on_main_page)
# Get top employers
for emp in client.employers.top(limit=5):
print(emp.employer_name, emp.vacancy_count, emp.about[:60])
# Get category reference data
cat_map = client.category_maps.get()
print(cat_map.categories)
# Handle a missing vacancy gracefully
try:
v = client.vacancies.search(limit=1).first()
if v:
v.details()
except VacancyNotFound as exc:
print(f"Vacancy gone: {exc.vacancy_id}")
# Get all locations reference data — towns, counties, and countries
loc = client.locations.get()
for town in loc.towns[:3]:
print(town.id, town.name, town.country_id)
for cid, country in list(loc.countries.items())[:2]:
print(country.id, country.iso, country.name)
print("exercised: vacancies.search / vacancy.details / directory_items.list / employers.top / category_maps.get / locations.get")
Search and filter job listings on CV.lv. Returns vacancy results along with facet counts for categories, locations, languages, and work times. Supports filtering by keywords, category, location, salary range, remote work, and work time. Results are sorted by the chosen sorting criterion. Pagination is manual via offset/limit — the SDK does not auto-paginate this endpoint.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return per page. |
| towns | string | Comma-separated list of numeric town IDs (e.g. 543 for Riga). |
| offset | integer | Number of results to skip for pagination. |
| sorting | string | Sort order for results. |
| counties | string | Comma-separated list of numeric county IDs. |
| keywords | string | Search keywords matching position title, company name, or job content. |
| is_hourly | boolean | Filter for hourly salary jobs only. |
| is_remote | boolean | Filter for remote work positions only. |
| languages | string | Comma-separated list of language ISO codes (e.g. en,lv,ru). |
| categories | string | Comma-separated list of category codes to filter by. |
| work_times | string | Comma-separated list of work time codes. |
| employer_id | integer | Filter by a specific employer's numeric ID. |
| salary_from | integer | Minimum salary amount filter. |
| salary_type | string | Salary period type. |
{
"type": "object",
"fields": {
"towns": "object with town ID keys and job count values",
"languages": "object with language ISO keys and job count values",
"vacancies": "array of vacancy objects with id, positionTitle, employerName, salaryFrom, salaryTo, townId, remoteWork, publishDate, workTimes, categories",
"workTimes": "object with work time code keys and job count values",
"categories": "object with category code keys and job count values",
"totalResultsCount": "integer total number of matching results"
},
"sample": {
"data": {
"towns": {
"543": 1878
},
"languages": {
"en": 879,
"lv": 1217
},
"vacancies": [
{
"id": 1595778,
"townId": 556,
"salaryTo": null,
"workTimes": [
2
],
"categories": [
2,
9
],
"employerId": 19188,
"remoteWork": false,
"salaryFrom": 4500,
"publishDate": "2026-06-10T08:02:19.983+00:00",
"employerName": "CV-Online Recruitment",
"positionTitle": "Plant Manager (Liepaja)",
"remoteWorkType": "ON_SITE"
}
],
"workTimes": {
"FULL_TIME": 2275,
"PART_TIME": 83
},
"categories": {
"SALES": 480,
"INFORMATION_TECHNOLOGY": 410
},
"totalResultsCount": 2480
},
"status": "success"
}
}About the CV API
Searching and Filtering Vacancies
The search_jobs endpoint accepts keyword queries, numeric towns and counties IDs, and boolean flags like is_remote and is_hourly. Results include a vacancies array where each object carries positionTitle, employerName, salaryFrom, salaryTo, townId, remoteWork, publishDate, and workTimes. Alongside the vacancy list, the response returns facet counts in categories, towns, languages, and workTimes objects — useful for building filter UIs without a separate aggregation call. Pagination is controlled via limit and offset.
Vacancy Details and Employer Data
get_job_details takes a vacancy_id (the numeric ID from search results) plus optional job_slug and employer_slug URL parameters. The response includes a details object with a standardDetails array of HTML content sections, a highlights object with salaryFrom, salaryTo, ratePer, remoteWork, and address, a contacts object with firstName, lastName, email, and phone, and an employer object containing about, webpageUrl, and logoFileId. A similar array provides related vacancies.
Reference and Directory Data
list_job_categories returns a flat mapping of numeric IDs to category code strings such as INFORMATION_TECHNOLOGY, which can be fed directly into search_jobs. list_locations provides towns, counties, and countries objects with IDs and names needed for geographic filtering. get_directory_hits returns items with multilingual titles in Latvian, English, and Russian alongside live job counts — useful for building category or location navigation. get_top_employers lists active hiring companies with vacancyCount, about, and image file IDs for logos and cover images.
The CV API is a managed, monitored endpoint for cv.lv — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cv.lv 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 cv.lv 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 and display Latvian job listings filtered by town ID and remote work flag in a job aggregator app.
- Monitor salary ranges (
salaryFrom,salaryTo) across categories like IT or finance on CV.lv over time. - Build a company research tool using
get_top_employersto list active hiring companies with vacancy counts. - Power a multilingual job navigation widget using
get_directory_hitslocale data in Latvian, English, and Russian. - Extract recruiter contact details (
email,phone) fromget_job_detailsfor recruiting workflow automation. - Sync CV.lv category and location reference data into an internal database using
list_job_categoriesandlist_locations. - Identify related roles using the
similararray returned byget_job_detailsto surface adjacent opportunities.
| 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 CV.lv have an official developer API?+
How do I filter `search_jobs` results by location?+
towns parameter with comma-separated numeric town IDs — for example, 543 for Riga. Town and county IDs are available from the list_locations endpoint, which returns towns, counties, and countries objects with names and parent relationships.What does `get_directory_hits` return that `list_locations` does not?+
get_directory_hits returns live job counts alongside each location or category item, plus multilingual titles in Latvian, English, and Russian, short URL parameters, and a displayOnMainPage flag. list_locations only returns the geographic hierarchy without job counts or locale strings.Does the API expose CV.lv candidate profiles or resume data?+
Is job description content returned as plain text or HTML?+
details.standardDetails array from get_job_details contains HTML content sections, not plain text. If your application requires plain text, you will need to strip the HTML tags client-side after receiving the response.